selectprovider 分页_mybatis分页的一种解决方案

本文介绍了使用MyBatis的@SelectProvider注解实现分页查询的一种解决方案。首先定义了分页查询的输入输出类PageRequest和Page,接着设计了分页查询的接口PageService和PageMapper。然后通过PageSqlProvider提供默认的分页SQL实现,最后在UserService中集成并使用PageServiceAdapter获取默认分页实现。文章强调了抽象和接口在设计中的重要性,以提高代码的扩展性和降低耦合度。
摘要由CSDN通过智能技术生成

要想写好一个功能,哪怕这个功能很简单,也要考虑到扩展性。

最好的学习路线是从具体到抽象,而最好的设计思路是从抽象到具体。

一、抽象输入输出

对于一个功能,使用者只需要关心输入和输出即可。

分页查询

输入:

页码和每页的记录条数(必需)

排序规则(非必需)

查询条件(非必需)

输出:

记录集合

记录总条数

总页数

由此可设计出两个类,分别对应分页操作的输入和输出

PageReqeust:

/**

* Created by liuruijie on 2017/4/6.

* 分页查询的相关参数封装

*/

public class PageRequest {

private int size; //查询记录的数量

private Sort[] sorts; //排序

private int start; //开始位置

//page为页码

public PageRequest(int page, int size, Sort... sorts) {

this.size = size;

this.sorts = sorts;

this.start = (page-1)*size;

}

public static class Sort {

private String type;

private String field;

public Sort(String field) {

this.field = field;

type = "ASC";

}

public Sort(String field, String type) {

this.field = field;

this.type = type;

}

···

}

//省略set和get方法

···

}

该类封装了分页查询的页码和页面大小,还有排序规则。对于查询条件,由于其需要由具体的实体和具体的业务才能确定,所以不方便在这里封装。

Page:

/**

* Created by liuruijie on 2017/4/6.

* 分页查询的返回值

*/

public class Page {

private long totalRows; //总记录数

private int totalPages; //总页数

private List rows; //查询到的记录

//省略set和get方法

···

}

该类封装了分页查询需要的结果。

到现在,分页的输入和输出都定义好了,需要进行过程的实现。

二、定义接口规范

同样的,先抽象分页操作

/**

* Created by liuruijie on 2017/4/17.

* 提供基础的分页接口

*/

public interface

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值