一、 QueryWrapper
1.查询name包含a 年龄在20到30之间 同时email不为空的数据
@Test
public void test01()
{
// 查询name包含a 年龄在20到30之间 同时email不为空的数据
QueryWrapper<User> queryWrapper = new QueryWrapper();
queryWrapper.like("name","a")
.between("age",20,30)
.isNotNull("email");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果
2.首先根据年龄降序排列 年龄相同再根据id升序排列
@Test
public void test02()
{
// 首先根据年龄降序排列 年龄相同再根据id升序排列
QueryWrapper<User> queryWrapper = new QueryWrapper();
queryWrapper.orderByDesc("age")
.orderByAsc("id");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果
3.删除 email 为空的数据
@Test
public void test03(){
// 删除 email 为空的数据
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("email");
int delete = userMapper.delete(queryWrapper);
System.out.println("受影响的行数:"+delete);
}
结果
4.修改(姓名包含a并且年龄大于20)或者 email等于空的数据
@Test
public void test04(){
// 修改(姓名包含a并且年龄大于20)或者 email等于空的数据
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",20)
.like("name","a")
.or()
.isNull("email");
User user = new User();
user.setName("小明");
user.setEmail("11111@qq.com");
int update = userMapper.update(user, queryWrapper);
System.out.println("受影响行数:"+update);
}
结果
修改前
修改后
5.修改姓名包含 a 并且(年龄大于20或者邮箱等于空)的数据
@Test
public void test05()
{
// 修改姓名包含 a 并且(年龄大于20或者邮箱等于空)的数据
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","a")
.and(i -> i.gt("age",20).or().isNull("email") );
User user = new User();
user.setName("小红");
user.setEmail("11111@qq.com");
int update = userMapper.update(user, queryWrapper);
System.out.println("受影响行数:"+update);
}
结果:
修改前
修改后
6.查询表中部分字段
@Test
public void test06()
{
// 查询表中部分字段
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("name","age");
List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
maps.forEach(System.out::println);
}
结果
7.子查询
@Test
public void test07()
{
// 字查询,先查询出id小于等于3的id,然后in(小于等于3的ID)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("id","select id from user where id <= 3");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果
二、condition
通过 condition 条件判断查询数据
@Test
public void test08()
{
// 实际中,一般根据用户输入的条件查询,某些字段用户可能没有输入,所有要做非空判断
String name = "小";
Integer ageBegin = null;
Integer ageEnd = 15;
// 通过 condition 条件判断查询数据
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(name),"name",name)
.gt(ageBegin != null,"age",ageBegin)
.lt(ageEnd != null,"age",ageEnd);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
从打印的sql语句中可以看出,做了姓名模糊匹配和年龄小于15过滤,年龄大于条件没有,因为ageBegin等于 null。
结果
三、LambdaQueryWrapper
LambdaQueryWrapper 和 QueryWrapper 的区别就是 "name" 改成了 User::getName ,防止我们写错
@Test
public void test09()
{
String name = "小";
Integer ageBegin = null;
Integer ageEnd = 15;
// LambdaQueryWrapper 和 QueryWrapper 的区别就是 "name" 改成了 User::getName ,防止我们写错
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(StringUtils.isNotBlank(name),User::getName,name)
.gt(ageBegin != null,User::getAge,ageBegin)
.lt(ageEnd != null,User::getAge,ageEnd);
List<User> users = userMapper.selectList(lambdaQueryWrapper);
users.forEach(System.out::println);
}
结果
四、LambdaUpdateWrapper
@Test
public void test10() {
//组装set子句
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper
.set(User::getAge, 18)
.set(User::getEmail, "user@atguigu.com")
.like(User::getName, "a")
.and(i -> i.lt(User::getAge, 24).or().isNull(User::getEmail));
//lambda表达式内的逻辑优先运算
User user = new User();
int result = userMapper.update(user, updateWrapper);
System.out.println("受影响的行数:" + result);
}