MyBatis Plus-简单使用
零、本文纲要
- 一、MyBatis Plus
- Dao接口被容器扫描的方式
- MyBatis Plus与MyBatis整合开发区别
- 二、 分页拦截器
- 分页查询方法
- 分页查询参数构造
- 分页拦截器配置
- 三、 DQL映射匹配
- 表字段与编码属性不同
- 编码中含有数据库未定义的属性
- 某个字段不做查询输出
- 表名与编码实体类名不一致
- @TableField注解
- @TableName注解
- 四、 DML编程控制
- @TableId
- ID生成策略
- 逻辑删除
- 五、 乐观锁
一、MyBatis Plus
1. Dao接口被容器扫描的方式
- ① 方式一
在Dao接口上添加@Mapper
注解,并且确保Dao处在引导类所在包或其子包中
- ② 方式二
在引导类上添加@MapperScan
注解,其属性为所要扫描的Dao所在包
2. MyBatis Plus与MyBatis整合开发区别
基础依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
其余配置不变,Dao接口、Service接口与实现类做如下调整:
① Dao/Mapper接口继承BaseMapper<?>
② Service接口继承IService<?>
③ 实现类继承ServiceImpl<?, ?>
二、 分页拦截器
1. 分页查询方法
IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
2. 分页查询参数构造
- ① IPage<T>参数
IPage<User> page = new Page<>(currentPage, pageSize);
- ② Wrapper<T>参数
该参数非必须,条件查询时使用。一般使用QueryWrapper实现类,或者LambdaQueryWrapper<?>实现类。
3. 分页拦截器配置
编写一个配置类,自定义MybatisPlusInterceptor的bean,其内部设置PaginationInnerInterceptor拦截器即可。如下:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//1 创建MybatisPlusInterceptor拦截器对象
MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
//2 添加分页拦截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mpInterceptor;
}
}
三、 DQL映射匹配
1. 表字段与编码属性不同
假设密码,表字段为pwd,属性为password。则采用如下方法映射:
@TableField(value = "pwd")
private String password;
2. 编码中含有数据库未定义的属性
比如UserDto里面含有OrderId,但是tbl_user表不含order_id,则采用如下映射:
@TableField(exist = false)
private Long OrderId;
3. 某个字段不做查询输出
比如tbl_user表的pwd属性,限制该字段的查询输出,如下配置:
@TableField(value = "pwd", select = false)
private String password;
select属性默认值为true,改为false则查询时不输出。
4. 表名与编码实体类名不一致
比如名为tbl_user表,实体类为User,需要配置:
@TableName("tbl_user")
public class User{
... ...
}
各类情形整合,如下:
@Data
@TableName("tbl_user")
public class User {
private Long id;
private String name;
@TableField(value="pwd",select=false)
private String password;
private Integer age;
private String tel;
@TableField(exist=false)
private Integer online;
}
5. @TableField注解
- ① 作用位置
类属性上方
- ② 常用属性
value(默认):设置数据库表字段名称
exist:设置属性在数据库表字段中是否存在,默认为true,此属性不能与value合并使用
select:设置属性是否参与查询,此属性与select()映射配置不冲突
6. @TableName注解
- ① 作用位置
类上方
- ② 常用属性
value(默认):设置数据库表名称
四、 DML编程控制
1. @TableId
- ① 作用位置
类属性上方
- ② 常用属性
value(默认):设置数据库表主键名称
type:设置主键属性的生成策略,值查照IdType的枚举值
2. ID生成策略
- ① AUTO数据库自增策略
@TableId(type = IdType.AUTO)
private Long id;
- ② INPUT手动设置ID策略
与NONE策略一致,需要手动设置ID
- ③ ASSIGN_ID策略
通过雪花算法生成ID
- ④ ASSIGN_UUID策略
主键varchar类型32位
3. 逻辑删除
- ① @TableLogic注解
如果只是对单个实体设置逻辑删除,则可以如下使用:
@TableLogic(value="0",delval="1")
//value为正常数据的值,delval为删除数据的值
private Integer deleted;
注意:需要在对应表内也添加delete字段。
- ② 全局配置
mybatis-plus:
global-config:
db-config:
# 逻辑删除字段名
logic-delete-field: deleted
# 逻辑删除字面值:未删除为0
logic-not-delete-value: 0
# 逻辑删除字面值:删除为1
logic-delete-value: 1
五、 乐观锁
1. 快速入门
-
① 表添加version字段
-
② 实体类添加version属性
@Version
private Integer version;
- ③ 添加乐观锁拦截器
也可以与分页拦截器添加在一起,如下:
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor() {
//1.定义Mp拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//2.添加乐观锁拦截器
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mpInterceptor;
}
}
- ④ 执行DML
@Test
void testUpdate(){
//1.先通过要修改的数据id将当前数据查询出来
User user = userDao.selectById(1L);
//2.将要修改的属性逐一设置进去
user.setName("Test02");
userDao.updateById(user);
}
六、结尾
以上即为MyBatis Plus-简单使用的全部内容,感谢阅读。