设置MyBatis-Plus自定义分页查询中的总条数查询
分析Pagination对象
mybatis-plus的分页时由Pagination对象实现的,Pagination对象中有很多针对分页的常规属性,很常见,不过多分析,见以下源码。
*源码我只展示了Pagination对象的属性部分
package com.baomidou.mybatisplus.plugins.pagination;
import java.beans.Transient;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import com.baomidou.mybatisplus.toolkit.StringUtils;
public class Pagination extends RowBounds implements Serializable {
private static final long serialVersionUID = 1L;
private long total;
private int size = 10;
private int current = 1;
private boolean searchCount = true;
private boolean openSort = true;
private boolean optimizeCountSql = true;
private List<String> ascs;
private List<String> descs;
private boolean isAsc = true;
private String orderByField;
}
其中可以看到Pagination对象的其中一个属性的名称叫做searchCount,通过字面意思就能知道是‘查询条数’,但是得注意searchCount属性是一个Boolean类型的,联想一下,表示的就是:是否查询条数。
设置searchCount为fasle
如果使用的是原生的Pagination 对象,那么就按照如下方式设置不查询总条数(设置后需要自定义总条数的查询);
Pagination page = new Pagination();
page.setSearchCount(fasle);
如果使用的是非原生的Pagination 对象,那么就实例化继承了Pagination 对象的子对象,继承后子对象就拥有了父类的属性和方法,使用子类的实例化对象去设置searchCount属性为false即可(设置后需要自定义总条数的查询)。
- 此处我的Page对象是继承了Pagination 对象的
Page page = new Page();
page.setSearchCount(fasle);
编写自定义查询总条数的SQL,并定义函数
SQL:
<select id="count" parameterType="Map" resultType="java.lang.Integer" useCache="false">
SELECT COUNT(1) FROM table_name
</select>
函数:
Integer count(Map<String,String> map);
调用函数,设置总条数
这是一个案例,Page对象继承了Pagination 对象,这里直接操作实例化的Page对象即可;将自定义查询出来的总条数赋值给Page对象的Total即可;
public Page<User> list(Map<String,String> map){
Page<User> query=new Page<User>(map);
query.setSearchCount(false);
List<User> users= baseMapper.list(query,map);
query.setRecords(users);
query.setTotal(baseMapper.count(map));
return query;
}
只是自己做个记录!!!
后面的控制层调用我就不写了。
这样再去执行查询的时候就不用因为总条数的查询慢而烦恼了!