MyBatis-Plus 常用注解

文章目录

    • MyBatis-Plus 常用注解
        • 1. @TableName
        • 2. @TableId
        • 3. @TableField
        • 4. @TableLogic
        • 5. @Version

MyBatis-Plus 常用注解

​ MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus官方推荐在 SpringBoot 工程中使用。

1. @TableName

作用:指定类为哪个表的实体类

位置:实体类上方

//数据库表名为t_student,实体类名为Student
@TableName(value = "t_student")
public class Student {

2. @TableId

作用:指定实体类的属性为主键

位置:属性上方

属性:

  • value:主键字段名
  • type:主键策略,有以下几种
描述
NONE 无状态,不设置主键类型
AUTO 自增主键
INPUT 插入前自行设置主键值
ASSIGN_ID 默认策略,使用雪花算法自动生成主键 ID,主键类型为整形或字符串。
(雪花算法:微博开源的分布式 ID 生成算法,使用一个64位的 Long 类型数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增)
ASSIGN_UUID 自动生成排除中划线的 UUID 作为主键,主键类型为字符串。
@TableId(value = "sid", type = IdType.AUTO)
private Integer id;

3. @TableField

作用:在属性和列名不同的情况下,指定映射关系

位置:非主键属性上方

属性:

  • value:非主键字段名
  • fill:自动填充,自动填充功能可以在插入或修改的时候为对象属性自动赋值。主要用于类似创建时间、修改时间这种每次插入或更新操作都需要塞值得情况,以及逻辑删除字段也可以使用自动填充功能。填充策略如下:
描述
DEFAULT 默认不处理
INSERT 插入操作填充字段
UPDATE 更新操作填充字段
INSERT_UPDATE 插入操作和更新操作均填充字段

① 首先为实体类的自动填充字段添加 @TableField 注解

/**
 * 创建时间
 */
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
 * 更新时间
 */
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

② 自定义填充类实现 MetaObjectHandler 接口

@Component
public class MybatisMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }
}

4. @TableLogic

作用:在使用逻辑删除的时候使用该注解

位置:逻辑删除属性上方

逻辑删除是指不会在数据库进行物理删除数据,而是通过一个变量代表它被删除。

id name email gender age deleted version
1 小明 [email protected] m 23 0 0
2 小红 [email protected] f 22 0 0
3 小赵 [email protected] m 25 0 0
4 小米 [email protected] f 28 0 0
5 小胖 [email protected] m 32 0 0
deleted属性代表该数据是否删除,0代表未删除,1代表已删除。此时增删改查的Sql语句发生变化:
插入: 不作限制
查找: 追加where条件过滤掉已删除数据。
更新: 追加where条件防止更新到已删除数据。
删除: 转变为更新

例如:
删除: update student set deleted=1 where id = 1 and deleted=0;
查找: select id,name,deleted from student where deleted=0;

逻辑删除之后,SQL 语句会发生变化,但是使用 MyBatis-Plus 是不需要我们自己写 SQL 语句的,所以需要在配置文件中配置即可。MyBatis-Plus 配置文件如下:(同时也加入了开启 SQL 日志打印配置和全局配置

# mybatis-plus相关配置
mybatis-plus:
  configuration:
    # 开启SQL日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 全局配置
  global-config:
    db-config:
      # 全局逻辑删除的字段名
      logic-delete-field: deleted
      # 逻辑已删除值(默认为 1)
      logic-delete-value: 1
      # 逻辑未删除值(默认为 0)
      logic-not-delete-value: 0
      
      #下面配置可以为数据库所有表与实体类对应,可以不用配置(不常用)
      #主键类型,自增
      id-type: AUTO
      # 设置表名前缀,数据库表以tb_开头
      table-prefix: tb_
      # 是否使用驼峰转下划线命名,默认开启
      table-underline: true

最后就是将 @TableLogic 注解加到对应的实体类属性上方:

@TableLogic
private Integer deleted;

5. @Version

作用:在使用 MyBatis-Plus 乐观锁插件时使用

位置:属性上方

乐观锁:乐观锁在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。

MyBatisPlus乐观锁插件实现方式:

  • 取出记录时,获取当前 version
  • 更新时,带上这个 version
  • 执行更新时, set version = new Version where version = oldVersion
  • 如果version不对,就更新失败

关于 MyBatis-Plus 的乐观锁插件,这里就不展开详细的说明了。只对此注解进行简单的介绍。

@Version
private Integer version;

你可能感兴趣的:(mybatis,java,mysql)