1. 条件查询三种方式
条件查询多用第三种;
链式写表示且的关系,中间加上or()表示或的关系;
给出相应示例代码:
@Test
public void testGetList(){
//方式一:按条件查询
/*QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();*/
/*userQueryWrapper.lt("age", 18);*/
/*List<User> users = userDao.selectList(userQueryWrapper);*/
/*System.out.println(users);*/
//方式二:lambda格式按条件查询
/*QueryWrapper<User> userQueryWrapper = new QueryWrapper<User>();*/
/*userQueryWrapper.lambda().lt(User::getAge, 18);*/
/*List<User> users = userDao.selectList(userQueryWrapper);*/
/*System.out.println(users);*/
//方式三:lambda格式按条件查询
/*LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();*/
/*userLambdaQueryWrapper.lt(User::getAge, 18);*/
/*List<User> users = userDao.selectList(userLambdaQueryWrapper);*/
/*System.out.println(users);*/
//并且与或者关系
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
//且的关系
//userLambdaQueryWrapper.gt(User::getAge, 18).lt(User::getAge, 30);
//或的关系
userLambdaQueryWrapper.lt(User::getAge, 18).or().gt(User::getAge, 30);
List<User> users = userDao.selectList(userLambdaQueryWrapper);
System.out.println(users);
}
2. 条件查询的null值处理
lt()和gt()中做对应的判断,判断条件是否为null
//null值处理,业务场景中只有下限(或上限)条件时
UserQuery userQuery = new UserQuery();
userQuery.setAge(50);
//userQuery.setAge2(20);
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.lt(null != userQuery.getAge(), User::getAge, userQuery.getAge());
userLambdaQueryWrapper.gt(null != userQuery.getAge2(), User::getAge, userQuery.getAge2());
List<User> users = userDao.selectList(userLambdaQueryWrapper);
System.out.println(users);
也可以采用链式写法(阅读性差)
userLambdaQueryWrapper.lt(null != userQuery.getAge(), User::getAge, userQuery.getAge())
.gt(null != userQuery.getAge2(), User::getAge, userQuery.getAge2());
3. 查询投影
查询投影指的是从查询结果中选择需要的列或字段进行筛选,只返回这些特定的列或字段信息。这种方式可以使查询结果更简洁,且只包含所需的信息。
查询部分字段
//查询投影
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<User>();
//1.Lambda方式
userLambdaQueryWrapper.select(User::getId, User::getName);
//2.字段形式
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("id", "name");
List<User> users = userDao.selectList(userLambdaQueryWrapper);
List<User> users1 = userDao.selectList(userQueryWrapper);
System.out.println(users);
System.out.println(users1);
查询结果包括模型类中未定义的属性
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("count(*) as count, tel");
userQueryWrapper.groupBy("tel");
List<Map<String, Object>> userList = userDao.selectMaps(userQueryWrapper);
System.out.println(userList);
4. 查询条件设置
等同于=的登录验证,查询一条使用selectOne()
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//等同于=
lqw.eq(User::getName,"Jerry").eq(User::getPassword,"jerry");
User loginUser = userDao.selectOne(lqw);
System.out.println(loginUser);
范围查询
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//范围查询 lt le gt ge eq between
lqw.between(User::getAge,10,30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
模糊查询,likeLeft表示%J,likeRight表示J%,like表示%J%
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//模糊匹配 like
lqw.likeLeft(User::getName,"J");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
5. 字段映射与表名映射
与之前的MyBatis中写xml文件时,采用resultMap的功能类似
- 属性名与数据库中的属性名不对应
- 编码中添加了数据库中未定义的属性,怎么避免sql报错
- 采用默认查询开放了更多的字段查询权限,这时需要隐藏一些字段的查询(password)
- 表名与编码开发设计不同步
@Data
//设置类名与数据库表名的映射(4)
@TableName("tbl_user")
public class User {
private Long id;
private String name;
//属性名与数据库中的属性名不对应(1),隐藏一些字段的查询(3)
@TableField(value = "pwd",select = false)
private String password;
private Integer age;
private String tel;
//设置数据库未定义的属性(2)
@TableField(exist = false)
private Integer online;
}