最開始寫代碼的時候我很苦惱,對於一個對象中含有另一個對象,每次從數據庫拿到數據后都映射不過來,后來仔細學明白了做個匯總
public class SysUser implements Serializable { private static final long serialVersionUID = 3529219554011221820L; Integer id ; String userName ; String userId ; String userPassword ; String token ; SysRole sysRole ; }
第一種映射方法,直接映射過去,缺點是,如果role是lsit集合,那么這個方法就不太行了,需要用到下一種方法
<select id="selectUserAndRoleByUserName1" resultType="library.system.dto.SysUser"> select su.user_id , su.user_name , su.user_password , sr.id as "sysRole.id" , sr.role_name as "sysRole.roleName" , sr.role as "sysRole.role" from sys_user su inner join sys_user_role sur on su.user_id = sur.user_id inner join sys_role sr on sur.role_id = sr.id where su.user_name = #{userName} </select>
第二種,通過resultMap映射過去:
resultMap id="userMap" type="library.system.dto.SysUser"> <result property="id" column="id"/> <result property="userName" column="user_name"/> <result property="userId" column="user_id"/> <result property="userPassword" column="user_password"/> </resultMap> <resultMap id="userMap1" extends="userMap" type="library.system.dto.SysUser"> <collection property="sysRole" ofType="library.system.dto.SysRole"> <result property="id" column="id"/> <result property="roleName" column="role_name"/> <result property="role" column="role"/> </collection> </resultMap> <select id="selectUserAndRoleByUserName" resultMap="userMap1"> select su.user_id , su.user_name , su.user_password , sr.id , sr.role_name , sr.role from sys_user su inner join sys_user_role sur on su.user_id = sur.user_id inner join sys_role sr on sur.role_id = sr.id where su.user_name = #{userName} </select>
這樣一來,就能成功拿到role中數據了。
至此,結束。
