注解 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/223848/#idtype因为在MyBatisPlus中都是通过实体类映射到数据库的字段中,所以处理好实体类与数据库表中字段的映射关系就很重要,MyBatisPlus提供的注解可以解决数据库中表名、字段名和代码中表名、字段不对应的情况
@TableName
实体映射到表名,后面括号直接写数据库中的表名
@TableId
将实体类中的字段映射为主键,其中type属性可以选择主键id生成策略
主键生成策略-IdType为枚举类,有以下可以选择的类型
AUTO | 数据库 ID 自增 |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT | insert 前自行 set 主键值 |
ASSIGN_ID | 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID | 分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认 default 方法) |
@TableField
实体类中的字段映射为数据库中的字段,其中value属性为数据库字段名,exist属性为该字段是否在数据库中存在(适用于实体类中某些字段只在代码中有用,实际数据库中不需要保存该字段)
@TableLogic
使用该注解,需要数据库中和实体类中都有该字段,并且尽量使用yml中的全局配置
global-config:
db-config:
#逻辑删除字段名
logic-delete-field: deleted
#被逻辑删除时的字段值
logic-delete-value: 0
#默认值,即为未删除的值
logic-not-delete-value: 1
value属性为该字段默认值,delval属性为该逻辑删除字段被删除后的值
使用过后Mapper中调用删除的方法
都会自动将delete语句替换为update语句
查询的方法会自动携带没有被逻辑删除的条件
@version
使用乐观锁可以使用该注解,在实体类在该字段上使用此注解,数据库中也应增加该字段
使用乐观锁注解,需要加上乐观锁拦截器
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor() {
//定义mp拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//添加具体的拦截器
//分页插件拦截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
//乐观锁拦截器
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mpInterceptor;
}
}
更新时,先查询出要修改的数据,再设置要更新的数据
更新语句中会对version进行and匹配,并将加1后的值更新进去
当多个用户要更新同一数据时,因为version字段的存在,只有先更新的数据能够顺利更新,后更新的数据不会覆盖前面的数据