📢📢📢📣📣📣
哈嘍!大家好,我是【一心同學】,一位上進心十足的【Java領域博主】!😜😜😜
?【一心同學】的寫作風格:喜歡用【通俗易懂】的文筆去講解每一個知識點,而不喜歡用【高大上】的官方陳述,
?【一心同學】博客的領域是【面向后端技術】的學習,未來會持續更新更多的【后端技術】以及【學習心得】,
?如果有對【后端技術】感興趣的【小可愛】,歡迎關注【一心同學】💞💞💞
??????感謝各位大可愛小可愛!??????
目錄
前言
介紹
1、alleq
2、eq
3、ne
4、gt
5、lt
6、le
7、between
8、notBetween
9、like
10、notLike
11、likeLeft
12、likeRight
13、isNull
14、isNotNull
15、in
16、notIn
17、inSql
18、notInSql
19、groupBy
20、orderByAsc
21、orderByDesc
22、having
23、or
24、exists
25、notExists
26、last
27、構造器擴展使用
(1)帶條件的查詢
(2)帶條件的修改
(3)帶條件的洗掉
小結
前言
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);
}
小結
以上就是【一心同學】整理了一天的【條件構造器】知識點講解,對于每一個【屬性方法】,【一心同學】都有寫出相對應的代碼給大家參考理解,大家可以把這篇博客【收藏】起來,如果在開發時忘記了某個條件的使用,可以看看這篇博客,
如果這篇【文章】有幫助到你,希望可以給【一心同學】點個贊👍,創作不易,相比官方的陳述,我更喜歡用【通俗易懂】的文筆去講解每一個知識點,如果有對【后端技術】感興趣的小可愛,也歡迎關注?????? 【一心同學】??????,我將會給你帶來巨大的【識訓與驚喜】💕💕!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413981.html
標籤:其他
