MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus官方推荐在 SpringBoot 工程中使用。
作用:指定类为哪个表的实体类
位置:实体类上方
//数据库表名为t_student,实体类名为Student
@TableName(value = "t_student")
public class Student {
作用:指定实体类的属性为主键
位置:属性上方
属性:
值 | 描述 |
---|---|
NONE | 无状态,不设置主键类型 |
AUTO | 自增主键 |
INPUT | 插入前自行设置主键值 |
ASSIGN_ID | 默认策略,使用雪花算法自动生成主键 ID,主键类型为整形或字符串。 (雪花算法:微博开源的分布式 ID 生成算法,使用一个64位的 Long 类型数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增) |
ASSIGN_UUID | 自动生成排除中划线的 UUID 作为主键,主键类型为字符串。 |
@TableId(value = "sid", type = IdType.AUTO)
private Integer id;
作用:在属性和列名不同的情况下,指定映射关系
位置:非主键属性上方
属性:
值 | 描述 |
---|---|
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());
}
}
作用:在使用逻辑删除的时候使用该注解
位置:逻辑删除属性上方
逻辑删除是指不会在数据库进行物理删除数据,而是通过一个变量代表它被删除。
id | name | 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;
作用:在使用 MyBatis-Plus 乐观锁插件时使用
位置:属性上方
乐观锁:乐观锁在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。
MyBatisPlus乐观锁插件实现方式:
关于 MyBatis-Plus 的乐观锁插件,这里就不展开详细的说明了。只对此注解进行简单的介绍。
@Version
private Integer version;