在Mp中,条件构造器 Wrapper 方便我们在进行增删改查操作时设置 Where 筛选条件。其接口的实现类关系如下:
可以看到
AbstractWrapper
和
AbstractChainWrapper
是主要实现,其中我们主要介绍 AbstractWrapper 及其子类。
1、allEq
顾名思义,allEq就是all Eq、全部Eq。与前面学习的ByMap系方法类似。
allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
例:
@Test
public void testAllEq(){
//创建Map作为筛选条件,与ByMap方法类似
Map<String,Object> params = new HashMap<>();
params.put("name", "李四");
params.put("age", "20");
params.put("password", null);
QueryWrapper<User> wrapper = new QueryWrapper<>();
//一般操作
//SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE password IS NULL AND name = ? AND age = ?
wrapper.allEq(params);
//设置null2IsNull为false,去除筛选条件中为Null的字段
//SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ?
wrapper.allEq(params, false);
//筛选指定字段
//SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE age = ?
wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id")) , params);
//SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ?
wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id") || k.equals("name")) , params);
List<User> users = mapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
2、比较
- eq:等于
- ne:不等于
- gt:大于
- ge:大于等于
- lt:小于
- le:小于等于
- between:between 值1 and 值2
- notBetween:反之
- in:in (v1,v2,v3)
- notIn:反之
例:
@Test
public void testEq() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
//SELECT id,user_name,password,name,age,email FROM tb_user WHERE password = ? AND age >= ? AND name IN (?,?,?)
wrapper.eq("password", "123456")
.ge("age", 20)
.in("name", "李四", "王五", "赵六");
List<User> users = mapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
3、模糊查询
例:
@Test
public void testLike(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name LIKE ?
// 参数:%五(String)
wrapper.likeLeft("name", "五");
List<User> users = mapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
4、排序
例:
@Test
public void testOrderBy(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
//按age升序
// SELECT id,user_name,name,age,email AS mail FROM tb_user ORDER BY age DESC
wrapper.orderBy(true,true,"age");//( 是否排序 , 升序/降序 , 排序字段 )
List<User> users = mapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
5、逻辑查询
例:
@Test
public void testOr(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? OR age = ?
wrapper.eq("name", "王五").or().eq("age", 21);
//SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE (name = ? OR (age = ? AND id > ?))
wrapper.eq("name", "王五").or( i -> i.eq("age",21).gt("id",1));
List<User> users = mapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
6、select
例:
@Test
public void testSelect(){
//筛选指定字段
QueryWrapper<User> wrapper = new QueryWrapper<>();
//SELECT id,name,age FROM tb_user WHERE name = ? OR age = ?
wrapper.eq("name", "王五")
.or()
.eq("age", 21)
.select("id","name","age"); //指定查询的字段
List<User> users = mapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}