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

Mybatis中一對多(collection)和一對一(association)的組合查詢使用

 更新時間:2023年12月27日 09:28:45   作者:huangyaa729  
這篇文章主要介紹了Mybatis中一對多(collection)和一對一(association)的組合查詢使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Collection

  • collection : 一個復(fù)雜的類型關(guān)聯(lián),許多結(jié)果將映射為這種類型
  • property : 這是關(guān)聯(lián)的 JavaBean 中的屬性名, 在 RoleModel 中對應(yīng) private List<MenuModel> menus;
  • javaType : property 屬性對應(yīng)的集合類型
  • ofType : property 集合中的泛型,即定義時泛型所表示的具體類型
  • column : RoleModel 的 id ,作為參數(shù)傳入被調(diào)用的 Select 語句

用法,嵌套在其他的查詢說sql中,寫法 主要以下3種:

第一種:select 語句在其他dao.java對應(yīng)的 mapper.xml中

   <collection property="tProductVideos" ofType="com.pasture.mpi.provider.biz.model.auto.TProductVideo"
                        column="product_id"
                        select="com.mpi.biz.dao.cust.ProductDao.getProductList">
    </collection>

第二種:select語句在同一個mapper.xml中

(與第一種的區(qū)別在于select屬性的值不一樣)

 .....
  <collection property="tProductVideos" ofType="com.pasture.mpi.provider.biz.model.auto.TProductVideo"
                            column="product_id"
                            select="getProductList">
   </collection>
   ......
<resultMap id="BaseProduct" type="com.mpi.biz.model.auto.TProduct">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="product_id" property="productId" jdbcType="INTEGER" />
        <result column="image_url" property="imageUrl" jdbcType="VARCHAR" />
        <result column="type" property="type" jdbcType="CHAR" />
    </resultMap>
    <select id="getProductImageList" resultMap="BaseProduct" parameterType="java.lang.Integer">
        SELECT i.id, i.product_id, i.image_url,i.type
        FROM t_product_image i
        WHERE i.product_id = #{productId}
    </select>

第三種,如果再一個查詢中可以直接查詢到所需要的數(shù)據(jù)

但是需要映射到該對象的屬性上,則可以使用該方式(建議使用上兩種,看起來更清晰):

<resultMap id="BaseRoleResultMap" type="cn.com.hellowood.springsecurity.model.RoleModel">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="is_active" property="isActive" jdbcType="BOOLEAN"/>
        <result column="description" property="description" jdbcType="VARCHAR"/>
        <result column="last_update_time" property="lastUpdateTime" jdbcType="TIMESTAMP"/>
        <collection property="menus" ofType="com.pasture.mpi.provider.biz.model.auto.TProductVideo"
                    javaType="java.util.ArrayList">
               <id column="id" property="id" jdbcType="INTEGER" />
            <result column="product_id" property="productId" jdbcType="INTEGER" />
            <result column="image_url" property="imageUrl" jdbcType="VARCHAR" />
            <result column="type" property="type" jdbcType="CHAR" />
        </collection>
    </resultMap>

<select id="getRoles" parameterType="java.lang.Integer" resultMap="BaseRoleResultMap">
    SELECT
        r.id,
        r.name,
        r.description,
        r.is_active,
        r.last_update_time,
        m.id,
        m.value,
        m.display_value,
        m.url,
        m.category,
        m.description,
        m.is_active,
        m.last_update_time
    FROM table1  r
        LEFT JOIN t_product p
            ON r.id = p.r_id
    WHERE r.id = #{roleId,jdbcType=INTEGER}
</select>

association總結(jié)

主要用到的屬性:

  • property:映射數(shù)據(jù)庫列的字段或?qū)傩浴?/li>
  • column:數(shù)據(jù)庫的列名或者列標簽別名。與傳遞給resultSet.getString(columnName)的參數(shù)名稱相同。
  • javaType:完整java類名或別名(參考上面的內(nèi)置別名列表)。如果映射到一個JavaBean,那MyBatis 通常會自行檢測到。然而,如果映射到一個HashMap,那您應(yīng)該明確指定javaType 來確保所需行為。
  • resultMap:一個可以映射聯(lián)合嵌套結(jié)果集到一個適合的對象視圖上的ResultMap。這是一個替代的方式去調(diào)用另一個select語句。

association查詢與主查詢一般寫在一個文件中,如下:

第一種:不另外寫查詢語句

(1)把返回的屬性提取出來

<association property="product" resultMap="ResultMapWithBLOBs"/>

(2)糅合在一起

  <association property="category" javaType="com.provider.biz.model.auto.TCategory">
            <id column="category_id" property="categoryId" jdbcType="INTEGER"/>
            <result column="c_name" property="name" jdbcType="VARCHAR"/>
            <result column="image_url" property="imageUrl" jdbcType="VARCHAR"/>
            <result column="c_status" property="status" jdbcType="CHAR"/>
  </association>

第二種:另外寫查詢語句

<resultMap id="testMap"  type="xxx" >
        <id property="id" column="id" jdbcType="DECIMAL" />
        <result property="startDateStr" column="startDateStr"  jdbcType="VARCHAR" />
        <result property="endDateStr" column="endDateStr"  jdbcType="VARCHAR" />
        <association property="tableEntity" column="table_a_id" select="selectById"></association>
</resultMap>

<select id="selectById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select * from Table_XXX
where a_id=#{aId}  (注:這里的aId即為上述傳的參數(shù)值table_a_id,只傳一個參數(shù)時名稱可以不一樣)
</select>

第三種:與collection一樣

提到外面其他的dao接口中,此處省略…

補充:

association的使用要特別注意下,數(shù)據(jù)映射時會出現(xiàn)異常,再一次的項目中就出現(xiàn)過實際有5條數(shù)據(jù),但返回到service層時只有1條數(shù)據(jù),這一條數(shù)據(jù)各個部分的信息還不對應(yīng),通過打印mysql執(zhí)行語句和逐條排查,發(fā)現(xiàn)是association標簽的問題;

切記,association使用時<resultMap id="testMap"  type="xxx" >中一定要有 <id>標簽,否則會出現(xiàn)返回的數(shù)據(jù)與實際查詢結(jié)果不一致的問題

多參數(shù)傳遞

當(dāng)需要傳遞多個值時,寫法如下:

column= “{prop1=col1,prop2=col2}

接收的類型為 parameterType=“java.util.Map”,這里的參數(shù)使用時名稱要保持一致;

例:

   <resultMap id="testMap"  type="xxx" >
        <id property="id" column="id" jdbcType="DECIMAL" />
        <result property="startDateStr" column="startDateStr"  jdbcType="VARCHAR" />
        <result property="endDateStr" column="endDateStr"  jdbcType="VARCHAR" />
        <association property="tableEntity" column="{reqId=id,endDate=endDateStr,startDate=startDateStr}" select="selectById">                     </association>
</resultMap>

<select id="selectById" parameterType="java.util.Map" resultMap="BaseResultMap">

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring + mybatis + mysql使用事物的幾種方法總結(jié)

    Spring + mybatis + mysql使用事物的幾種方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Spring + mybatis + mysql使用事物的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • Springboot 整合shiro實現(xiàn)權(quán)限控制的方法

    Springboot 整合shiro實現(xiàn)權(quán)限控制的方法

    這篇文章主要介紹了Springboot 整合shiro實現(xiàn)權(quán)限控制的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java處理時間格式CST和GMT轉(zhuǎn)換方法示例

    Java處理時間格式CST和GMT轉(zhuǎn)換方法示例

    這篇文章主要給大家介紹了關(guān)于Java處理時間格式CST和GMT轉(zhuǎn)換方法的相關(guān)資料,相信很多小伙伴在時間格式轉(zhuǎn)換的時候非常頭疼,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • java中如何判斷JSONObject是否存在某個Key

    java中如何判斷JSONObject是否存在某個Key

    這篇文章主要介紹了java中如何判斷JSONObject是否存在某個Key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java數(shù)組排列組合問題匯總

    java數(shù)組排列組合問題匯總

    這篇文章主要為大家詳細匯總了java數(shù)組排列組合問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • eclipse里沒有“Dynamic Web Project“這個選項的問題解決

    eclipse里沒有“Dynamic Web Project“這個選項的問題解決

    本文主要介紹了eclipse里沒有“Dynamic Web Project“這個選項的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java過濾器Filter詳解

    Java過濾器Filter詳解

    這篇文章主要介紹了java過濾器中Filter,發(fā)送請求時,如果有不符合的信息將會被filter進行攔截,如果符合則會進行放行。如果感興趣可以來學(xué)習(xí)一下
    2021-08-08
  • jvm垃圾回收GC調(diào)優(yōu)基礎(chǔ)原理分析

    jvm垃圾回收GC調(diào)優(yōu)基礎(chǔ)原理分析

    談到調(diào)優(yōu),這一定是針對特定場景、特定目的的事情, 對于 GC 調(diào)優(yōu)來說,首先就需要清楚調(diào)優(yōu)的目標是什么?從性能的角度看,通常關(guān)注三個方面,內(nèi)存占用(footprint)、延時(latency)和吞吐量(throughput)
    2022-01-01
  • java注解處理器學(xué)習(xí)在編譯期修改語法樹教程

    java注解處理器學(xué)習(xí)在編譯期修改語法樹教程

    這篇文章主要為大家介紹了java注解處理器學(xué)習(xí)在編譯期修改語法樹教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 對SpringBoot項目Jar包進行加密防止反編譯

    對SpringBoot項目Jar包進行加密防止反編譯

    最近項目要求部署到其他公司的服務(wù)器上,但是又不想將源碼泄露出去,要求對正式環(huán)境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來,本文介紹了如何對SpringBoot項目Jar包進行加密防止反編譯,需要的朋友可以參考下
    2023-10-10

最新評論