基础等值查询
等值条件查询:使用 Wrapper
对象,传递查询条件。
QueryWrapper(不推荐)
用于查询的字段(如下例中的 name),是使用字符串写死的,无法在编译期
检查是否和数据库里的字段一致,所以不建议使用。
代码
@Test
void eq() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}
结果
LambdaQueryWrapper(推荐)
LambdaQueryWrapper
,将字段名
用方法引用
表示,能够避免拼写错误
。如果拼写错误,编译期就会直接报错。
代码
@Test
void eqByLambda() {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三");
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}
结果
非空参数 - 等值查询
- 在满足给定的执行条件时(一般为非空),本条查询参数生效(查询参数拼接到查询SQL语句的where子句中,作为查询条件);
- 不满足执行条件,本条查询参数无效。
非空
,一般指的是:不为 null
、空字符串
和 仅包含空格的字符串
。
代码
@Test
void selectByNameEquals_ZhangSan() {
selectByNameEquals("张三");
}
@Test
void selectByNameEquals_Null() {
selectByNameEquals(null);
}
@Test
void selectByNameEquals_Space() {
selectByNameEquals(" ");
}
void selectByNameEquals(String name) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(name), User::getName, name);
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}
结果
多条件查询(逻辑与)
多个查询条件,逻辑与(and),作为最终查询条件。
代码
/**
* 查询用户列表, 查询条件:姓名为“张三”,且年龄为“28”。
*/
@Test
void selectByNameAndAge() {
String name = "张三";
String age = "28";
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(name), User::getName, name);
wrapper.eq(StringUtils.hasText(age), User::getAge, age);
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}
结果
不等于查询
代码
/**
* 查询用户列表, 查询条件:姓名不等于“张三”
*/
@Test
void selectNotEqual() {
String name = "张三";
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.ne(StringUtils.hasText(name), User::getName, name);
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}