@TableName
-
描述:表名注解,标识实体类对应的表,用来绑定实体类和表如果表名和类名一致可以省略
-
使用位置:实体类
@TableName("tbl_product") //绑定表关系
public class Product {
如果每个表都是以固定前缀开头,可以全局配置表前缀
属性设置 > 全局设置: 如果使用了 @TableName 指定表名,则会忽略全局的表前缀
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_ #表前缀 #例如如果要找tbl_product表对应实体类,如果实体类并未指定表名但是类名为product,设置前缀为:tbl_ ,会自动匹配表tbl_product
@TableId
-
描述:主键注解
-
使用位置:实体类主键字段
如果大部分表主键都是自增,可以进行全局设置
属性上的优先级 > 全局设置
mybatis-plus:
global-config:
db-config:
id-type: auto #主键策略
table-prefix: tbl_ #表前缀
关于主键策略 IdType
值 | 描述 |
---|---|
AUTO | 数据库 ID 自增,手动设置ID无效 |
NONE | 默认值 无状态,和不添加@TableId注解效果一样,当手动设置主键id值,会按设置的值插入,若未手动设置值,会使用雪花算法成一个Long值作为主键。 |
INPUT | insert 前程序员自行 set 主键值,(如果没有手动设置ID值,则ID为null,使用数据库自增策略) |
ASSIGN_ID | 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) 如果手动设置了id值,则使用手动设置的id,否则使用雪花算法生成一个Long类型值作为id |
ASSIGN_UUID | 分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认 default 方法) 注意主键类型要是varchar类型,长度最少32位, id示例:b463ec84690de187e3f9ad9229327d15 |
@TableField
-
描述:字段注解
-
使用位置:实体类普通字段
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
value | String | “” | 数据库字段名,如果同名可以省略 |
exist | boolean | true | 是否为数据库表字段,如果表中没有该字段必须设置为false,CRUD都不会包含该字段 |
select | boolean | true | 查询时是否查询该字段,如果设置为false,查询时不包含,但是insert、update、delete包含 |
fill | Enum | FieldFill.DEFAULT | 字段自动填充策略,默认不会自动填充值 |
@TableField(value = "pname",select = false)//查询时不会查询该字段
private String name;
自动填充
当对应的属性没有值
,执行 insert 或 update 操作自动给属性字段填充指定的值
应用场景:设置默认值,例如每次创建用户,后台程序中都需要设置创建时间、是否启用、用户等级…,这些字段就可以使用默认填充,不必每次都手动设置值
-
FieldFill 填充策略
值 | 描述 |
---|---|
DEFAULT | 默认不处理 |
INSERT | 插入时填充字段 |
UPDATE | 更新时填充字段 |
INSERT_UPDATE | 插入和更新时填充字段 |
实现步骤:
第一步:指定填充策略
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date lastUpdateTime;
第二步:设置填充值
package com.itheima.mp.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
}
第三步测试:
@Test
public void testFill(){
Product product = new Product();
product.setPname("华为P60");
product.setPrice(9999D);
//没有设置时间,让MyBatisPlus自动填充值
productMapper.insert(product);
}