Mybatis的几种分页方式(数组分页、limit分页)

一、数组分页

原理:进行数据库查询操作时,获取到数据库中满足条件的记录,保存在对应的List集合中,通过List.subList方法,截取到满足条件的所有记录。

实现:

首先是dao层,创建UserMapper接口,用于对数据库的操作。在接口中定义查询数据的方法,如下:

List queryUsers();

创建UserMapper.xml,编写查询的SQL语句,如下:

创建UserService接口,定义实现分页的方法

List queryUsers(Integer page,Integer limit);

接下来编写UserServiceImpl实现类,编写具体的分页实现操作:

public List 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 queryUsers = userService.queryUsers(page, limit);
	int countAll = userService.countAll();
	if (queryUsers.size() > 0) {
		return ApiResponse.ofSuccess(queryUsers, countAll);
	}
	return ApiResponse.ofMessage(500, "无数据");
}

测试结果:

Mybatis的几种分页方式(数组分页、limit分页)_第1张图片

缺点:当查询数据量大的时候,每次查询对数据库和程序的性能都会产生极大的影响,适合操作数据量小的情况下使用

二、limit分页

首先还是在UserMapper添加分页查询的方法:

List queryByLimit(@Param("offset") Integer offset, @Param("limit") Integer limit);

在UserMapper.xml添加具体的操作方法:

接着编写service层,编写UserService接口以及实现类UserServiceImpl对分页方法的操作:

List selectByLimit(Integer page, Integer limit);
public List 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 queryUsers = userService.queryByLimit(page, limit);
	int countAll = userService.countAll();
	if (queryByLimit.size() > 0) {
		return ApiResponse.ofSuccess(queryByLimit, countAll);
	}
	return ApiResponse.ofMessage(500, "无数据");
}

测试结果:

Mybatis的几种分页方式(数组分页、limit分页)_第2张图片

从输出结果可以看出与数据分页的查询结果是一直的,所以limit分页是没问题的。

缺点:虽然这里实现了按需查找,每次检索得到指定的数据,但是每次在分页时都要去编写limit语句,很冗余。而且不方便统一管理,维护性比较差。

你可能感兴趣的:(数据库,Java基础,Mybatis,分页)