/**
* TODO 分页插件的用法
* 实现分页,方法1
*/
@Test
public void selectPage() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//SELECT COUNT(1) FROM user WHERE age >= 26
queryWrapper.ge("age", 26);
//SELECT * FROM user WHERE age >= ? LIMIT ?,?
Page<User> page = new Page<User>(1, 2);
IPage<User> iPage = userMapper.selectPage(page, queryWrapper);
System.out.println("总页数:" + iPage.getPages());
System.out.println("总记录数:" + iPage.getTotal());
List<User> userList = iPage.getRecords();
userList.forEach(System.out::println);
}
/**
* TODO 分页插件的用法
* 实现分页,方法2
*/
@Test
public void selectPage2() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//SELECT COUNT(1) FROM user WHERE age >= 26
queryWrapper.ge("age", 26);
//SELECT * FROM user WHERE age >= ? LIMIT ?,?
Page<User> page = new Page<User>(1, 2);
IPage<Map<String, Object>> selectMapsPage = userMapper.selectMapsPage(page, queryWrapper);
System.out.println("总页数:" + selectMapsPage.getPages());
System.out.println("总记录数:" + selectMapsPage.getTotal());
List<Map<String, Object>> userList = selectMapsPage.getRecords();
userList.forEach(System.out::println);
}
分页的方法
分页查询
配置MyBatisPlus分页拦截器Pagination Interceptor
MP3.x.几以上变成了 MybatisPlusInterceptor 分页拦截器
https://baomidou.com/pages/2976a3/#spring
/**
* 新的分页插件, 一缓和二缓遵循mybatis的规则, 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // DbType.H2
return interceptor;
}
MyBatis分页:逻辑分页(内存分页),若有50万条数据,消耗内存,查询速度慢
MP物理分页:
建configuration包-->配置类MybatisPlusConfig
BaseMapper.java中有两个page相关,selectPage、selectMapsPage区别在于参数不同,一个是泛型一个是map。都有条件构造器
还有一种selectMapsPage
不需要总记录数:Page<User> page = new Page<User>(1,2,false);
多表联查,用page、wtapper方法,通过xml方式,先写接口:
再写xml:没什么改变
测试:
mybatis 逻辑分页
mp 物理分页
myBatis plus分页
最开始的第一步:写配置类
多表联查的分页:看第二行这个
不查总记录数,加参数false
方法2222
111111111111
分页插件,主要的目的就是offset limit,通过传入定义好的Ipage对象,规定当前页和每个页的大小,会返回各种数据,如总记录数,总页数,当前页的数据等。
可以通过自定义SQL实现一些个性化的多表查询之类的。
分页查询,自定义sql
分页查询,自定义sql
分页查询,不查总记录数
分页查询
2、执行selectMapsPage
分页查询
2、执行selectPage
分页查询
1、创建配置类
No total needed
分页查询
1、mybatis分页查询(mybatis的rowBounds实现的分页不是物理分页,可以理解为逻辑或者内存分页)
拓展:内存分页弊端,数据量大时占用过多内存,第一次查询速度慢。
2、mybatis-plus插件实现物理分页
a、配置mybatis-plus插件
BaseMapper提供了两个分页方法:
这两个方法主要区别如下图,返回的数据是实体类型,还是map类型。
b、分页使用
分页map形式
使用分页时,不查询总记录数:第三个参数为true表示查询总记录数,否则就不查询。
当分页查询查询的是多表时使用分页:
分页插件例子
CRUD - 查询分页
配置类的书写
建配置类的操作
selectMyPage测试
格式化代码,右键Source-->Format
多表联查并分页,mapper.xml的书写
多表联查并分页,mapper接口的书写
不要总记录数的用法