java中各种常用分页插件:
MyBatis分页插件:MyBatis提供了一种分页插件,可以通过配置实现分页查询。使用MyBatis分页插件需要在配置文件中添加插件配置。
PageHelper:PageHelper是一个开源的MyBatis分页插件,可以通过简单的配置实现分页查询。它支持MySQL、Oracle、PostgreSQL、SQL Server等数据库。
JPA分页插件:JPA提供了一种分页插件,可以通过配置实现分页查询。使用JPA分页插件需要在配置文件中添加插件配置。
这些分页的核心原理都是大相径庭,
举例sql为:select name from students。如果是mysql分页就是select name from students limit 0,10java中的分页插件操作技巧是 select * from (java类中创建的SQL语句) limit x,y;其中的x和y就是前端传给后端的pageNum和pageSize,只是插件jar包把其中的复杂性都封装了,但是原理都是这样的。这样的分页是针对简单的sql且都写在一个sql中。
这样进行分页,但是在常用的代码中有一个小坑,如下这样的分页是不生效的:
Controller层:
impl层:
上面的每个userMapper都对应一个xml中的sql,这样是不行的,因为这样操作就成了 select * from (select * from user a select * from user b) limit 0,10
这样有了两个并行的sql,是无法limit,所以会失败,
如果要生效,如果上面getUserRoleListByDeptId的方法是下面这样的
那就可以分页成功。
或者进行手动分页,对所有的都生效:
Integer pageNum = page;
Integer pageSize = page_size; // 每页显示的条数
List userList = userService.findUserNamesByResourceId(companyOrProjectId, isCompany,nameOrphone,roleId);
int totalSize = userList.size(); // 总条数
int totalPage = (totalSize + pageSize - 1) / pageSize; // 总页数
int startIndex = (pageNum - 1) * pageSize; // 起始索引位置
List pageList = new ArrayList();
if (startIndex < totalSize) {
int endIndex = Math.min(startIndex + pageSize, totalSize);
pageList = userList.subList(startIndex, endIndex);
}
return R.ok(pageList, totalSize);
代码帖出来了,粘贴可用。