mybatis中实体对象映射方法
最开始写代码的时候我很苦恼,对于一个对象中含有另一个对象,每次从数据库拿到数据后都映射不过来,后来仔细学明白了做个汇总
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中数据了。
至此,结束。