欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis分步查詢的實(shí)現(xiàn)示例

 更新時(shí)間:2023年07月09日 16:26:03   作者:java_t_t  
本文主要介紹了Mybatis分步查詢的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們需要查詢的數(shù)據(jù)分布在多個(gè)表中時(shí),我們可以采用聯(lián)表,但有時(shí)候聯(lián)表語句比較復(fù)雜,或者聯(lián)表后的數(shù)據(jù)集太大,不但性能上可能會(huì)有問題,維護(hù)起來也很麻煩。

Mybatis提供了分步查詢的功能。分步查詢可以將復(fù)雜的聯(lián)表查詢分解成多個(gè)單表(或多個(gè)簡(jiǎn)單的聯(lián)表)查詢,維護(hù)起來更容易,還可以實(shí)現(xiàn)延遲加載,節(jié)省資源。

Mybatis的分步查詢的分步執(zhí)行流程是:執(zhí)行上層的查詢語句,如果有n條數(shù)據(jù)數(shù)據(jù),m個(gè)分步查詢,則分n次依次執(zhí)行這m個(gè)分步查詢語句,也就是總共執(zhí)行n × m個(gè)分步查詢語句;如果某個(gè)分步查詢語句也有自身的分步查詢,則先執(zhí)行完自身的分步查詢?cè)賵?zhí)行下一個(gè)分步查詢,也就是采用深度遞歸的方式執(zhí)行。

代碼:

分步查詢典型用法:

最上層的查詢:

? ? <select id="listClassInfos" resultMap="listClassInfosMap">
? ? ? ? SELECT `id`, `name` FROM `class_info` WHERE NAME LIKE CONCAT('%', #{name}, '%') LIMIT #{pageStart}, #{pageSize}
? ? </select>
? ? <resultMap id="listClassInfosMap" type="com.example.study.vo.ClassInfoVo">
? ? ? ? <id column="id" property="id" jdbcType="INTEGER" javaType="java.lang.Integer"/>
? ? ? ? <result column="name" property="name" jdbcType="VARCHAR" javaType="java.lang.String"/>
? ? ? ? <!-- 分步查詢1:select可以引用其它Mapper已有的查詢語句,需要寫全路徑 -->
? ? ? ? <association property="master" column="{classId = id}"
? ? ? ? ? ? ? ? ? ? ?select="com.example.study.mapper.ClassMasterInfoMapper.getMasterByClassId"/>
? ? ? ? <!-- 分步查詢2:select也可以引用本Mapper的查詢語句,不需要寫全路徑 -->
? ? ? ? <collection property="students" column="{classId = id}" select="listStudentsByClassId"/>
? ? ? ? <!-- 以上兩個(gè)分步查詢都可以添加fetchType="lazy"配置,在該查詢中開啟延遲加載,否則為全局默認(rèn) -->
? ? </resultMap>
? ? <select id="listStudentsByClassId" resultType="com.example.study.entity.StudentInfoEntity">
? ? ? ? SELECT
? ? ? ? `id` as `id`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`,
? ? ? ? `class_id` as `classId`
? ? ? ? FROM `student_info`
? ? ? ? WHERE `class_id` = #{classId}
? ? </select>
ClassMasterInfoMapper.xml中的查詢:
? ? <select id="getMasterByClassId" resultMap="getMasterByClassIdMap">
? ? ? ? SELECT
? ? ? ? `id` as `id`,
? ? ? ? `class_id` as `classId`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`
? ? ? ? FROM `class_master_info`
? ? ? ? WHERE `class_id` = #{classId}
? ? </select>
? ? <resultMap id="getMasterByClassIdMap" type="com.example.study.entity.ClassMasterInfoEntity">
? ? ? ? <id column="id" property="id" jdbcType="INTEGER" javaType="java.lang.Integer"/>
? ? ? ? <result column="name" property="name" jdbcType="VARCHAR" javaType="java.lang.String"/>
? ? ? ? <result column="sex" property="sex" jdbcType="VARCHAR" javaType="java.lang.String"/>
? ? ? ? <!-- 分步查詢1:select可以引用其它Mapper已有的查詢語句,需要寫全路徑 -->
? ? ? ? <association property="self" column="{selfId = id}" select="self"/>
? ? </resultMap>
? ? <select id="self" resultType="com.example.study.entity.ClassMasterInfoEntity">
? ? ? ? SELECT
? ? ? ? `id` as `id`,
? ? ? ? `class_id` as `classId`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`
? ? ? ? FROM `class_master_info`
? ? ? ? WHERE `id` = #{selfId}
? ? </select>

當(dāng)最上層查詢到2條數(shù)據(jù)時(shí),sql執(zhí)行順序和內(nèi)容如下(從org.apache.ibatis.mapping.MappedStatement.getBoundSql(Object parameterObject方法打斷點(diǎn),執(zhí)行boundSql.getSql()獲得執(zhí)行的sql內(nèi)容):

# 第1個(gè)sql:查詢最上層的數(shù)據(jù),查到2條數(shù)據(jù)
SELECT `id`, `name` FROM `class_info` WHERE NAME LIKE CONCAT('%', ?, '%') LIMIT ?, ?
# 第2個(gè)sql:第1條數(shù)據(jù),第1個(gè)子查詢
SELECT
? ? ? ? `id` as `id`,
? ? ? ? `class_id` as `classId`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`
? ? ? ? FROM `class_master_info`
? ? ? ? WHERE `class_id` = ?
# 第3個(gè)sql:第1條數(shù)據(jù),第1個(gè)子查詢的第1個(gè)子查詢(只有一個(gè))
SELECT
? ? ? ? `id` as `id`,
? ? ? ? `class_id` as `classId`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`
? ? ? ? FROM `class_master_info`
? ? ? ? WHERE `id` = ?
# 第4個(gè)sql:第1條數(shù)據(jù),第2個(gè)子查詢
SELECT
? ? ? ? `id` as `id`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`,
? ? ? ? `class_id` as `classId`
? ? ? ? FROM `student_info`
? ? ? ? WHERE `class_id` = ?
# 第5個(gè)sql:第2條數(shù)據(jù),第1個(gè)子查詢
SELECT
? ? ? ? `id` as `id`,
? ? ? ? `class_id` as `classId`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`
? ? ? ? FROM `class_master_info`
? ? ? ? WHERE `class_id` = ?
# 第6個(gè)sql:第2條數(shù)據(jù),第1個(gè)子查詢的第1個(gè)子查詢(只有一個(gè))
SELECT
? ? ? ? `id` as `id`,
? ? ? ? `class_id` as `classId`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`
? ? ? ? FROM `class_master_info`
? ? ? ? WHERE `id` = ?
# 第7個(gè)sql:第2條數(shù)據(jù),第2個(gè)子查詢
SELECT
? ? ? ? `id` as `id`,
? ? ? ? `name` as `name`,
? ? ? ? `sex` as `sex`,
? ? ? ? `class_id` as `classId`
? ? ? ? FROM `student_info`
? ? ? ? WHERE `class_id` = ?

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

相關(guān)文章

  • Java中redisTemplate注入失敗NullPointerException異常問題解決

    Java中redisTemplate注入失敗NullPointerException異常問題解決

    這篇文章主要介紹了Java中redisTemplate注入失敗NullPointerException異常問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • Struts 2 數(shù)據(jù)校驗(yàn)功能及校驗(yàn)問題的解決方案

    Struts 2 數(shù)據(jù)校驗(yàn)功能及校驗(yàn)問題的解決方案

    這篇文章主要介紹了Struts 2 數(shù)據(jù)校驗(yàn)功能及校驗(yàn)問題的解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • java中Date日期類型的大小比較方式

    java中Date日期類型的大小比較方式

    這篇文章主要介紹了java中Date日期類型的大小比較方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot實(shí)現(xiàn)圖片識(shí)別文字的四種方式小結(jié)

    SpringBoot實(shí)現(xiàn)圖片識(shí)別文字的四種方式小結(jié)

    本文主要介紹了SpringBoot實(shí)現(xiàn)圖片識(shí)別文字的四種方式,包括Tess4J,百度智能云,阿里云,騰訊云這四種,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin

    Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin

    這篇文章主要為大家介紹了Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java8并發(fā)新特性CompletableFuture

    Java8并發(fā)新特性CompletableFuture

    這篇文章主要介紹了Java8并發(fā)新特性CompletableFuture,CompletableFuture針對(duì)Future接口做了改進(jìn),相比Callable/Runnable接口它支持多任務(wù)進(jìn)行鏈?zhǔn)秸{(diào)用、組合、多任務(wù)并發(fā)處理,下面文章更多相關(guān)內(nèi)容得介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Java之Spring簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象

    Java之Spring簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象

    這篇文章主要介紹了Spring的讀取和存儲(chǔ)對(duì)象,獲取 bean 對(duì)象也叫做對(duì)象裝配,是把對(duì)象取出來放到某個(gè)類中,有時(shí)候也叫對(duì)象注?,想進(jìn)一步了解的同學(xué)可以參考本文
    2023-04-04
  • Java+MySQL 圖書管理系統(tǒng)

    Java+MySQL 圖書管理系統(tǒng)

    這篇文章是BUFFER.pwn同學(xué)分享的基于Java與MySQL的圖書管理系統(tǒng),需要的朋友可以參考一下
    2021-04-04
  • kaptcha驗(yàn)證碼組件使用簡(jiǎn)介解析

    kaptcha驗(yàn)證碼組件使用簡(jiǎn)介解析

    這篇文章主要介紹了kaptcha驗(yàn)證碼組件使用簡(jiǎn)介解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • SpringBoot整合JPA框架實(shí)現(xiàn)過程講解

    SpringBoot整合JPA框架實(shí)現(xiàn)過程講解

    在開發(fā)中,我們通常會(huì)對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行操作,Sprirng?Boot對(duì)關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的訪問操作都提供了非常好的整合支持
    2022-12-12

最新評(píng)論