Day 09 (JAVA中的queryWrapper)
queryWrapper.lt()——小于queryWrapper.le()——小于等于queryWrapper.gt()——大于queryWrapper.ge()——大于等于queryWrapper.eq()——等于queryWrapper.ne()——不等于queryWrapper.betweeen(“age”,10,20)——age在值10到20之间queryWrapper.notBetwe
一、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语句的值
更多推荐
所有评论(0)