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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

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

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

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

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

嵌套查詢

使用Fluent Mybatis, 不用手寫一行xml文件或者M(jìn)apper文件,在dao類中即可使用java api構(gòu)造中比較復(fù)雜的嵌套查詢。
讓dao的代碼邏輯和sql邏輯合二為一。

前置準(zhǔn)備,maven工程設(shè)置

參考文章 使用FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語(yǔ)法

in (select 子查詢)

 嵌套查詢表和主查詢表一樣的場(chǎng)景

.column().in( query-> {對(duì)query設(shè)置條件})

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@DisplayName("嵌套查詢和主查詢的表是同一個(gè)")
@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工具,驗(yàn)證sql語(yǔ)句
    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 > ?");
}

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

如果嵌套查詢的不是同表一張表,需要在in方法里面顯式聲明一下Query對(duì)象的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工具,驗(yàn)證sql語(yǔ)句
    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子查詢)

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

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

exists(queryClass, query-> {對(duì)query設(shè)置條件})
如果exists查詢的表和主查詢不一致,在exists方法第一個(gè)參數(shù)指定query類型,第二個(gè)參數(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工具,驗(yàn)證sql語(yǔ)句
    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);
}

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

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

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

Fluent Mybatis文檔&示例

Fluent Mybatis源碼, github

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

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

延伸 · 閱讀

精彩推薦
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

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

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

    小米推送Java代碼

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

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

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

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

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

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

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

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

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

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

    升級(jí)IDEA后Lombok不能使用的解決方法

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

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

    Java使用SAX解析xml的示例

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

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

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

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

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 男女肉文高h | 国产图片综合区 | 99午夜高清在线视频在观看 | 国产卡一卡二卡3卡乱码免费 | 四虎在线最新地址公告 | 成成人看片在线 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 亚洲v成人天堂影视 | 三级黄色片在线观看 | 久久这里只有精品国产精品99 | 亚洲一区二区三区不卡在线播放 | 操比图片 | 荡女淫春2古装 | 全日爱韩国视频在线观看 | 欧美日韩一本 | 精品日本一区二区 | 男人把大ji巴放进男人免费视频 | 晓雪老师我要进你里面好爽 | 吉泽明步高清无码中文 | 国产日韩欧美在线一二三四 | 成人午夜视频一区二区国语 | 男人搡女人视频免费看 | 无码AV熟妇素人内射V在线 | 大象视频污 | chinese男同志videos | 特级夫妻大片免费在线播放 | 日韩资源 | 日本午夜小视频 | 99久久精品国产免费 | 丝袜捆绑调教视频免费区 | 久久中文字幕乱码免费 | 3d动漫免费 | 亚洲免费在线观看 | 男人的j进入女人的j免费 | 日本视频免费在线播放 | 日本无卡码一区二区三区 | 日韩美女强理论片 | 99re热 | 免费高清视频日本 | 桃色公寓 | bbox撕裂bass孕妇|