阅读 343

MybatisPlus 条件构造器(mybatisplus条件构造器多表查询)

条件构造器

条件构造器主要用来写一些复杂的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);   }


作者:万恶的沫白
链接:https://juejin.cn/post/7029178067163545636


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐