mybatis 一對多 id標籤做用

一對多數據庫

MyBatis的resultMap只用於配置結果如何映射,id的惟一做用就是在嵌套的映射配置時判斷數據是否相同,當配置id標籤時,MyBatis只須要逐條比較全部數據中id標籤字段值是否相同便可,能夠提升處理效率。
爲了更清楚地理解id 的做用,能夠臨時對userMap 的映射進行以下修改。
<resultMap id="userMap" type="test.mybatis.simple.model.SysUser">
<id property="userPassword" column="user_password"/>
<result property="userName" column="user_name"></result>
<result property="id" column="id"></result>
<result property="userEmail" column="user_email"></result>
<result property="userInfo" column="user_info"></result>
<result property="headImg" column="head_img" jdbcType="BLOB"></result>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"></result>
</resultMap>
<resultMap id="userRoleListMap" extends="userMap" type="SysUser">
<collection property="roleList" columnPrefix="role_" resultMap="test.mybatis.simple.mapper.RoleMapper.roleMap"/>
</resultMap>
在測試數據中,用戶的密碼都是123456 ,所以若是用密碼做爲id,全部結果將合併爲1條數據。
用戶數: 1
用戶名:admin
角色名:管理員
角色名:普通用戶數據結構

對比以前的正確結果,能夠看到角色記錄也合併了
用戶數:2
用戶名:admin
角色名稱:管理員
角色名稱:普通用戶
用戶名:test
角色名稱:普通用戶mybatis

1、id標籤也能夠配置多個,好比聯合主鍵時
2、極可能也會出現沒有配置id的狀況,這時MyBatis就會把resultMap中全部字段進行比較,若是全部字段的值都相同就合併,只要有一個字段值不一樣,就不合並。這時,當結果集字段數爲M,記錄數N,最少M×N次比較,相比配置id時的N次比較,效率相差更多,因此要儘量配置id標籤。
3、在嵌套結果配置id屬性時若是查詢語句中沒有查詢id屬性配置的列,就會致使id對應的值爲null。這種狀況下,全部值的id都相同,所以會使嵌套的集合中只有一條數據。因此在配置id列時,查詢語句中必須包含該列。app


collection 支持的屬性以及屬性的做用和association 徹底相同。雖然association和collection標籤是分開介紹的,可是這二者能夠組合使用或者互相嵌套使用,也可使用符合本身須要的任何數據結構,不須要侷限於數據庫表之間的關聯關係。測試

相關文章
相關標籤/搜索