github链接:https://github.com/AbitGo/mybatis_csdn/tree/master/workspace_mybatis_0x02
如下的resulttype的实现方式:
<select id="selectUserAndRoleById" resultType="com.mybatis.chapter3.SysUser">
select u.id,
u.user_name userName,
u.user_password userPassword,
u.user_email userEmail,
u.user_info userInfo,
u.head_img headImg,
u.create_time create_time,
<!--内部类的写法-->
r.id "role.id",
r.role_name "role.roleName",
r.enabled "role.enabled",
r.create_time "role.create_time",
r.create_by "role.create_by"
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{id}
</select>
在resultmap的实现中则需要这样
<select id="selectUserAndRoleById2" resultMap="userRoleMap">
select u.id,
u.user_name,
u.user_password,
u.user_email,
u.user_info,
u.head_img,
u.create_time,
<!--内部类的写法-->
r.id role_id,
r.role_name role_Name,
r.enabled role_enabled,
r.create_time role_create_time,
r.create_by role_create_by
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{id}
</select>
<resultMap id="userRoleMap" type="com.mybatis.chapter3.SysUser">
<id property="id" column="id"/>
<result property="userName" column = "user_name"/>
<result property="userPassword" column = "user_password"/>
<result property="userEmail" column = "user_email"/>
<result property="userInfo" column = "user_info"/>
<result property="headImg" column = "head_img" jdbcType="BLOB"/>
<result property="create_time" column = "create_time" jdbcType="TIMESTAMP"/>
<!--相关属性-->
<result property="role.id" column = "role_id"/>
<result property="role.role_Name" column = "role_Name"/>
<result property="role.enabled" column = "role_enabled"/>
<result property="role.create_by" column = "role_create_by"/>
<result property="role.create_time" column = "role_create_time" jdbcType="TIMESTAMP"/>
</resultMap>
程序员还是懒得嘛,并且MyBatis也是支持resultMap映射继承的。所以演化成下面的xml。
<select id="selectUserAndRoleById2" resultMap="userRoleMap">
select u.id,
u.user_name,
u.user_password,
u.user_email,
u.user_info,
u.head_img,
u.create_time,
<!--内部类的写法-->
r.id role_id,
r.role_name role_Name,
r.enabled role_enabled,
r.create_time role_create_time,
r.create_by role_create_by
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{id}
</select>
<resultMap id="userMap" type="com.mybatis.chapter3.SysUser">
<id property="userName" column="user_name"/>
<result property="userName" column = "user_name"/>
<result property="userPassword" column = "user_password"/>
<result property="userEmail" column = "user_email"/>
<result property="userInfo" column = "user_info"/>
<result property="headImg" column = "head_img" jdbcType="BLOB"/>
<result property="create_time" column = "create_time" jdbcType="TIMESTAMP"/>
</resultMap>
<resultMap id="userRoleMap" extends="userMap" type="com.mybatis.chapter3.SysUser">
<result property="role.id" column = "role_id"/>
<result property="role.role_Name" column = "role_Name"/>
<result property="role.enabled" column = "role_enabled"/>
<result property="role.create_by" column = "role_create_by"/>
<result property="role.create_time" column = "role_create_time" jdbcType="TIMESTAMP"/>
</resultMap>
再往后,程序员还是觉得麻烦,就这样写
<select id="selectUserAndRoleById2" resultMap="userRoleMap">
select u.id,
u.user_name,
u.user_password,
u.user_email,
u.user_info,
u.head_img,
u.create_time,
<!--内部类的写法-->
r.id role_id,
r.role_name role_Name,
r.enabled role_enabled,
r.create_time role_create_time,
r.create_by role_create_by
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{id}
</select>
<resultMap id="userMap" type="com.mybatis.chapter3.SysUser">
<id property="userName" column="user_name"/>
<result property="userName" column = "user_name"/>
<result property="userPassword" column = "user_password"/>
<result property="userEmail" column = "user_email"/>
<result property="userInfo" column = "user_info"/>
<result property="headImg" column = "head_img" jdbcType="BLOB"/>
<result property="create_time" column = "create_time" jdbcType="TIMESTAMP"/>
</resultMap>
<resultMap id="userRoleMap" extends="userMap" type="com.mybatis.chapter3.SysUser">
<!--使用association标签-->
<association property="role" columnPrefix="role_"
javaType="com.mybatis.chapter3.SysRole">
<result property="id" column = "id"/>
<result property="role_Name" column = "Name"/>
<result property="enabled" column = "enabled"/>
<result property="create_by" column = "create_by"/>
<result property="create_time" column = "create_time" jdbcType="TIMESTAMP"/>
</association>
最后,就发展成了这样子
<select id="selectUserAndRoleById2" resultMap="userRoleMap">
select u.id,
u.user_name,
u.user_password,
u.user_email,
u.user_info,
u.head_img,
u.create_time,
<!--内部类的写法-->
r.id role_id,
r.role_name role_role_Name,
r.enabled role_enabled,
r.create_time role_create_time,
r.create_by role_create_by
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{id}
</select>
<resultMap id="userMap" type="com.mybatis.chapter3.SysUser">
<id property="userName" column="user_name"/>
<result property="userName" column = "user_name"/>
<result property="userPassword" column = "user_password"/>
<result property="userEmail" column = "user_email"/>
<result property="userInfo" column = "user_info"/>
<result property="headImg" column = "head_img" jdbcType="BLOB"/>
<result property="create_time" column = "create_time" jdbcType="TIMESTAMP"/>
</resultMap>
<resultMap id="roleMap" type="com.mybatis.chapter3.SysRole">
<id property="id" column="id"/>
<result property="role_Name" column = "role_Name"/>
<result property="enabled" column = "enabled"/>
<result property="create_by" column = "create_by"/>
<result property="create_time" column = "create_time" jdbcType="TIMESTAMP"/>
</resultMap>
<resultMap id="userRoleMap" extends="userMap" type="com.mybatis.chapter3.SysUser">
<association property="role" columnPrefix="role_" resultMap="roleMap"/>
</resultMap>