当前位置:   article > 正文

列表查询优化,使用异步count和list提高执行效率_mybaitisplus count 和 list 哪个执行效率快

mybaitisplus count 和 list 哪个执行效率快
  1. 列表参数需继承 common 模块下的 pojo.ListQueryParam 创建参数实体,类名格式为 “模块列表 + QueryParam”,其属性除包含正常参数以外,还需以筛选条件为参考添加 xxxJoinFlag 标识,作为是否进行表连接标识,此标识在count语句时可以完全依赖,在信息查询语句时需考虑字段返回问题;
@Data
public class ListQueryParam {
    /**
     * 页码
     */
    private int pageNo = 1;
    /**
     * 数据条数
     */
    private int pageSize = 10;
    /**
     * 分页信息
     */
    private PageInfo pageInfo;
    /**
     * 数据权限信息
     */
    private DataAuthority dataAuthority;

    public void initListQueryParam(CurrentUser currentUser) {
        this.pageInfo = new PageInfo(this.pageNo, this.pageSize);
        this.dataAuthority = new DataAuthority(currentUser);
    }

    public void setListTotal(int total) {
        this.pageInfo.setTotal(total);
    }

    public void setListData(Object data) {
        this.pageInfo.setList(data);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
	
	/**
     * 示例
     * biz_customer 表join标识
     */
    private boolean bizCustomerJoinFlag;
	
    public void setCustomerName(String customerName) {
        this.customerName = customerName;
        if (Toolkit.isValid(customerName)) {
            this.bizCustomerJoinFlag = true;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. 在 Controller 层进行参数校验、赋值(如调用 initListQueryParam 方法通过 currentUser 设置 dataAuthority)、查询结果的返回;
  2. 通过 common 模块下的 pagination.AbstractPagination 同时进行数据总条数查询及列表数据的获取及组装,在 getDataList 方法中查询完列表数据后进行一些数据的处理;
@Override
    public PageInfo getPreLoanList(PreLoanQueryParam queryParam) {
        PageInfo pageInfo = queryParam.getPageInfo();
        AbstractPagination<PreLoanInfo, PreLoanQueryParam> preLoanPagination = new AbstractPagination<PreLoanInfo, PreLoanQueryParam>() {
            @Override
            public int countDataTotal(PreLoanQueryParam param) {
                // 查询数据总条数
                return preLoanMapper.countPreLoanList(param, param.getDataAuthority());
            }

            @Override
            public List<PreLoanInfo> getDataList(PreLoanQueryParam param) {
                // 查询列表数据
                List<PreLoanInfo> preLoanList = preLoanMapper.getPreLoanList(param, param.getDataAuthority());
                // xxx列表数据处理
                return preLoanList;
            }
        };
        preLoanPagination.execute(pageInfo, queryParam);
        return pageInfo;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
/**
 * 分页查询抽象类
 */
@Slf4j
public abstract class AbstractPagination<T, V> {

    /**
     * 统计数据总数
     *
     * @param v 查询参数
     * @return
     */
    public abstract int countDataTotal(V v);

    /**
     * 获取数据列表
     *
     * @param v 查询参数
     * @return
     */
    public abstract List<T> getDataList(V v);

    /**
     * 执行
     *
     * @param p 分页数据
     * @param v 查询参数
     */
    public void execute(PageInfo p, V v) {
        CompletableFuture<PageInfo> totalFuture = CompletableFuture.supplyAsync(() -> {
            p.setTotal(this.countDataTotal(v));
            return p;
        });
        CompletableFuture<PageInfo> listFuture = CompletableFuture.supplyAsync(() -> {
            p.setList(this.getDataList(v));
            return p;
        });
        CompletableFuture.allOf(totalFuture, listFuture).join();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  1. 针对列表数据的处理一般包括字典值赋值、创建人、流程状态等,此处遵循的原则是批量获取、一次遍历、多属性赋值,此处可使用查询参数 和 QueryParam 中表JoinFlag 过滤一些特殊情况下才需要的赋值;
  2. mybatis.xml 中应合理使用动态SQL,将筛选语句创建为SQL片段,保证在版本迭代过程中出现 count 语句和 getDataList 语句筛选条件不一致情况,合理使用 QueryParam 中的 joinFlag 标识减少不必要的表连接;
  3. SQL语句可以通过 EXPLAIN 命令进行SQL优化、索引添加;
  4. 字典、用户、机构、项目等可从缓存中获取,通用遵循上方数据处理的原则,如是老接口改造,此类信息未放置缓存则需循序渐进先按照上步骤进行调整,接口稳定后可再进行优化;
  5. 深分页、数据权限待补充;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/230481
推荐阅读
相关标签
  

闽ICP备14008679号