Appearance
通过MyBatis-Plus来简洁的实现分页查询。 实现方式有两种:
- 原生分页查询
- 自定义分页查询
具体实现分页插件 首先需要创建配置类来配置分页插件,如下:
@ConfigurationpublicclassMybatisPlusConfig{ @BeanpublicPaginationInterceptor paginationInterceptor(){ PaginationInterceptorpaginationInterceptor=newPaginationInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false// paginationInterceptor.setOverflow(false);// 设置最大单页限制数量,默认 500 条,-1 不受限制// paginationInterceptor.setLimit(500);// 开启 count 的 join 优化,只针对部分
left joinpaginationInterceptor.setCountSqlParser(newJsqlParserCountOptimize(true)); returnpaginationInterceptor; }} ==原生分页查询== 若使用MyBatis-Plus原生的分页查询方式,则不需要其它实现(在上一篇的基础上),直接可以使用。如下:
@RestController@RequestMapping("/user")public class UserController extends BaseController { @Autowiredprivate UserService userService; @GetMapping("/page") public ApiResult selectUserPage(@RequestParamString nickname, @RequestParamlong pageNum, @RequestParamlong pageSize) { QueryWrapper<User> wrapper= newQueryWrapper<>(); wrapper.like("nickname", nickname); Page<User> page= newPage<>(pageNum, pageSize); IPage<User> userPage= userService.page(page, wrapper); returnApiResult.success(new QueryResult<>(userPage)); }}
Page用于指定分页条件Wrapper条件构造器,用于指定查询条件条件函数有很多,具体可以查看官网:mp.baomidou.com/guide/wrapp…
上面代码有用到QueryResult类,如下:
@Getter@Setter@NoArgsConstructor@AllArgsConstructorpublic class QueryResult<T> { /** * 总条数
 */privateLongtotal; /** * 返回结果集
 */privateList<T> items; publicQueryResult(IPage<T> page) { this.total= page.getTotal(); this.items= page.getRecords(); }} ==复制代码== 简单的分页查询使用上面的方式即可,不需要编写SQL。 但分页查询难免可能出先多表连接查询,或者是一些复杂的sql语句,这时候原生分页查询就不支持,需要自定义。 自定义分页查询 自定义即自己实现SQL语句。因为有了分页插件,自定义的SQL语句也不需要编写分页相关的SQL。如下:
<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"\>\<mappernamespace="com.zhuqc.framework.dao.UserDao"\>\<selectid="selectUserPage"resultType="com.zhuqc.framework.entity.User">SELECT * FROM sys_user ${ew.customSqlSegment} </select></mapper> ==复制代码== 如果需要自定义SQL,又想使用Wrapper条件构造器,就需要在SQL添加${ew.customSqlSegment}。并且在Mapper接口中添加参数。如下:
@Mapperpublic interface UserDao extends BaseMapper<User> { IPage<User> selectUserPage(IPage<User> page, @Param(Constants.WRAPPER) Wrapper<User> queryWrapper);} ==复制代码==
@Service@Transactionalpublic classUserServiceImplextendsServiceImpl<UserDao, User>implementsUserService{ @AutowiredprivateUserDaouserDao; @Overridepublic IPage<User> selectUserPage(IPage<User> page, Wrapper<User> queryWrapper) { returnuserDao.selectUserPage(page, queryWrapper); }} ==复制代码== 在配置文件中,指定Mapper文件的位置:
mybatis-plus:mapper-locations:classpath*:/sql-mappers/**/*.xml configuration:map-underscore-to-camel-case:true ==复制代码== 编写完成后,就可以在控制层使用:
@RestController@RequestMapping("/user")public class UserController extends BaseController { @Autowiredprivate UserService userService; @GetMapping("/page2") public ApiResult selectUserPage2(@RequestParamString nickname, @RequestParamlong pageNum, @RequestParamlong pageSize) { QueryWrapper<User> wrapper= newQueryWrapper<>(); wrapper.like("nickname", nickname); Page<User> page= newPage<>(pageNum, pageSize); IPage<User> userPage= userService.selectUserPage(page, wrapper); returnApiResult.success(new QueryResult<>(userPage)); }} ==复制代码== 总结 在不使用分页插件的情况下,若想使用分页查询,需要先查询总数,再查询当前页的数据,这样就需要编写两条SQL。 而现在使用了分页插件,简单的分页查询不需要编写SQL,直接使用。复杂的查询也只需要编写查询当前页数据的SQL,查询总数的SQL分页插件会自动生成。 通过使用MyBatis-Plus实现分页查询,可以感觉到极大的简化了开发。 以上,感谢阅读,如果感觉有帮助的话,不妨随手点个赞! > 来自
<https://juejin.cn/post/6844904184173559822\>
