执行查询
通过page方法分页
baseService.page(new Page<>(current, size), queryWrapper);
public IPage<Entity> pageSelectByCondition(int current, int size, Entity entity) {
return baseService.page(new Page<>(current, size),
Wrappers.<Entity>lambdaQuery()
.setEntity(entity)
);
2.1 selectPage() 方法查询
IPage iPage = userMapper.selectPage(page, wrapper);
在执行查询时,可以调用 selectPage()
方法,该方法中需要使用 Page 对象及 QueryWrapper 对象。
在 Page 对象中,可以指定分页查询时的当前页号、每页条数等信息。如果当前页号是0或者1时,查询的结果都是第1页的内容。
在 QueryWrapper 对象中,可以指定查询条件,这个和普通查询是一样的用法。
例如:查询所有用户中 remark 内容包含 “老师” 的记录:
代码语言:java
//分页查询
@Test
public void selectUserByPage(){
Page<User> page = new Page<>(2, 2);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("remark", "老师");
IPage<User> iPage = userMapper.selectPage(page, wrapper);
//总页数
System.out.println(iPage.getPages());
//总条数
System.out.println(iPage.getTotal());
//每页条数
System.out.println(iPage.getSize());
//当前页的结果集
System.out.println(iPage.getRecords());
//当前页号
System.out.println(iPage.getCurrent());
}
在控制台中可以看到,实际执行了两次查询:
第一次是查询的总条数;
第二次是使用了 limit 关键字进行分页查询。
==> Preparing: SELECT COUNT(*) AS total FROM user WHERE (remark LIKE ?)
==> Parameters: %老师%(String)
<== Columns: total
<== Row: 5
<== Total: 1
==> Preparing: SELECT id,username,gendar,remark FROM user WHERE (remark LIKE ?) LIMIT ?,?
==> Parameters: %老师%(String), 2(Long), 2(Long)
<== Columns: id, username, gendar, remark
<== Row: 10, 张三, 女, 体育老师
<== Row: 11, 刘能, 男, 演讲老师
<== Total: 2
结果输出:
3
5
2
User{id=10, username='张三', gendar='女', remark='体育老师'}, User{id=11, username='刘能', gendar='男', remark='演讲老师'}
2
2.2 selectMapsPage() 方法查询
查询时,调用了 selectMapsPage()
方法,该方法中仍然需要使用 Page 对象及 QueryWrapper 对象。
和 selectPage()
方法不同的是,这里的 Page 对象必须是 Page<Map<String , Object>>
,泛型必须是 Map<String , Object>。QueryWrapper 对象的使用没有差别。
查询的结果也同样是一个 IPage<Map<String, Object>>
泛型类型的对象。
代码语言:java
//分页查询
@Test
public void selectUserByPage2(){
Page<Map<String , Object>> mapPage = new Page<>(2 , 2 );
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("remark", "老师");
IPage<Map<String, Object>> iPage = userMapper.selectMapsPage(mapPage, wrapper);
//总页数
System.out.println("总页数: " + iPage.getPages());
//总条数
System.out.println("总条数: " + iPage.getTotal());
//每页条数
System.out.println("每页条数: " + iPage.getSize());
//当前页的结果集
System.out.println("当前页的结果集: " + iPage.getRecords());
//当前页号
System.out.println("当前页号: " + iPage.getCurrent());
}
控制台输出可以看到,该方法同样进行了两次查询:
==> Preparing: SELECT COUNT(*) AS total FROM user WHERE (remark LIKE ?)
==> Parameters: %老师%(String)
<== Columns: total
<== Row: 5
<== Total: 1
==> Preparing: SELECT id,username,gendar,remark FROM user WHERE (remark LIKE ?) LIMIT ?,?
==> Parameters: %老师%(String), 2(Long), 2(Long)
<== Columns: id, username, gendar, remark
<== Row: 10, 张三, 女, 体育老师
<== Row: 11, 刘能, 男, 演讲老师
<== Total: 2
结果输出:
总页数: 3
总条数: 5
每页条数: 2
当前页的结果集: {gendar=女, remark=体育老师, id=10, username=张三}, {gendar=男, remark=演讲老师, id=11, username=刘能}
当前页号: 2
与第一种查询结果集不同,因为得到的是Map,因此结果集中字段的位置并不固定。