目前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