Mybatis-plus如何实现多条件筛选分页
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍Mybatis-plus如何实现多条件筛选分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 数据库映射对象与视图对象在开发过程中在面向客户端展示时都是使用
千家信息网最后更新 2026年11月01日Mybatis-plus如何实现多条件筛选分页
这篇文章主要介绍Mybatis-plus如何实现多条件筛选分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1. 数据库映射对象与视图对象
在开发过程中在面向客户端展示时都是使用二次封装的视图对象(VO)来进行内容展示.
package com.fod.fodapi.vo;import lombok.Data;/** * 用户视图对象 * @author 86137 * @date 2021-09-26 15:03 */@Datapublic class UrmUserInfoVO { /** * 用户主键 */ private Integer id; /** * 用户账号 */ private String userNumber; /** * 用户名称 */ private String userName; /** * 用户头像 */ private String userImage; /** * 用户性别 */ private Integer userSex; /** * 联系方式 */ private String userPhone; /** * 状态 */ private Integer status; /* * 用户角色 * */ private String userRole;}2. 测试SQL
测试sql是在数据库客户端进行数据测试时进行编写,确保在编写代码时不会出现sql查询错误
SELECT users.id, users.user_number, users.user_name, users.user_image, users.user_sex,users.user_phone, users.native_place, users.status, roles.role_nameFROM urm_user_info AS users JOIN urm_user_online AS onlines ON users.id = onlines.user_info JOIN urm_user_role_relevance AS userAndRole ON users.id = userAndRole.user_id LEFT JOIN urm_role_info AS roles ON userAndRole.role_id = roles.id WHERE users.STATUS = 1 AND users.deleted = 0 AND onlines.online_status = 1ORDER BY users.add_time
测试结果:
3. MVC层分解
3.1 查询参数封装
查询过程中部分参数是需要重复使用比如:当前页,当前页的数量,筛选条件等等。同时也可以解决查询参数过多导致接口层接收数据的代码过多。
公共使用的字段封装:(类名:PublicSelect)
private Integer page = 1; //第几页 private Integer limit = 10; // 每页多少条数据 private String sort = "add_time"; // 排序字段 private Boolean order = true; // 排序方式(true:asc,false:desc)
特定功能查询字段封装:(类名:UrmUserInfoSelect )
在使用公共字段的时候继承一下即可
/** * 用户查询条件 */@Datapublic class UrmUserInfoSelect extends PublicSelect{ /**用户账号*/ private String userNumber; /**用户名称*/ private String userName; /**用户性别*/ private Integer userSex; /**联系方式*/ private String userPhone; /** 状态*/ private Integer status; /**新增时间*/ private Date addTime;}3.2 Controller层代码
笔者在controller层只用做数据接收,数据的基本过滤验证,以及返回操作,业务全部在接口实现层里面(serverImpl)
@ApiOperation(value = "人员在线列表")@GetMapping("/list")@ResponseBodypublic Object listSelective(@RequestBody UrmUserInfoSelect select){ return rdmPersonOnlineService.listSelective(select);}3.3 Service接口层
public interface RdmPersonOnlineService { Object listSelective(UrmUserInfoSelect select);}3.4 ServiceImpl接口实现层
在这个类里面将编写所有与业务有关的内容
@Overridepublic Object listSelective(UrmUserInfoSelect select) { // QueryWrapper用于构建sql的过滤数据条件内容,详细看Mybatis-Plus官方文档即可 QueryWrapper voQueryWrapper = new QueryWrapper<>(); voQueryWrapper.eq("users.status",STATUS_START); voQueryWrapper.eq("users.deleted",DELETED_NO); voQueryWrapper.eq("onlines.online_status",USER_ONLINE); voQueryWrapper.orderBy(true, select.getOrder(), select.getSort()); // 构建分页条件,通过Page自动进行分页操作 Page voPage = new Page<>(select.getPage(),select.getLimit()); // setRecords是Page类里面的一个放置查询结果的参数 voPage.setRecords( urmUserInfoMapper.selectiveUserInfoByOnlineStatus(voPage,voQueryWrapper)); return ResponseUtil.ok(voPage);} 3.5 Mapper数据持久层
在mypper层编写sql时:在方法里面的条件参数中必须加上**@Param(Constants.WRAPPER),在Sql末尾必须加上${ew.customSqlSegment}**否在定义的条件无效。由于筛选条件(查询条件)在条件参数中已经配置完成,在mapper的sql里面就不需要再次写入。
@Mapper@Repositorypublic interface UrmUserInfoMapper extends BaseMapper{ // 出现的+为回车换行 @Select("SELECT " + "users.id, users.user_number, users.user_name, users.user_image, users.user_sex, users.user_phone, users.native_place, users.status, roles.role_name " + "FROM " + "urm_user_info AS users " + "JOIN urm_user_online AS onlines ON users.id = onlines.user_info " + "JOIN urm_user_role_relevance AS userAndRole ON users.id = userAndRole.user_id " + "LEFT JOIN urm_role_info AS roles ON userAndRole.role_id = roles.id ${ew.customSqlSegment}") List selectiveUserInfoByOnlineStatus(Page voPage, @Param(Constants.WRAPPER)QueryWrapper voQueryWrapper);}
4. 结果
筛选条件
{ "page":1, "limit":5, "sort": null, "order":true, "userNumber":null, "userName":null, "userSex": null, "userPhone": null, "status": null, "addTime":null}筛选结果:
{ "errno": 0, "data": { "records": [ { "id": 1, "userNumber": "admin", "userName": "admin", "userImage": null, "userSex": 1, "userPhone": "1234567890123", "status": 1, "userRole": null, "userOrganize": null }, { "id": 2, "userNumber": "123456", "userName": "张三", "userImage": null, "userSex": 0, "userPhone": "1234567890123", "status": 1, "userRole": null, "userOrganize": null }, { "id": 3, "userNumber": "123456789", "userName": "李四", "userImage": null, "userSex": 1, "userPhone": "1234567890123", "status": 1, "userRole": null, "userOrganize": null }, { "id": 4, "userNumber": "123123", "userName": "王五", "userImage": null, "userSex": 1, "userPhone": "1234567890123", "status": 1, "userRole": null, "userOrganize": null }, { "id": 5, "userNumber": "12121212", "userName": "马六", "userImage": null, "userSex": 1, "userPhone": "1234567890123", "status": 1, "userRole": null, "userOrganize": null } ], "total": 6, "size": 5, "current": 1, "orders": [], "optimizeCountSql": true, "hitCount": false, "countId": null, "maxLimit": null, "searchCount": true, "pages": 2 }, "errmsg": "成功"}图示:
5 补充
5.1 分页失效问题
分页时出现查询出来的都是所有数据,并不会进行分页。原因是mybatis-plus配置出现问题。
不同版本可能会出现配置差异(笔者使用的是3.4.1)
@Configuration(proxyBeanMethods = false)public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(paginationInterceptor()); return interceptor; } /** * 分页插件 */ public PaginationInnerInterceptor paginationInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); // 设置数据库类型为mysql paginationInnerInterceptor.setDbType(DbType.MYSQL); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false paginationInnerInterceptor.setOverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 paginationInnerInterceptor.setMaxLimit(-1L); return paginationInnerInterceptor; }}以上是"Mybatis-plus如何实现多条件筛选分页"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
条件
数据
用户
查询
参数
内容
字段
对象
接口
结果
封装
测试
代码
数据库
方式
视图
配置
最大
业务
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技产业
苏州找大状互联网科技有限公司
互联网科技工作委员会副主任毛军
互联网品科技
科技类互联网
南京欣网互联网科技
汇久创客互联网科技
上海亿帐通互联网科技
国外互联网科技网站
互联网科技生活的内容
互联网公司会议桌创意科技软装饰
随着互联网科技发展
央行互联网金融科技公司
团飞科技与伯堂互联网服务平台
西安小鹰速贷互联网科技有限公司
半导体行业属于互联网高科技类吗
易企秀互联网科技是做什么的
福建互联网展示科技馆设计
恒生互联网科技趋势
互联网大会出现的黑科技
苏州找大状互联网科技有限公司
河南真二互联网科技有限公司
互联网科技公司名称
互联网科技大会案例
华夏恒生科技与互联网科技
保险科技服务互联网营销体系
梅州GM互联网络科技有限公司
数字科技和互联网金融哪个好
华人运通互联网科技公司
六子台科技互联网展会