赞
踩
queryWrapper是MyBatis Plus 中实现查询的对象封装操作类,可以封装SQL对象,包括where条件、orderby排序、select查询等字段。它们的关系如下:

Wrapper:是条件构造抽象类,最顶端父类
AbstractWrapper:由于查询条件封装,生成SQL的where条件
AbstractLambdaWrapper:Lambda语法使用Wrapper统一处理解析lambda获取column
AbstractQueryWrapper:用于lambda语法使用的查询Wrapper
LambdaUpdateWrapper:Lambda更新封装Wrapper
QueryWrapper:Entity对象封装操作类,不是用lambda
UpdateWrapper:Update条件封装,用于Entity对象更新操作
数据如下:

创建一个实体类:
- /**
- * @author qzz
- */
- @Data
- @TableName("t_user")
- public class User implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * 用户id
- */
- @TableId(value="id", type = IdType.AUTO)
- private Integer id;
- /**
- * 名称
- */
- @TableField("name")
- private String name;
-
- /**
- * 年龄
- */
- @TableField("age")
- private Integer age;
-
- /**
- * 删除标识 0:正常 1:删除 默认0
- */
- @TableField("del_flag")
- private Integer del_flag;
-
- /**
- * 邮箱
- */
- @TableField("email")
- private String email;
-
- /**
- * 创建时间
- */
- @TableField(value = "create_time", fill = FieldFill.INSERT)
- private Date create_time;
-
- /**
- * 修改时间
- */
- @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
- private Date update_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;
- }

控制台结果:

SQL实现:
- 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;
- }

控制台结果:

SQL实现:
- 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;
- }

控制台结果:

SQL实现:
- select * from t_user
- where del_flag=0
- and DATE(create_time) = STR_TO_DATE('2021-08-13','%Y-%m-%d')
- order by create_time desc
queryWrapper实现:
- /**
- * 案例四:根据createTime查看当日的用户列表
- * @return
- */
- @RequestMapping("/list4")
- public Map<String,Object> getList4(@RequestParam String createTime){
- Map<String,Object> result = new HashMap<>();
-
- //构建一个查询的wrapper
- QueryWrapper<User> wrapper = new QueryWrapper<User>();
- //查询条件为创建时间
- wrapper.apply(StringUtils.isNotBlank(createTime),"DATE(create_time) = STR_TO_DATE('"+createTime+"','%Y-%m-%d')");
- //未删除
- wrapper.eq("del_flag",0);
- //创建时间降序
- wrapper.orderByDesc("create_time");
-
- List<User> list = userMapper.selectList(wrapper);
- result.put("data",list);
- return result;
- }

控制台结果:

SQL实现:
- select * from t_user
- where del_flag=0
- and DATE(create_time) >= STR_TO_DATE('2021-08-01','%Y-%m-%d')
- AND DATE(create_time) <= STR_TO_DATE('2021-08-13','%Y-%m-%d')
- order by create_time desc
queryWrapper实现:
-
- /**
- * 案例五:查看某个时间段内的用户列表
- * @return
- */
- @RequestMapping("/list5")
- public Map<String,Object> getList5(@RequestParam String startTime,@RequestParam String endTime){
- Map<String,Object> result = new HashMap<>();
-
- //构建一个查询的wrapper
- QueryWrapper<User> wrapper = new QueryWrapper<User>();
- //查询条件为创建时间
- wrapper.apply(StringUtils.isNotBlank(startTime),"DATE(create_time) >= STR_TO_DATE('"+startTime+"','%Y-%m-%d')");
- wrapper.apply(StringUtils.isNotBlank(endTime),"DATE(create_time) <= STR_TO_DATE('"+endTime+"','%Y-%m-%d')");
- //未删除
- wrapper.eq("del_flag",0);
- //创建时间降序
- wrapper.orderByDesc("create_time");
-
- List<User> list = userMapper.selectList(wrapper);
- result.put("data",list);
- return result;
- }

控制台结果:

SQL实现:
- select * from t_user
- where del_flag=0
- and name like concat('李','%')
- and (email is not null or age>16)
- order by create_time desc
queryWrapper实现:
and方法嵌套使用
- /**
- * 案例六:查询姓李的并且邮箱不为空或者是年龄大于16的用户
- * @return
- */
- @RequestMapping("/list6")
- public Map<String,Object> getList6(){
- Map<String,Object> result = new HashMap<>();
-
- //构建一个查询的wrapper
- QueryWrapper<User> wrapper = new QueryWrapper<User>();
- //and方法嵌套
- wrapper.likeRight("name","李").and(
- userQueryWrapper -> userQueryWrapper.isNotNull("email")
- .or().lt("age",16)
- );
- //未删除
- wrapper.eq("del_flag",0);
- //创建时间降序
- wrapper.orderByDesc("create_time");
-
- List<User> list = userMapper.selectList(wrapper);
- result.put("data",list);
- return result;
- }

控制台结果:

SQL实现:
- select * from t_user
- where del_flag=0
- and id in(1,2,3)
- order by create_time desc
queryWrapper实现:
- /**
- * 案例七:根据ids查看用户列表信息
- * @return
- */
- @RequestMapping("/list7")
- public Map<String,Object> getList7(@RequestParam String ids){
- Map<String,Object> result = new HashMap<>();
-
- //构建一个查询的wrapper
- QueryWrapper<User> wrapper = new QueryWrapper<User>();
-
- if(StringUtils.isNotBlank(ids)){
- //字符串转数组再转List
- Collection<String> collection = Arrays.asList(ids.split(","));
- //in方法
- wrapper.in(collection.size()>0,"id",collection);
- }
-
- //未删除
- wrapper.eq("del_flag",0);
- //创建时间降序
- wrapper.orderByDesc("create_time");
-
- List<User> list = userMapper.selectList(wrapper);
- result.put("data",list);
- return result;
- }

控制台结果:

queryWrapper.lt()——小于
queryWrapper.le()——小于等于
queryWrapper.gt()——大于
queryWrapper.ge()——大于等于
queryWrapper.eq()——等于
queryWrapper.ne()——不等于
queryWrapper.betweeen(“age”,10,20)——age在值10到20之间
queryWrapper.notBetweeen(“age”,10,20)——age不在值10到20之间
queryWrapper.like(“属性”,“值”)——模糊查询匹配值‘%值%’
queryWrapper.notLike(“属性”,“值”)——模糊查询不匹配值‘%值%’
queryWrapper.likeLeft(“属性”,“值”)——模糊查询匹配最后一位值‘%值’
queryWrapper.likeRight(“属性”,“值”)——模糊查询匹配第一位值‘值%’
queryWrapper.isNull()——值为空或null
queryWrapper.isNotNull()——值不为空或null
queryWrapper.in(“属性”,条件,条件 )——符合多个条件的值
queryWrapper.notIn(“属性”,条件,条件 )——不符合多个条件的值
queryWrapper.or()——或者
queryWrapper.and()——和
queryWrapper.orderByAsc(“属性”)——根据属性升序排序
queryWrapper.orderByDesc(“属性”)——根据属性降序排序
queryWrapper.inSql(“sql语句”)——符合sql语句的值
queryWrapper.notSql(“sql语句”)——不符合SQL语句的值
queryWrapper.esists(“SQL语句”)——查询符合SQL语句的值
queryWrapper.notEsists(“SQL语句”)——查询不符合SQL语句的值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。