等值条件查询:使用 Wrapper 对象,传递查询条件。
用于查询的字段(如下例中的 name),是使用字符串写死的,无法在编译期检查是否和数据库里的字段一致,所以不建议使用。
@Test
void eq() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}

LambdaQueryWrapper,将字段名用方法引用表示,能够避免拼写错误。如果拼写错误,编译期就会直接报错。
@Test
void eqByLambda() {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三");
List<User> users = mapper.selectList(wrapper);
log.info(users.toString());
}

非空,一般指的是:不为 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());
}

