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;<br> Integer pageSize = page_size; // 每页显示的条数<br> List<UserRoleListVO> userList = userService.findUserNamesByResourceId(companyOrProjectId, isCompany,nameOrphone,roleId);<br> int totalSize = userList.size(); // 总条数<br> int totalPage = (totalSize + pageSize - 1) / pageSize; // 总页数<br> int startIndex = (pageNum - 1) * pageSize; // 起始索引位置<br><br> List<UserRoleListVO> pageList = new ArrayList<>();<br> if (startIndex < totalSize) {<br> int endIndex = Math.min(startIndex + pageSize, totalSize);<br> pageList = userList.subList(startIndex, endIndex);<br> }<br> return R.ok(pageList, totalSize);<br>代码帖出来了,粘贴可用。
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |