常用插件
分页器插件
分页查询是开发过程中很常见的一个功能。mp 提供了该插件进行简化开发。
基础使用
- 新建MybatisPlusConfig配置类(官网)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
|
属性介绍:
image-20241210154454397
- 通过使用
selectPage
方法进行基础的查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@Test
void testPage(){
// 测试分页器
// 创建一个page对象。设置参数,当前页,每页显示条数
Page<Tags> page = new Page<>(1, 3);
// 查询的结果会存储到page对象中。第二个参数是条件构造器
tagMapper.selectPage(page,null);
List<Tags> records = page.getRecords();
// 遍历结果
records.forEach(System.out::println);
// 也有一些其他参数
page.getRecords();
page.getTotal();
page.getCurrent();
page.getSize();
page.getPages();
page.hasNext();
page.hasPrevious();
}
|
- 也可以自定义Mapper通常是一下方法:(Page 继承与Ipage)
selectPageVO
1
2
3
4
5
|
IPage<UserVo> selectPageVo(IPage<?> page, Integer state);
// 或者自定义分页类
MyPage selectPageVo(MyPage page);
// 或者返回 List
List<UserVo> selectPageVo(IPage<UserVo> page, Integer state);
|
对应的XML配置:
1
2
3
|
<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo">
SELECT id,name FROM user WHERE state=#{state}
</select>
|
案例:实际使用(其实自定义个方法同名方法,自定义返回类型等等)
1
2
3
4
5
6
7
|
@Mapper
public interface TagMapper extends BaseMapper<Tags> {
List<Tags> selectPageVO(
Page<Tags> page,
Integer id // 这个是设置自定义条件的。
);
}
|
1
2
3
4
5
|
<mapper namespace="top.rose.health.mapper.TagMapper">
<select id="selectPageVO" resultType="top.rose.health.entity.Tags">
select * from tags where id > #{id};
</select>
</mapper>
|
测试:
1
2
3
4
5
6
7
8
9
10
|
@Test
void testPageVO() {
// 测试自定义分页器
Page<Tags> page = new Page<>(1, 3);
// 查询id大于2的进行分页
List<Tags> records = tagMapper.selectPageVO(page, 2);
// 遍历结果
records.forEach(System.out::println);
System.out.println("测试结束!");
}
|
结果:
image-20241210165020252
补充 - Page类
Page
类继承了 IPage
类,实现了简单分页模型。如果你需要实现自己的分页模型,可以继承 Page
类或实现 IPage
类。
image-20241210165304596
乐观锁插件
简单来说:就是为了解决同时对数据库操作冲突的。
举例:一件物品100元,A、B 同时修改价格,A、B取出100,A操作得快,100-10 = 90 ,保存到数据库。B操作得慢,100+10 =110.保存到数据库。由于没有锁,因此110 覆盖掉 90.
解决方案:上锁– 乐观锁、悲观锁
乐观锁:保存之前,查询数据是否被修改,修改了则重新进行操作再保存。
悲观锁:只有等其他人操作结束后,才能对数据进行操作。
乐观锁实现方案:
- 数据库表添加一个version字段
- 取出数据时,记录下version
- 更新时 version +1 ,如果和数据库表中version不同则修改失败
使用
- 实体类中添加
@Version
标识乐观锁版本号字段
- MybatisPlusConfig配置类中添加乐观锁插件配置
1
2
3
4
5
6
7
8
9
10
11
|
@Configuration
@MapperScan("com.yourpackage.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
|