国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

使用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 子查詢)

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

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

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

@DisplayName('嵌套查詢和主查詢的表是同一個(gè)')@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工具,驗(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 > ?');}

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

如果嵌套查詢的不是同表一張表,需要在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工具,驗(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子查詢)

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

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

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

注:示例中的測試,是使用H2內(nèi)存數(shù)據(jù)庫,你可以直接運(yùn)行,不需要你額外建表。但使用Test4J執(zhí)行測試,你需要在加入vm參數(shù):-javaagent:/這里是你本地maven倉庫地址/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)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 97免费公开视频 | 亚洲美女视频网 | 99在线视频免费观看 | 日韩女人做爰大片 | 久草中文网 | 88av视频 | 久久久夜间小视频 | 亚洲精品一 | 老司机亚洲精品 | pgone太大了兽王免费视频 | 国产精品三级一区二区 | 国产亚洲欧美日韩国产片 | 日本暖暖在线视频 | 中文国产成人精品久久水 | 在线国产二区 | 能在线观看的一区二区三区 | 免费特黄一级欧美大片在线看 | 中文国产成人精品久久一区 | 一本大道香蕉久在线不卡视频 | 国产边打电话边做对白刺激 | 美女被cao免费看在线看网站 | 免费看美女午夜大片 | 日韩欧美一区二区三区免费观看 | 国产精品成人观看视频免费 | 国产精品一区二区三区四区五区 | 成年大片免费视频播放手机不卡 | 免费一区二区 | 国产精品久久久99 | 国产欧美日本在线 | 国产老妇k| 亚洲天堂视频网站 | 在线观看a网站 | 美女一级毛片视频 | aaaaaa毛片免费看 | 亚洲精品一区二区三区五区 | 国产精品日本 | 久国产精品视频 | 日韩在线免费 | 91欧美在线视频 | 91成人免费视频 | 免费看亚洲 |