更新时间:2021-06-21 12:29:04 来源:极悦 浏览760次
1.数组分页
原理:进行数据库查询操作时,获取到数据库中满足条件的记录,保存在对应的List集合中,通过List.subList方法,截取到满足条件的所有记录。
实现:
首先是dao层,创建UserMapper接口,用于对数据库的操作。在接口中定义查询数据的方法,如下:
List<User> queryUsers();
创建UserMapper.xml,编写查询的SQL语句,如下:
<select id="queryUsers" resultMap="BaseResultMap">
SELECT id, nickname, name, pwd, e_mail, is_enable, last_modify_date
FROM user
</select>
创建UserService接口,定义实现分页的方法
List<User> queryUsers(Integer page,Integer limit);
接下来编写UserServiceImpl实现类,编写具体的分页实现操作:
public List<User> queryUsers(Integer page, Integer limit) {
//从第几条数据开始
int fromIndex = (page-1)*limit;
//到第几条数据结束
int toIndex = page*limit;
//使用subList方法截取满足条件的数据
return userMapper.queryUsers().subList(fromIndex, toIndex);
}
最后在controller编写测试代码,这里我前端使用的事LayUI框架,所以对返回数据进行了封装,如下所示:
@GetMapping(value = "queryUsers",produces = "application/json; charset=UTF-8")
@ResponseBody
public ApiResponse queryUsers(Integer page, Integer limit) {
List<User> queryUsers = userService.queryUsers(page, limit);
int countAll = userService.countAll();
if (queryUsers.size() > 0) {
return ApiResponse.ofSuccess(queryUsers, countAll);
}
return ApiResponse.ofMessage(500, "无数据");
}
测试结果:
缺点:当查询数据量大的时候,每次查询对数据库和程序的性能都会产生极大的影响,适合操作数据量小的情况下使用
2.limit分页
首先还是在UserMapper添加分页查询的方法:
List<User> queryByLimit(@Param("offset") Integer offset, @Param("limit") Integer limit);
在UserMapper.xml添加具体的操作方法:
<select id="queryByLimit" resultMap="BaseResultMap">
SELECT id, nickname, name, pwd, e_mail, is_enable, last_modify_date
FROM user limit #{offset},#{limit}
</select>
接着编写service层,编写UserService接口以及实现类UserServiceImpl对分页方法的操作:
List<User> selectByLimit(Integer page, Integer limit);
public List<User> selectByLimit(Integer page, Integer limit) {
int offset = (page - 1) * limit;
return userMapper.queryByLimit(offset, limit);
}
最后controller编写测试方法:
@GetMapping(value = "queryByLimit",produces = "application/json; charset=UTF-8")
@ResponseBody
public ApiResponse queryByLimit(Integer page, Integer limit) {
List<User> queryUsers = userService.queryByLimit(page, limit);
int countAll = userService.countAll();
if (queryByLimit.size() > 0) {
return ApiResponse.ofSuccess(queryByLimit, countAll);
}
return ApiResponse.ofMessage(500, "无数据");
}
测试结果:
从输出结果可以看出与数据分页的查询结果是一直的,所以limit分页是没问题的。
缺点:虽然这里实现了按需查找,每次检索得到指定的数据,但是每次在分页时都要去编写limit语句,很冗余。而且不方便统一管理,维护性比较差。
以上就是极悦小编介绍的"Mybatis分页方式",希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习