1. 程式人生 > >每天玩轉3分鐘 MyBatis-Plus - 5. 高階查詢(三)(條件構造器)

每天玩轉3分鐘 MyBatis-Plus - 5. 高階查詢(三)(條件構造器)

每天玩轉3分鐘 MyBatis-Plus - 1. 配置環境

每天玩轉3分鐘 MyBatis-Plus - 2. 普通查詢

每天玩轉3分鐘 MyBatis-Plus - 3. 高階查詢(一)

每天玩轉3分鐘 MyBatis-Plus - 4. 高階查詢(二)

每天玩轉3分鐘 MyBatis-Plus - 5. 高階查詢(三)

程式碼下載:https://github.com/Jackson0714/study-mybatis-plus.git

mybatis-plus的查詢功能非常強大, 上一篇,我們通過例題的方式講解了mybatis-plus的高階查詢功能:條件查詢,這一篇我們繼續以例題的方式講解mybatis-plus的高階查詢功能。

準備資料

#建立使用者表
CREATE TABLE user (
    id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主鍵',
    name VARCHAR(30) DEFAULT NULL COMMENT '姓名',
    age INT(11) DEFAULT NULL COMMENT '年齡',
    email VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
    manager_id BIGINT(20) DEFAULT NULL COMMENT '直屬上級id',
    create_time DATETIME DEFAULT NULL COMMENT '建立時間',
    CONSTRAINT manager_fk FOREIGN KEY (manager_id)
        REFERENCES user (id)
)  ENGINE=INNODB CHARSET=UTF8;

#初始化資料:
INSERT INTO user (id, name, age, email, manager_id
    , create_time)
VALUES (1087982257332887553, '大boss', 40, '[email protected]', NULL, '2019-01-11 14:20:20'),
    (1088248166370832385, '王天風', 25, '[email protected]', 1087982257332887553, '2019-02-05 11:12:22'),
    (1088250446457389058, '李藝偉', 28, '[email protected]', 1088248166370832385, '2019-02-14 08:31:16'),
    (1094590409767661570, '張雨琪', 31, '[email protected]', 1088248166370832385, '2019-01-14 09:15:15'),
    (1094592041087729666, '劉紅雨', 32, '[email protected]', 1088248166370832385, '2019-01-14 09:48:16');

User 表結構如下:

idnameageemailmanager_idcreate_time
1 Jone 18 [email protected] null
2020-01-01 14:20:20
2 Jack 20 [email protected] 1
2020-01-20 14:20:20
3 Tom 28 [email protected] 2
2020-01-15 14:20:20
4 Sandy 21 [email protected] 2
2020-01-12 14:20:20
5 Billie 24 [email protected] 2
2020-01-22 14:20:20

 

 

一、案例彙總(第三波)

1.1 查詢名字為"J"開頭並且滿足條件:年齡小於20或郵箱不為空

難度係數 ★★★

1.2 查詢年齡小於20或郵箱不為空且滿足條件:名字為"J"開頭

難度係數 ★★★

1.3 查詢年齡為20、21、25、26的使用者

難度係數 ★

1.4 查詢年齡為20、21、25、26的使用者,且只需返回第一條記錄

難度係數 ★★

二、案例講解

1.1 查詢名字為"J"開頭並且滿足條件:年齡小於20或郵箱不為空

難度係數 ★★★

考察 and 巢狀

 1 /*
 2  * 描述:例1.5 查詢名字為"J"開頭並且滿足條件:年齡小於20或郵箱不為空
 3  * SQL語句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE (name LIKE 'J%' AND ( (age < 20 OR email IS NOT NULL) ))
 4  * 作者:部落格園-悟空聊架構
 5  * 時間:2019-01-31
 6  * Github:https://github.com/Jackson0714/study-mybatis-plus.git
 7  * 部落格園:https://www.cnblogs.com/jackson0714
 8  * */
 9 @Test
10 public void testSelectByQueryWrapper5() {
11     System.out.println(("----- 名字為'J'開頭並且(年齡小於20或郵箱不為空) ------"));
12     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13     queryWrapper.likeRight("name", "J").and(qw->qw.lt("age", 20).or().isNotNull("email"));
14     List<User> userList = userMapper.selectList(queryWrapper);
15     userList.forEach(System.out::println);
16 }

查詢日誌:

查詢結果:

1.2 查詢年齡小於20或郵箱不為空且滿足條件:名字為"J"開頭

難度係數 ★★★

考察 nested 用法

 1 /*
 2  * 描述:例1.6 查詢年齡小於20或郵箱不為空且滿足條件:名字為"J"開頭
 3  * SQL語句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE (( (age < 20 OR email IS NOT NULL)) AND name LIKE 'J%')
 4  * 作者:部落格園-悟空聊架構
 5  * 時間:2019-01-31
 6  * Github:https://github.com/Jackson0714/study-mybatis-plus.git
 7  * 部落格園:https://www.cnblogs.com/jackson0714
 8  * */
 9 @Test
10 public void testSelectByQueryWrapper6() {
11     System.out.println(("----- 名字為'J'開頭並且(年齡小於20或郵箱不為空) ------"));
12     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13     queryWrapper.nested(qw->qw.lt("age", 20).or().isNotNull("email"))
14             .likeRight("name", "J");
15     List<User> userList = userMapper.selectList(queryWrapper);
16     userList.forEach(System.out::println);
17 }

查詢日誌: 

查詢結果

 

1.3 查詢年齡為20、21、25、26的使用者

難度係數 ★

考察 in 用法

 1 /*
 2  * 描述:例1.7 查詢年齡為20、21、25、26的使用者
 3  * SQL語句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (20,21,25,26)
 4  * 作者:部落格園-悟空聊架構
 5  * 時間:2019-01-31
 6  * Github:https://github.com/Jackson0714/study-mybatis-plus.git
 7  * 部落格園:https://www.cnblogs.com/jackson0714
 8  * */
 9 @Test
10 public void testSelectByQueryWrapper7() {
11     System.out.println(("----- 名字為'J'開頭並且(年齡小於20或郵箱不為空) ------"));
12     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13     queryWrapper.in("age", Arrays.asList(20,21,25,26));
14     List<User> userList = userMapper.selectList(queryWrapper);
15     userList.forEach(System.out::println);
16 }

 

查詢結果 

1.4 查詢年齡為20、21、25、26的使用者,且只需返回第一條記錄

難度係數 ★★

考察 last 和 limit 用法

 1 /*
 2  * 描述:例1.8 查詢年齡為20、21、25、26的使用者,且只需返回第一條記錄
 3  * SQL語句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (20,21,25,26)
 4  * 作者:部落格園-悟空聊架構
 5  * 時間:2019-01-31
 6  * Github:https://github.com/Jackson0714/study-mybatis-plus.git
 7  * 部落格園:https://www.cnblogs.com/jackson0714
 8  * */
 9 @Test
10 public void testSelectByQueryWrapper8() {
11     System.out.println(("----- 查詢年齡為20、21、25、26的使用者,且只需返回第一條記錄 ------"));
12     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13     queryWrapper.in("age", Arrays.asList(20,21,25,26)).last("limit 1");
14     List<User> userList = userMapper.selectList(queryWrapper);
15     userList.forEach(System.out::println);
16 }

查詢日誌:

查詢結果:

 

 

每天玩轉3分鐘 MyBatis-Plus - 1. 配置環境

每天玩轉3分鐘 MyBatis-Plus - 2. 普通查詢

每天玩轉3分鐘 MyBatis-Plus - 3. 高階查詢(一)

每天玩轉3分鐘 MyBatis-Plus - 4. 高階查詢(二)

每天玩轉3分鐘 MyBatis-Plus - 5. 高階查詢(三)

關注公眾號:悟空聊架構,回覆pmp,領取pmp資料!回覆悟空,領取架構師資料!


作  者:悟空聊架構 
出  處:http://www.cnblogs.com/jackson0714/ 
關於作者:專注於移動開發。如有問題或建議,請多多賜教! 
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。 
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我 
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力! 

悟空聊架構 

關注我,帶你每天進步一點