mybatis-plus常用注释

@TableName

实体类的名字是User,数据库表名是t_user

1
2
3
@TableName(value = "t_user")
public class User {
}

@TableId

实体类的属性名是 id,数据库的列名是 uid,此时使用 value 属性将属性名映射到列名

1
2
@TableId(value = "uid")
private String id;

type属性用来定义主键策略

  • IdType.ASSIGN_ID 使用基于雪花算法的策略生成数据id, 注意:当对象的id被明确赋值时,不会使用雪花算法
    1
    2
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
  • IdType.AUTO 使用数据库的自增策略 注意:该类型请确保数据库设置了 ID自增 否则无效
    1
    2
    @TableId(type = IdType.AUTO)
    private Long id;
  • 全局配置 要想影响所有实体的配置,可以设置全局主键配置
    1
    2
    #全局设置主键生成策略
    mybatis-plus.global-config.db-config.id-type=auto

@TableField

功能同TableId的value属性,exist属性用于非数据库中的字段,用于想额外返回给前台表之外的值

注意:MP会自动将数据库中的下划线命名风格转化为实体类中的驼峰命名风格

例如,数据库中的列 create_time 和 update_time 自动对应实体类中的 createTime 和 updateTime

1
2
3
4
@TableField(exist = false) //注明非数据库字段属性 实体类上使用
private String abc;
@TableField(value = "数据库中字段名字")// 实体的名字对应数据库中字段名字 用于实体名字和数据库名字不一样的情况
private LocalDateTime createTime;//对应数据库字段create_time

自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作。
例如,阿里巴巴的开发手册中建议每个数据库表必须要有create_time 和 update_time字段,我们可以使用自动填充功能维护这两个字段

  1. 添加fill属性
    1
    2
    3
    4
    5
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
  2. 实现元对象处理器接口 -> 创建handler包,创建MyMetaObjectHandler类 不要忘记添加 @Component 注解
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package com.test.mybatisplus.handler;

    @Slf4j
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
    log.info("start insert fill ....");
    this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
    this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    log.info("start update fill ....");
    this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
    }

@TableLogic

逻辑删除

  • 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
  • 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
    使用场景:可以进行数据恢复
  1. 数据库中创建逻辑删除状态列
  2. 实体类中添加逻辑删除属性
    1
    2
    3
    @TableLogic
    @TableField(value = "is_deleted")
    private Integer deleted;

分页插件和乐观锁插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class MybatisPlusConfig {

/**
* 实现分页配置
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 注册乐观锁插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 分页插件
return interceptor;
}
}