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

解決mybatis 中collection嵌套collection引發(fā)的bug

 更新時間:2020年12月01日 11:57:31   作者:AndyMocan  
這篇文章主要介紹了解決mybatis 中collection嵌套collection引發(fā)的bug,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

<resultMap id="ParentMap" type="org.example.mybatis.Parent">
  <id column="Id" jdbcType="VARCHAR" property="id" />
  <result column="Name" jdbcType="VARCHAR" property="name" />
  <result column="SurName" jdbcType="VARCHAR" property="surName" />
 
  <collection property="children"
    javaType="ArrayList" ofType="org.example.mybatis.Child"
    resultMap="ChildMap" columnPrefix="c_"/>  
  
</resultMap>
 
<resultMap id="ChildMap" type="org.example.mybatis.Child">
  <id column="Id" jdbcType="VARCHAR" property="id" />
  <result column="ParentId" jdbcType="VARCHAR" property="parentId" />
  <result column="Name" jdbcType="VARCHAR" property="name" />
  <result column="SurName" jdbcType="VARCHAR" property="surName" />
  <result column="Age" jdbcType="INTEGER" property="age" />
 
  <collection property="toys"
    javaType="ArrayList" ofType="org.example.mybatis.Toy"
    resultMap="ToyMap" columnPrefix="t_"/>  
 
</resultMap>
 
<resultMap id="ToyMap" type="org.example.mybatis.Toy">
  <id column="Id" jdbcType="VARCHAR" property="id" />
  <result column="ChildId" jdbcType="VARCHAR" property="childId" />
  <result column="Name" jdbcType="VARCHAR" property="name" />
  <result column="Color" jdbcType="VARCHAR" property="color" />
</resultMap>
 
<sql id="Parent_Column_List">
  p.Id, p.Name, p.SurName,
</sql> 
 
<sql id="Child_Column_List">
  c.Id as c_Id, c.ParentId as c_ParentId, c.Name as c_Name, c.SurName as c_Surname, c.Age as c_Age,
</sql>
 
<sql id="Toy_Column_List">
  t.Id as t_Id, t.Name as t_Name, t.Color as t_Color
</sql> 
 
<select id="getParent" parameterType="java.lang.String" resultMap="ParentMap" >
  select 
  <include refid="Parent_Column_List"/>
  <include refid="Child_Column_List" />
  <include refid="Toy_Column_List" />
  from Parent p
 
  left outer join Child c on p.Id = c.ParentId
  left outer join Toy t on c.Id = t.ChildId
  where p.id = #{id,jdbcType=VARCHAR}
</select>

表面來看沒有任何問題 實際 查詢的child對象中的toys一直是空

類關系介紹:

Parent類有屬性ArrayList<Child> children

Child類有屬性ArrayList<Toy> toys

Toy是一個普通的類

原因在于:

<collection property="toys"
    javaType="ArrayList" ofType="org.example.mybatis.Toy"
    resultMap="ToyMap" columnPrefix="t_"/>  

columnPrefix配置的是t_實際mybatis處理后是 c_t_

解決辦法:

只需要修改 sql 修改前綴為 c_t_ 即可

<sql id="Toy_Column_List">
  t.Id as c_t_Id, t.Name as c_t_Name, t.Color as c_t_Color
</sql> 

補充知識:mybatis 嵌套的結果集不能被安全的轉為自定義ResultHandler 的解決辦法

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Mapped Statements with nested result mappings cannot be safely used with a custom ResultHandler. Use safeResultHandlerEnabled=false setting to bypass this check.

問題描述

session.select("dao.ArticleMapper.selectAll", null, new RowBounds(1, 2),resultHandler);

會報不安全, 查詢Configuration 源碼發(fā)現(xiàn)里面有一個常量是

public Configuration() {
  this.safeRowBoundsEnabled = false;
  this.safeResultHandlerEnabled = true;//意思是不允許自定義ResultHand 處理器, 
  this.mapUnderscoreToCamelCase = false;
  this.aggressiveLazyLoading = true;

解決辦法

  public static SqlSession getsqlSession(){
  SqlSession session = sqlSessionFactory.openSession(ExecutorType.REUSE);
  Configuration configuration = session.getConfiguration(); //反射得到configuration ,然后
  configuration.setSafeResultHandlerEnabled(false); // 設置為false
  return session;
}

這樣就可以了。

以上這篇解決mybatis 中collection嵌套collection引發(fā)的bug就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Flutter驗證碼輸入框的2種方法實現(xiàn)

    Flutter驗證碼輸入框的2種方法實現(xiàn)

    本文主要介紹了Flutter驗證碼輸入框的2種方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • java查找圖中兩點之間所有路徑

    java查找圖中兩點之間所有路徑

    這篇文章主要為大家詳細介紹了java查找圖中兩點之間所有路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • java注解的類型知識點總結

    java注解的類型知識點總結

    在本篇文章里小編給大家整理了一篇關于java注解的類型知識點總結內(nèi)容,有興趣的朋友們可以學習下。
    2021-03-03
  • 使用spring?security?BCryptPasswordEncoder接入系統(tǒng)

    使用spring?security?BCryptPasswordEncoder接入系統(tǒng)

    這篇文章主要介紹了使用spring?security?BCryptPasswordEncoder接入系統(tǒng)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情

    SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情

    這篇文章主要介紹了SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • feign post參數(shù)對象不加@RequestBody的使用說明

    feign post參數(shù)對象不加@RequestBody的使用說明

    這篇文章主要介紹了feign post參數(shù)對象不加@RequestBody的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • IDEA之配置JDK、Git、Maven詳解

    IDEA之配置JDK、Git、Maven詳解

    文章總結:本文介紹了如何在IDEA中配置JDK、Git和Maven,包括設置Java編譯器路徑、配置Git版本控制、修改Maven根目錄以加快jar包下載速度,并提供了一個解決方案以確保配置在新項目中生效
    2025-01-01
  • Java基礎詳解之集合框架工具Collections

    Java基礎詳解之集合框架工具Collections

    這篇文章主要介紹了Java基礎詳解之集合框架工具Collections,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Java多線程事務管理的實現(xiàn)

    Java多線程事務管理的實現(xiàn)

    本文主要介紹了Java多線程事務管理的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Idea入門教程之一分鐘創(chuàng)建一個Java工程

    Idea入門教程之一分鐘創(chuàng)建一個Java工程

    idea作為Java開發(fā)最好用的編寫代碼軟件之一,首先進行的就是工程的創(chuàng)建,這篇文章主要給大家介紹了關于Idea入門教程之一分鐘創(chuàng)建一個Java工程的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-07-07

最新評論

博野县| 灵丘县| 洛扎县| 固安县| 青海省| 通州区| 横山县| 高安市| 凤山县| 麦盖提县| 封开县| 孟村| 凌海市| 兴文县| 巨鹿县| 中牟县| 宿松县| 石泉县| 思茅市| 内丘县| 常宁市| 会昌县| 类乌齐县| 长葛市| 大埔区| 普定县| 平江县| 镇宁| 喀喇沁旗| 中宁县| 绥中县| 凤台县| 阆中市| 琼结县| 芒康县| 遂溪县| 元阳县| 永靖县| 白玉县| 枝江市| 兴安县|