一、queryWrapper的介绍

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对象更新操作

二、queryWrapper实例:

数据如下:

在这里插入图片描述

 创建一个实体类:

/**
 * @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;
}

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、案例二:查看姓李并且邮箱不为空的用户列表

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;
    }

控制台结果:

在这里插入图片描述

 

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

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;
    }

控制台结果:

在这里插入图片描述

 

4、案例四:根据CreateTime查看当日的用户列表

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;
    }

控制台结果:

在这里插入图片描述

 5、案例五:查看某一个时间段内的用户列标

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;
    }

控制台结果:

在这里插入图片描述

 6、案例六:查询姓李的并且邮箱不能为空或者年龄大于16的用户列表

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;
    }

控制台结果:

在这里插入图片描述

7、案例七:查询ID号为1、2、3的用户列表

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语句的值
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐