Mybatis分页方式 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Mybatis分页方式

Mybatis分页方式

更新时间: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分页方式",希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>