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
角色名稱:普通用戶

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


collection 支持的屬性以及屬性的作用和association 完全相同。雖然association和collection標簽是分開介紹的,但是這兩者可以組合使用或者互相嵌套使用,也可以使用符合自己需要的任何數據結構,不需要局限於數據庫表之間的關聯關系。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM