Spring Boot使用MyBatis分页插件实现详解
在Spring Boot项目中,使用MyBatis作为ORM框架,实现数据的查询、插入、删除、更新等操作。对于一些大数据量的查询场景,需要使用分页查询来避免一次性查询过多数据导致内存溢出的问题。这时,可以使用MyBatis的分页插件来解决这个问题。
1. 添加Maven依赖
在项目的pom.xml
文件中,添加MyBatis分页插件的Maven依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
</dependency>
其中,com.github.pagehelper
是分页插件的GroupId,pagehelper
是ArtifactId,5.3.1
是版本号。
2. 配置MyBatis分页插件
在项目的配置文件(application.properties
或application.yml
)中,添加以下配置:
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
其中,helperDialect
指定数据库方言,这里指定为MySQL;reasonable
表示分页合理化参数,true时表示如果页面传入的页码<1,则自动设置为1,如果传入的页码>总页数,则自动设置为总页数;supportMethodsArguments
表示支持分页参数绑定,true时表示支持使用方法参数绑定,false时使用Map绑定;params
表示传递给插件的参数,count=countSql表示在查询数据之前会执行一个count查询,来获取总记录数。
3. 在Mapper接口中定义分页查询方法
在Mapper接口中,定义分页查询方法。假设我们要查询用户信息,每页显示10条记录。代码如下所示:
public interface UserMapper {
/**
* 分页查询用户信息
* @param pageNum 当前页码
* @param pageSize 每页显示的记录数
* @return 查询结果
*/
List<User> selectByPage(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
}
其中,pageNum
表示当前页码,pageSize
表示每页显示的记录数。
4. 使用分页插件进行分页查询
在Service层中,使用分页插件进行分页查询。示例代码如下:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public PageInfo<User> getUserList(int pageNum, int pageSize) {
// 实现分页查询
PageHelper.startPage(pageNum, pageSize);
// 调用Mapper接口中的方法,查询用户信息
List<User> userList = userMapper.selectByPage(pageNum, pageSize);
// 封装分页信息
PageInfo<User> pageInfo = new PageInfo<>(userList);
return pageInfo;
}
}
其中,PageHelper.startPage(pageNum, pageSize)
表示开启分页查询,pageNum表示当前页码,pageSize表示每页显示的记录数;userMapper.selectByPage(pageNum, pageSize)
表示调用Mapper接口中定义的分页查询方法,查询用户信息。最后,将查询结果封装为PageInfo
对象返回给Controller层即可。
5. 示例1:查询用户信息
假设我们要查询用户信息,每页显示10条记录。Controller层的示例代码如下所示:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public PageInfo<User> getUserList(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return userService.getUserList(pageNum, pageSize);
}
}
其中,@RequestParam(defaultValue = "1")
表示查询的当前页码,默认值为1;@RequestParam(defaultValue = "10")
表示每页显示的记录数,默认值为10。userService.getUserList(pageNum, pageSize)
表示调用Service层的方法,查询用户信息并返回分页信息。
6. 示例2:查询订单信息
假设我们要查询订单信息,每页显示20条记录。Controller层的示例代码如下所示:
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping
public PageInfo<Order> getOrderList(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "20") int pageSize) {
return orderService.getOrderList(pageNum, pageSize);
}
}
其中,@RequestParam(defaultValue = "1")
表示查询的当前页码,默认值为1;@RequestParam(defaultValue = "20")
表示每页显示的记录数,默认值为20。orderService.getOrderList(pageNum, pageSize)
表示调用Service层的方法,查询订单信息并返回分页信息。
至此,我们完成了使用MyBatis分页插件进行分页查询的完整攻略,并包含了两个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 使用Mybatis分页插件实现详解 - Python技术站