Java使用MyBatis框架分页的5种方式
Java使用MyBatis框架分页的5种方式 在Java开发中,MyBatis框架是常用的持久层框架之一,分页是其中一个非常重要的功能。今天,我们将介绍Java使用MyBatis框架分页的5种方式,供大家参考。 一、原始切分 原始切分是最基本的分页方法,不建议使用这种方法,因为这种方法需要加载所有数据,然后再进行切片,效率非常低下。 mapper代码: ```java <select id="selectAll" resultMap="BaseResult"> select * from tb_user </select> ``` 业务层代码: ```java public List<User> findByAll(PageInfo info) { List<User> users = userMapper.selectAll(); return users.subList(info.getPageNo(), info.getPageSize()); } ``` 控制层代码: ```java @RequestMapping(value = "/userlist_1", method = RequestMethod.GET) @ResponseBody public Result findUserBySubList(PageInfo info) { List<User> users = userService.findByAll(info); if(users.size() == 0) { return ResultGenerator.genFailResult("未查找到用户"); } return ResultGenerator.genSuccessResult(users); } ``` 二、LIMIT关键字 使用LIMIT关键字可以实现分页,效率比原始切分高很多。 mapper代码: ```java <select id="selectByPageInfo" resultMap="BaseResult"> select * from tb_user limit #{pageNo}, #{pageSize} </select> ``` 业务层代码: ```java public List<User> findByPageInfo(PageInfo info) { return userMapper.selectByPageInfo(info); } ``` 控制层代码: ```java @RequestMapping(value = "/userlist_2", method = RequestMethod.GET) @ResponseBody public Result findUserByLimit(PageInfo info) { List<User> users = userService.findByPageInfo(info); if(users.size() == 0) { return ResultGenerator.genFailResult("未查找到用户"); } return ResultGenerator.genSuccessResult(users); } ``` 三、RowBounds实现分页 RowBounds是MyBatis提供的一种分页机制,可以实现高效的分页。 DAO层代码: ```java public interface UserMapper { List<User> selectByPageInfo(PageInfo info); List<User> selectByRowBounds(PageInfo info); } ``` mapper代码: ```java <select id="selectByRowBounds" resultMap="BaseResult"> select * from tb_user </select> ``` 业务层代码: ```java public List<User> findByRowBounds(PageInfo info) { RowBounds rowBounds = new RowBounds(info.getPageNo(), info.getPageSize()); return userMapper.selectByRowBounds(rowBounds); } ``` 控制层代码: ```java @RequestMapping(value = "/userlist_3", method = RequestMethod.GET) @ResponseBody public Result findUserByRowBounds(PageInfo info) { List<User> users = userService.findByRowBounds(info); if(users.size() == 0) { return ResultGenerator.genFailResult("未查找到用户"); } return ResultGenerator.genSuccessResult(users); } ``` 四、Interceptor实现分页 Interceptor是MyBatis提供的一种拦截机制,可以实现高效的分页。 DAO层代码: ```java public interface UserMapper { List<User> selectByInterceptor(PageInfo info); } ``` mapper代码: ```java <select id="selectByInterceptor" resultMap="BaseResult"> select * from tb_user </select> ``` 业务层代码: ```java public List<User> findByInterceptor(PageInfo info) { return userMapper.selectByInterceptor(info); } ``` 控制层代码: ```java @RequestMapping(value = "/userlist_4", method = RequestMethod.GET) @ResponseBody public Result findUserByInterceptor(PageInfo info) { List<User> users = userService.findByInterceptor(info); if(users.size() == 0) { return ResultGenerator.genFailResult("未查找到用户"); } return ResultGenerator.genSuccessResult(users); } ``` 五、PageHelper实现分页 PageHelper是MyBatis提供的一种分页插件,可以实现高效的分页。 DAO层代码: ```java public interface UserMapper { List<User> selectAll(); } ``` mapper代码: ```java <select id="selectAll" resultMap="BaseResult"> select * from tb_user </select> ``` 业务层代码: ```java public List<User> findByPageHelper(PageInfo info) { PageHelper.startPage(info.getPageNo(), info.getPageSize()); return userMapper.selectAll(); } ``` 控制层代码: ```java @RequestMapping(value = "/userlist_5", method = RequestMethod.GET) @ResponseBody public Result findUserByPageHelper(PageInfo info) { List<User> users = userService.findByPageHelper(info); if(users.size() == 0) { return ResultGenerator.genFailResult("未查找到用户"); } return ResultGenerator.genSuccessResult(users); } ``` Java使用MyBatis框架分页的5种方式各有其优缺,根据实际情况选择合适的分页方式。