@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 |
|
INPUT | insert 前程序员自行 set 主键值,(如果没有手动设置ID值,则ID为null,使用数据库自增策略) |
ASSIGN_ID | 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口 |
ASSIGN_UUID | 分配 UUID,主键类型为 String(since 3.3.0),使用接口 |
@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);
}