MybatisPlus 条件构造器

1,458 阅读2分钟

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

条件构造器

条件构造器主要用来写一些复杂的sql

注意事项

不支持以及不赞成在 RPC 调用中把 Wrapper 进行传输

  1. wrapper 很重
  2. 传输 wrapper 可以类比为你的 controllermap 接收值(开发一时爽,维护火葬场)
  3. 正确的 RPC 调用姿势是写一个 DTO 进行传输,被调用方再根据 DTO 执行相应的操作

拼接方法

查询方法说明示例
eq等于 =eq("username", "admin") ---> username = 'admin'
ne等于 =ne("username", "admin") ---> username <> 'admin'
gt大于 >gt("age", "18") ---> age > 18
ge大于等于 >=ge("age", "18") ---> age >= 18
lt小于 <lt("age", 18) ---> age < 18
le小于等于 <=le("age", 18) ---> age <= 18
between在值1和值2之间between("age", 18, 24) ---> age BETWEEN 18 AND 24
notBetween不在值1和值2之间notBetween("age", 18, 24) ---> age NOT BETWEEN 18 AND 24
like模糊查询like("name", "张") ---> name LIKE '%张%'
notLike不模糊查询内notLike("name", "张") ---> name NOT LIKE '%张%'
likeLeft左模糊查询likeLeft("name", "三") ---> name LIKE '%三'
likeRight右模糊查询内likeRight("name", "张") ---> name LIKE '张%'
isNull字段为空isNull("name") ---> name IS NULL
isNotNull字段不为空isNotNull("name") ---> name IS NOT NULL
in在集合内in("age", 16,17,18) ---> age IN (16,17,18)
notIn在集合内notIn("age", 16,17,18) ---> age NOT IN (16,17,18)
inSql子查询in("id", "SELECT id FROM table WHERE id < 3") ---> id IN (SELECT id FROM table WHERE id < 3)
notInSql子查询notInSql("id", "SELECT id FROM table WHERE id < 3") ---> id ONT IN (SELECT id FROM table WHERE id < 3)
groupBy分组groupBy("age", "id") ---> GROUP BY id, name
orderByAsc字段正序orderByAsc("age") ---> ORDER BY age ASC
orderByDesc字段倒序orderByDesc("age") ---> ORDER BY age DESC
having分组筛选having("sum(age) > 10")--->HAVING SUM(age) > 10
oreq("id", 1).or().eq("name", "张三")--->id = 1 OR name = '张三'
andeq("id", 1).and().eq("name", "张三")--->id = 1 AND name = '张三'
exists存在exists("SELECT id FROM table WHERE age = 1")--->EXISTS (SELECT id FROM table WHERE age = 1)
notExists存在notExists("SELECT id FROM table WHERE age = 1")--->NOT EXISTS (SELECT id FROM table WHERE age = 1)

isNotnullge演示

@Test  
void test1() {  
 //查询name不为空并且邮箱不为空,年龄大于15  
 QueryWrapper<User> wrapper = new QueryWrapper<>();  
    wrapper.  
            isNotNull("name").  
            isNotNull("email").  
            ge("age", 15);  
    userMapper.selectList(wrapper).forEach(System.out::println);  
}

eqselectOne演示

@Test  
void test2() {  
 //查询name=test2  
 QueryWrapper<User> wrapper = new QueryWrapper<>();  
    wrapper.eq("name", "test2");  
    //selectOne 只能查询一个,假如出现多个结果会报错  
 User user = userMapper.selectOne(wrapper);  
    System.out.println(user);  
}

betweenselectCount演示

@Test  
void test3() {  
 //查询年龄在[20,30]之间的用户  
 QueryWrapper<User> wrapper = new QueryWrapper<>();  
    wrapper.between("age", 20, 30);  
    long count = userMapper.selectCount(wrapper);  
    System.out.println(count);  
}

notLikelikeRightselectMaps演示

@Test  
void test4() {  
 //name不包含bc,并且email以t开头(t%)  
 QueryWrapper<User> wrapper = new QueryWrapper<>();  
    wrapper.  
            notLike("name", "bc").  
            likeRight("email", "t");  
    List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);  
    maps.forEach(System.out::println);  
}

inSqlselectObjs和子查询演示

@Test  
void test5() {  
 QueryWrapper<User> wrapper = new QueryWrapper<>();  
    wrapper.inSql("id", "SELECT id FROM user WHERE id < 10");  
    List<Object> objects = userMapper.selectObjs(wrapper);  
    objects.forEach(System.out::println);  
}

orderByDesc演示

@Test  
void test6() {  
 QueryWrapper<User> wrapper = new QueryWrapper<>();  
    wrapper.orderByDesc("id");  
    List<User> users = userMapper.selectList(wrapper);  
    users.forEach(System.out::println);  
}