Mybaits一對多映射結果集丟失數據問題

        目前Java Web開發使用最多的項目架構仍是MVC,數據庫持久層使用通常會選擇用mybatis或者hibernate框架。對於mybatis和hibernate之間的區別你們自行百度,今天主要是記錄下最近使用mybatis開發遇到的一個問題。java

問題描述:A表和B表是一對多的關係,所以在查詢的時候使用了mybatis 的一對多結果集映射查詢,可是sql語句在庫中查出來是10條(分頁)數據,可是映射結果集後老是會少幾條數據,並且有時候少的條數據會不同(受查出的數據集影響)sql

問題還原:下面採用僞代碼模擬實際業務場景遇到的問題數據庫

@Bean
public class A{

    private String id;

    private String aname;
    
    private List<B> blist;

}


@Bean
public class B{

    private String id;

    private String bname;
    

}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="AMapper" >

  <resultMap id="BaseResultMap" type="A" >
      <result column="aname" property="aname" jdbcType="VARCHAR" />
      <collection property="blist" ofType="B">  
            <id column="sid" property="id"/>
            <result column="bname" property="bname"/>
       </collection>  
  </resultMap>

</mapper>

緣由分析:面對這個問題在仔細檢查了sql 語句後,肯定不是sql語句問題,是結果集映射致使的,因而檢查結果集映射代碼,發現結果集映射出了問題,沒有映射a表的主鍵致使數據集的合併,致使的數據丟失。(題外話:這個問題致使的主要緣由是我開發的時候表結構是沒有主鍵的,後來有由於業務的變化致使了表關係變化成一對多,表也加上了主鍵,可是結果集映射關係沒有及時更改致使映射數據丟失)        mybatis

相關文章
相關標籤/搜索