亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用mybatis對collection進行嵌套時出現報錯如何解決

發布時間:2020-12-01 14:58:50 來源:億速云 閱讀:641 作者:Leah 欄目:開發技術

利用mybatis對collection進行嵌套時出現報錯如何解決?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

<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 源碼發現里面有一個常量是

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;
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

益阳市| 赤峰市| 铜梁县| 辽宁省| 和林格尔县| 庆元县| 东源县| 弋阳县| 沙田区| 营山县| 锡林浩特市| 广德县| 古浪县| 南丰县| 康马县| 苏尼特左旗| 冀州市| 巢湖市| 乐业县| 安图县| 溧水县| 庆云县| 北碚区| 广安市| 茶陵县| 云安县| 东兰县| 京山县| 英山县| 庐江县| 阿坝| 军事| 隆昌县| 肇东市| 浪卡子县| 常德市| 溧阳市| 吴忠市| 息烽县| 海林市| 丹棱县|