一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢

Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢

2021-11-05 10:15tryternity Java教程

本文主要介紹了Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

嵌套查詢

使用Fluent Mybatis, 不用手寫一行xml文件或者Mapper文件,在dao類中即可使用java api構造中比較復雜的嵌套查詢。
讓dao的代碼邏輯和sql邏輯合二為一。

前置準備,maven工程設置

參考文章 使用FluentMybatis實現(xiàn)mybatis動態(tài)sql拼裝和fluent api語法

in (select 子查詢)

 嵌套查詢表和主查詢表一樣的場景

.column().in( query-> {對query設置條件})

只需要在in里面引用一個lambda表達式,lambda表達式入?yún)⑹且粋€同名的Query。對這個入?yún)⒖梢栽O置where參數(shù)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@DisplayName("嵌套查詢和主查詢的表是同一個")
@Test
void test_in_same_table_query() {
    UserQuery query = new UserQuery()
        .where.id().in(q -> q.selectId()
            .where.id().eq(3L).end())
        .and.userName().like("user")
        .and.age().gt(23).end();
 
    List list = mapper.listEntity(query);
    
    // 通過Test4J工具,驗證sql語句
    db.sqlList().wantFirstSql()
        .eq("SELECT id, gmt_create, gmt_modified, is_deleted, account, age, avatar, birthday, bonus_points, e_mail, password, phone, status, user_name " +
            "FROM user WHERE id IN (SELECT id FROM user WHERE id = ?) " +
            "AND user_name LIKE ? " +
            "AND age > ?");
}

嵌套查詢表是另外表的場景
.column().in(queryClass, query-> {對query設置條件})

如果嵌套查詢的不是同表一張表,需要在in方法里面顯式聲明一下Query對象的class類型, 后面用法同方法一。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@DisplayName("嵌套查詢和主查詢的表是不同")
@Test
void test_in_difference_table_query() {
    UserQuery query = new UserQuery()
        .selectId()
        .where.addressId().in(ReceivingAddressQuery.class, q -> q.selectId()
            .where.id().in(new int[]{1, 2}).end())
        .end();
    mapper.listEntity(query);
    
    // 通過Test4J工具,驗證sql語句
    db.sqlList().wantFirstSql()
        .eq("SELECT id " +
            "FROM user " +
            "WHERE address_id IN (SELECT id FROM receiving_address WHERE id IN (?, ?))");
}

not in嵌套查詢: 使用方法同 in 嵌套查詢

exists (select子查詢)

嵌套查詢表和主查詢表一樣的場景
Exists查詢不需要指定字段,直接在query where中可以引用exists方法。

exists( query-> {對query設置條件})
如果exists查詢的表和主查詢一致,直接在lambada表達式中使用同類型query參數(shù)即可,參數(shù)用法同in方法。

exists(queryClass, query-> {對query設置條件})
如果exists查詢的表和主查詢不一致,在exists方法第一個參數(shù)指定query類型,第二個參數(shù)同方法1。

具體示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@DisplayName("EXISTS查詢")
@Test
void test_exists_query() {
    UserQuery query = new UserQuery()
        .where.exists(ReceivingAddressQuery.class, q -> q
            .where.detailAddress().like("杭州")
            .and.id().apply(" = user.address_id").end())
        .end();
    mapper.listEntity(query);
    
    // 通過Test4J工具,驗證sql語句
    db.sqlList().wantFirstSql()
        .eq("SELECT id, gmt_create, gmt_modified, is_deleted, account, address_id, age, avatar, birthday, bonus_points, e_mail, password, phone, status, user_name " +
                "FROM user " +
                "WHERE EXISTS (SELECT *" +
                "   FROM receiving_address" +
                "   WHERE detail_address LIKE ?" +
                "   AND id = user.address_id)",
            StringMode.SameAsSpace);
}

注:示例中的測試,是使用H2內(nèi)存數(shù)據(jù)庫,你可以直接運行,不需要你額外建表。
但使用Test4J執(zhí)行測試,你需要在加入vm參數(shù):-javaagent:/這里是你本地maven倉庫地址/org/jmockit/jmockit/1.48/jmockit-1.48.jar

以我本機為例,具體參數(shù)如圖:

Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢

Fluent Mybatis文檔&示例

Fluent Mybatis源碼, github

到此這篇關于Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢的文章就介紹到這了,更多相關Fluent Mybatis 復雜嵌套查詢內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/tryternity/article/details/109062641

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 高清国语自产拍免费视频国产 | 亚洲第一色网 | 天天做天天爱天天综合网 | 午夜小福利| 欧美生活一级片 | 国产在线视频一区二区三区 | 国产亚洲欧美在线中文bt天堂网 | 好男人资源免费播放在线观看 | 精品无码国产AV一区二区三区 | 日本免费一区二区三区a区 日本免费三片在线观看 | 国产在线极品 | 国产欧美国产精品第一区 | 精品国产精品国产偷麻豆 | 成人伊人青草久久综合网破解版 | 亚洲精品动漫免费二区 | 91青青视频| 被老外操| 岛国片免费观看 | 精品久久洲久久久久护士免费 | 亚洲第一二三四区 | 99视频全部免费 | 国产精品极品美女自在线 | 日本高清视频网站 | 青草国产福利视频免费观看 | 99精品视频在线观看 | 国产亚洲精品第一综合另类 | 成人啪精品视频免费网站 | 亚洲欧美日韩中文字幕网址 | 龟甲情感超市全文阅读 小说 | 日韩精品欧美国产精品亚 | 久久理论片迅播影院一级 | 欧美特一级| 久久精品嫩草影院免费看 | 精品国产自在在线在线观看 | chinese国产老太性 | 男人猛进女人屁股免费 | 成年人天堂 | 草逼视频网站 | 无码天堂亚洲国产AV久久 | 亚洲国产欧美久久香综合 | haodiaocao几万部精彩视频 |