最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年08月04日 15:49:34   作者:tryternity  
本文主要介紹了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語法

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ù)。

@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語句
    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類型, 后面用法同方法一。

@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語句
    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。

具體示例

@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語句
    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ù)庫,你可以直接運(yùn)行,不需要你額外建表。
但使用Test4J執(zhí)行測(cè)試,你需要在加入vm參數(shù):-javaagent:/這里是你本地maven倉庫地址/org/jmockit/jmockit/1.48/jmockit-1.48.jar

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

在這里插入圖片描述

Fluent Mybatis文檔&示例

Fluent Mybatis源碼, github

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

相關(guān)文章

  • MyBatis-Plus結(jié)合Layui實(shí)現(xiàn)分頁方法

    MyBatis-Plus結(jié)合Layui實(shí)現(xiàn)分頁方法

    MyBatis-Plus 使用簡(jiǎn)單,本文主要介紹使用 service 中的 page 方法結(jié)合 Layui 前端框架實(shí)現(xiàn)分頁效果,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-08-08
  • java 實(shí)現(xiàn)websocket的兩種方式實(shí)例詳解

    java 實(shí)現(xiàn)websocket的兩種方式實(shí)例詳解

    這篇文章主要介紹了java 實(shí)現(xiàn)websocket的兩種方式實(shí)例詳解,一種使用tomcat的websocket實(shí)現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • Java面試最容易被刷的重難點(diǎn)之鎖的使用策略

    Java面試最容易被刷的重難點(diǎn)之鎖的使用策略

    鎖像synchronized同步塊一樣,是一種線程同步機(jī)制,但比Java中的synchronized同步塊更復(fù)雜。因?yàn)殒i(以及其它更高級(jí)的線程同步機(jī)制)是由synchronized同步塊的方式實(shí)現(xiàn)的,所以我們還不能完全擺脫synchronized關(guān)鍵字
    2021-10-10
  • Spring Boot 使用Druid詳解

    Spring Boot 使用Druid詳解

    本篇文章主要介紹了Spring Boot 使用Druid配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • java控制臺(tái)實(shí)現(xiàn)拼圖游戲

    java控制臺(tái)實(shí)現(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了java控制臺(tái)實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java 3D入門之基本圖形功能 附源碼

    Java 3D入門之基本圖形功能 附源碼

    Java3D API是Sun定義的用于實(shí)現(xiàn)3D顯示的接口。3D技術(shù)是底層的顯示技術(shù),Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術(shù)包裝在Java接口中。這種全新的設(shè)計(jì)使3D技術(shù)變得不再繁瑣且可以加入到J2SE、J2EE的整套架構(gòu),故保證了Java3D技術(shù)強(qiáng)大的擴(kuò)展性
    2021-10-10
  • Java控制臺(tái)版五子棋的簡(jiǎn)單實(shí)現(xiàn)方法

    Java控制臺(tái)版五子棋的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java控制臺(tái)版五子棋的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 解決Mybatis的@Param()注解導(dǎo)致分頁失效的問題

    解決Mybatis的@Param()注解導(dǎo)致分頁失效的問題

    這篇文章主要介紹了解決Mybatis的@Param()注解導(dǎo)致分頁失效的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • java?zxing合成復(fù)雜二維碼圖片示例詳解

    java?zxing合成復(fù)雜二維碼圖片示例詳解

    這篇文章主要為大家介紹了java?zxing合成復(fù)雜二維碼圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java實(shí)現(xiàn)TCP和UDP協(xié)議詳解

    Java實(shí)現(xiàn)TCP和UDP協(xié)議詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)TCP和UDP協(xié)議詳解,TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)是兩種最常用的傳輸層協(xié)議,它們都用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù),但是它們之間有很多不同之處,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

永年县| 宝坻区| 竹溪县| 崇信县| 洞口县| 朝阳区| 佛山市| 禄丰县| 亚东县| 五台县| 红原县| 西丰县| 耒阳市| 稻城县| 高碑店市| 白朗县| 吕梁市| 东台市| 安康市| 阳山县| 鄯善县| 日喀则市| 阳江市| 个旧市| 嵊州市| 闻喜县| 定州市| 苗栗市| 大邑县| 梓潼县| 壤塘县| 逊克县| 府谷县| 垦利县| 河间市| 安宁市| 抚远县| 和田市| 灌南县| 海淀区| 北碚区|