亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Fluent Mybatis零xml配置實現復雜嵌套查詢

瀏覽:3日期:2023-10-18 12:25:10
目錄嵌套查詢in (select 子查詢)exists (select子查詢)嵌套查詢

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

前置準備,maven工程設置

參考文章 使用FluentMybatis實現mybatis動態sql拼裝和fluent api語法

in (select 子查詢)

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

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

只需要在in里面引用一個lambda表達式,lambda表達式入參是一個同名的Query。對這個入參可以設置where參數。

@DisplayName('嵌套查詢和主查詢的表是同一個')@Testvoid 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類型, 后面用法同方法一。

@DisplayName('嵌套查詢和主查詢的表是不同')@Testvoid 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參數即可,參數用法同in方法。

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

具體示例

@DisplayName('EXISTS查詢')@Testvoid 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內存數據庫,你可以直接運行,不需要你額外建表。但使用Test4J執行測試,你需要在加入vm參數:-javaagent:/這里是你本地maven倉庫地址/org/jmockit/jmockit/1.48/jmockit-1.48.jar

以我本機為例,具體參數如圖:

Fluent Mybatis零xml配置實現復雜嵌套查詢

Fluent Mybatis文檔&示例

Fluent Mybatis源碼, github

到此這篇關于Fluent Mybatis零xml配置實現復雜嵌套查詢的文章就介紹到這了,更多相關Fluent Mybatis 復雜嵌套查詢內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 男人你懂的网站 | 在线观看网站黄 | 日韩欧美国产一区二区三区 | 五月婷婷六月合 | 欧美精品久久 | 久久99欧美 | 国产剧情精品在线观看 | 又爽又黄又无遮挡的视频美女软件 | 欧美伦理片在线播放 | 影音先锋日韩资源 | 国产精品永久免费自在线观看 | 日韩中文字幕在线观看 | 国产欧美精品午夜在线播放 | 嗯!啊!使劲用力在线观看 | 青草视频污 | 黄色片免费在线播放 | 久久国产精彩视频 | 九九精品免视看国产成人 | 国产美女视频一区二区二三区 | 久久国产亚洲观看 | 99久热只有精品视频免费观看17 | 欧美亚洲综合在线观看 | 国产精品第2页 | 国产精品爱久久久久久久三级 | 国产乳摇福利视频在线观看 | 免费视频精品一区二区三区 | 免费观看的成年网址 | 免费羞羞视频网站 | 欧美一级高清片免费一级 | 亚洲国产高清在线精品一区 | 国产国拍亚洲精品av | 成人av手机在线观看 | 麻豆视频免费观看入口 | 久久99国产综合色 | 免费网站观看 | 农村妇女野外牲交一级毛片 | 亚洲综合色就色手机在线观看 | 久久久久国产 | 免费xxxx18美国视频 | aaaaaa国产毛片孕妇版 | 99精品热视频这里只有精品7 |