Mybatis-plus动态条件查询QueryWrapper的使用

Mybatis-plus动态条件查询QueryWrapper的使用

一:queryWrapper介绍

queryWrapper是mybatis plus中实现查询的对象封装操作类,可以封装sql对象,包括where条件,order by排序,select哪些字段等等,他的层级关系如下图:

复制代码
Wrapper:条件构造抽象类,最顶端父类;
AbstractWrapper:用于查询条件封装,生成sql的where条件;
AbstractLambdaWrapper:Lambda语法使用Wrapper统一处理解析lambda获取column。
LambdaQueryWrapper:用于lambda语法使用的查询Wrapper;
LambdaUpdateWrapper:Lambda更新封装Wrapper;
QueryWrapper:Entity对象封装操作类,不是用lambda;
UpdateWrapper:Update条件封装,用于Entity对象更新操作。

二:queryWrapper示例

2.1-案例一:根据name模糊查看未删除的用户列表信息

过滤条件:

复制代码
name 用户名称 ,模糊查看
del_flag = 0
按照create_time创建时间降序
sql实现:

select * from t_user
where del_flag = 0
<if test ="name!=null and ''!=name">
    and name like concat('%',#{name},'%')
</if>
order by create_time desc

queryWrapper实现:

复制代码
/**
 * 案例一:根据name模糊查看未删除的用户列表信息
 * @param name
 * @return
 */
@RequestMapping("/list")
public Map<String,Object> getList(@RequestParam String name){
    Map<String,Object> result = new HashMap<>();

	//构建一个查询的wrapper
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    //name不为空时,组装模糊查询条件
    wrapper.like(StringUtils.isNotBlank(name),"name",name);
    //未删除
    wrapper.eq("del_flag",0);
    //创建时间降序
    wrapper.orderByDesc("create_time");

    List<User> list = userMapper.selectList(wrapper);
    result.put("data",list);
    return result;
}

2.2-案例二:查看姓李的并且邮箱不为空的用户列表

sql实现:

bash 复制代码
select * from t_user
where del_flag = 0
and name like concat('李','%')
and email is not null
order by create_time desc

queryWrapper实现:

复制代码
/**
 * 案例二:查看姓张的并且邮箱不为空的用户列表
 * @return
 */
@RequestMapping("/list2")
public Map<String,Object> getList2(){
    Map<String,Object> result = new HashMap<>();

    //构建一个查询的wrapper
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    //姓张的
    wrapper.likeRight("name","张");
    //邮箱不为空
    wrapper.isNotNull("email");
    //未删除
    wrapper.eq("del_flag",0);
    //创建时间降序
    wrapper.orderByDesc("create_time");

    List<User> list = userMapper.selectList(wrapper);
    result.put("data",list);
    return result;
}

2.3-案例三:年龄范围查询(20-30之间的)

sql实现:

bash 复制代码
select * from t_user
where del_flag=0
and age between 20 and 30
order by create_time desc

queryWrapper实现:

复制代码
/**
 * 案例三:年龄范围查询(20-30之间的)
 * @return
 */
@RequestMapping("/list3")
public Map<String,Object> getList3(){
    Map<String,Object> result = new HashMap<>();

    //构建一个查询的wrapper
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    //年龄20-30之间的
    wrapper.between("age",20,30);
    //未删除
    wrapper.eq("del_flag",0);
    //创建时间降序
    wrapper.orderByDesc("create_time");

    List<User> list = userMapper.selectList(wrapper);
    result.put("data",list);
    return result;
}
相关推荐
长不胖的路人甲1 小时前
Serial 串行、Parallel 并行、CMS 并发收集器
java·开发语言·jvm
IT_Octopus1 小时前
Spring Boot 线程池关闭:destroyMethod 的作用与最佳实践
java·spring boot·后端
用户3126874877201 小时前
分页插件到底怎么拦截 SQL?MyBatis-Plus 插件机制原理一次讲透
mybatis
亦暖筑序2 小时前
AgentScope-Java 入门:完善 Vue 前端、发布 GitHub,并规划下一步
java·前端·vue.js
wddptwd282 小时前
android studio 报错怎么处理 java.lang.NullPointerException
android·java·android studio
霸道流氓气质2 小时前
分布式系统中接口时序不确定性处理
java·开发语言·分布式
深入云栈2 小时前
Netty 4.2.x 源码深度解析 (四):HashedWheelTimer —— 时间轮定时调度算法
java
带刺的坐椅2 小时前
别再把 Coding Agent 当智能补全了:SolonCode 想做的是数字员工
java·solon·codex·claudecode·opencode·soloncode
大模型码小白3 小时前
在 Windows 下 Codex 安装、配置与使用详细指南
java·人工智能·windows
Gauss松鼠会3 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结