📢📢📢📣📣📣
哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜
✨【一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。
✨【一心同学】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。
✨如果有对【后端技术】感兴趣的【小可爱】,欢迎关注【一心同学】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
前言
MyBatis-Plus提供了强大的条件构造器。通过条件构造器可以写一些复杂的SQL语句,从而提高我们的开发效率,【一心同学】也将其属性详细得整理出来了,内容非常多,大家可以【收藏】起来,后续开发过程中如果忘记了某个属性方法的使用,可以看看【一心同学】的这篇博客。
介绍
MyBatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等。
注意:使用的是数据库字段,不是 Java 属性!
1、alleq
描述:
- 全部相等(或个别isNull)
allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
参数说明:
params : key为数据库字段名,value为字段值
null2IsNull : 默认true,为true则在map的value为null时调用 isNull 方法,为false时则忽略value为null的
使用
(1)需求:查询姓名为“一心同学”,并且年龄为20岁的用户。
@Test
void testWrapper1() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
HashMap<String,Object> map=new HashMap<>();
map.put("name","一心同学");
map.put("age",20);
wrapper.allEq(map);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
(2)需求:查询姓名为“一心同学”,如果年龄为null,则不将年龄作为查询条件。
@Test
void testWrapper1() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
HashMap<String,Object> map=new HashMap<>();
map.put("name","一心同学");
map.put("age",null);//年龄为null
//false则表示,当age为null则忽略该属性(不作该属性的查询),为true(默认),则表示查询age为null的用户
wrapper.allEq(map,false);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
2、eq
描述:
- 等于 =
eq(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询姓名为“一心同学”的用户。
@Test
void testWrapper2() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.eq("name","一心同学");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
3、ne
描述:
- 不等于 <>
ne(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询年龄不等于18的用户信息。
@Test
void testWrapper3() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.ne("age",18);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
4、gt
描述:
- 大于等于 >=
ge(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询年龄大于等于18的用户。
@Test
void testWrapper4() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.gt("age",18);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
5、lt
描述:
- 小于 <
lt(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询年龄小于20的用户信息。
@Test
void testWrapper5() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.lt("age",20);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
6、le
描述:
- 小于等于 <=
le(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询年龄小于等于20的用户信息。
@Test
void testWrapper6() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.le("age",20);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
7、between
描述:
- BETWEEN 值1 AND 值2
between(R column, Object val1, Object val2)
参数说明:
colum:数据库的字段属性
val1:值1(小)
val2:值2(大)
使用
需求:查询年龄为18到25之间的用户信息。
@Test
void testWrapper7() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.between("age",18,25);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
8、notBetween
描述:
- NOT BETWEEN 值1 AND 值2
notBetween(R column, Object val1, Object val2)
参数说明:
colum:数据库的字段属性
val1:值1(小)
val2:值2(大)
使用
需求:查询年龄不在20-25区间的用户信息。
@Test
void testWrapper8() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.between("age",20,25);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
9、like
描述:
- LIKE '%值%'
like(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询名字包含“心”的用户信息。
@Test
void testWrapper9() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.like("name","心");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
10、notLike
描述
- NOT LIKE '%值%'
notLike(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询名字不包含“张”的用户信息。
@Test
void testWrapper10() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.notLike("name","张");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
11、likeLeft
描述:
- LIKE '%值'
likeLeft(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询名字为“学”字结尾的用户信息。
@Test
void testWrapper11() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.likeLeft("name","学");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
12、likeRight
描述
- LIKE '值%'
likeRight(R column, Object val)
参数说明:
colum:数据库的字段属性
val:属性值
使用
需求:查询名字为“一”字开头的用户信息。
@Test
void testWrapper12() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.likeRight("name","一");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
13、isNull
描述:
- 字段 IS NULL
isNull(R column)
参数说明:
colum:数据库的字段属性
使用
需求:查询email为null的用户信息。
@Test
void testWrapper13() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.isNull("email");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
14、isNotNull
描述:
- 字段 IS NOT NULL
isNotNull(R column)
参数说明:
colum:数据库的字段属性
使用
需求:查询名字不为null的用户信息。
@Test
void testWrapper14() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.isNotNull("name");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
15、in
描述:
- 字段 IN (value.get(0), value.get(1), ...)
in(R column, Collection<?> value)
参数说明:
colum:数据库的字段属性
value:值的集合
使用
需求:查找id为(1,3,4)的用户信息。
@Test
void testWrapper15() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.in("id",Arrays.asList(1,3,4));
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
16、notIn
描述:
- 字段 NOT IN (value.get(0), value.get(1), ...)
- 字段 NOT IN (v0, v1, ...)
notIn(R column, Collection<?> value)
notIn(R column, Object... values)
参数说明:
colum:数据库的字段属性
value:值的集合
使用
需求:查询id不是(1,3,4)的用户信息。
@Test
void testWrapper16() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.notIn("id",Arrays.asList(1,3,4));
// wrapper.notIn("id",1,3,4); 两者效果一样的
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
17、inSql
描述:
- 字段 IN ( sql语句 )
inSql(R column, String inValue)
参数说明:
colum:数据库的字段属性
inValue:sql语句或值
使用
需求:查询id为5以下的用户信息。
@Test
void testWrapper17() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.inSql("id","select id from person where id < 5");
// wrapper.inSql("id","1,2,3,4");//相当于 id in (1,2,3,4)
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
18、notInSql
描述:
- 字段 NOT IN ( sql语句 )
notInSql(R column, String inValue)
参数说明:
colum:数据库的字段属性
inValue:sql语句或值
使用
需求:查询id为不在1-5区间的用户信息。
@Test
void testWrapper18() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.notInSql("id","select id from person where id between 1 and 5");
// wrapper.notInSql("id","1,2,3,4");//相当于 id not in (1,2,3,4)
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
19、groupBy
描述:
- 分组:GROUP BY 字段, ...
- 例groupBy("id", "name")--->group by id,name
groupBy(R... columns)
参数说明:
colums:数据库的字段属性,可以多个
使用
需求:根据年龄进行分组查询。
@Test
void testWrapper19() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.groupBy("age");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
20、orderByAsc
描述:
- 排序:ORDER BY 字段, ... ASC
- 例: orderByAsc("id", "name")--->order by id ASC,name ASC
orderByAsc(R... columns)
参数说明:
colums:数据库的字段属性,可以多个
使用
需求:根据id升序查找用户信息。
@Test
void testWrapper20() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.orderByAsc("id");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
21、orderByDesc
描述:
- 排序:ORDER BY 字段, ... DESC
- 例: orderByDesc("id", "name")--->order by id DESC,name DESC
orderByAsc(R... columns)
参数说明:
colums:数据库的字段属性,可以多个
使用
需求:根据年龄进行降序查询。
@Test
void testWrapper21() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.orderByDesc("age");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
22、having
描述:
- HAVING ( sql语句 )
- 例: having("sum(age) > 10")--->having sum(age) > 10 例: having("sum(age) > {0}", 11)--->having sum(age) > 11
having(String sqlHaving, Object... params)
参数说明:
sqlHaving:SQL语句
params:值,可以多个。
使用
需求:根据年龄分组后,查询年龄总数>20的组别。
@Test
void testWrapper23() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.groupBy("age").having("sum(age)>20");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
23、or
描述:
- 拼接 OR
- 例: eq("id",1).or().eq("name","老王")--->id = 1 or name = '老王'
注意:如果没有用or()进行拼接,那么拼接默认采用and
使用
需求:查询年龄为18或20的用户信息。
@Test
void testWrapper24() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.eq("age",18L).or().eq("age",20L);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
24、exists
描述:
- 拼接 EXISTS ( sql语句 )
- 例: exists("select id from table where age = 1")--->exists (select id from table where age = 1)
exists(String existsSql)
参数说明:
existsSql:进行判断的SQL语句
使用
需求:判断id为1的用户是否存在,存在则输出全部用户信息。
@Test
void testWrapper25() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.exists("select id from person where id=1");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
25、notExists
描述:
- 拼接 NOT EXISTS ( sql语句 )
notExists(String notExistsSql)
参数说明:
notExistsSql:进行判断的SQL语句
使用
需求:判断id为2的用户是否存在,不存在则输出全部用户信息。
@Test
void testWrapper26() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.notExists("select id from person where id=2");
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
26、last
描述:
- 无视优化规则直接拼接到 sql 的最后
- 例: last("limit 1")
last(String lastSql)
参数说明:
lastSql:追加的SQL语句。
注意事项:
只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用
使用
需求:查询名字带“一心”的用户信息,记住,只要一位。
@Test
void testWrapper31(){
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.like("name","一心").last("LiMIT 1");
List<Person> person=personMapper.selectList(wrapper);
System.out.println(person);
}
27、构造器扩展使用
(1)带条件的查询
需求描述:查询所有姓名的包含“心"且年龄大于20岁的用户信息。
@Test
void testWrapper27() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.like("name","心")
.gt("age",20);
List<Person> personList = personMapper.selectList(wrapper);
personList.forEach(System.out::println);
}
需求:查询所有名字带”心“的用户数量
@Test
void testWrapper28() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.like("name","心");
int count=personMapper.selectCount(wrapper);
System.out.println(count);
}
(2)带条件的修改
需求信息:将年龄大于20岁的用户的名字修改为”老用户“。
@Test
void testWrapper29() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.gt("age",20);
Person person=new Person();
person.setName("老员工");
personMapper.update(person,wrapper);
}
(3)带条件的删除
需求信息:将姓名带有“lisi”的用户信息删除
@Test
void testWrapper30() {
QueryWrapper<Person> wrapper=new QueryWrapper<>();
wrapper.like("name","lisi");
int result=personMapper.delete(wrapper);
System.out.println(result);
}
小结
以上就是【一心同学】整理了一天的【条件构造器】知识点讲解,对于每一个【属性方法】,【一心同学】都有写出相对应的代码给大家参考理解,大家可以把这篇博客【收藏】起来,如果在开发时忘记了某个条件的使用,可以看看这篇博客。
如果这篇【文章】有帮助到你,希望可以给【一心同学】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【后端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【一心同学】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!
版权归原作者 一心同学 所有, 如有侵权,请联系我们删除。