級聯(lián)關系實現(xiàn)的方式
一對一
一對多
案例實操
一對一關系
實現(xiàn)方式 resultType/resultMap
接口方法
/**
?
* 一對一關聯(lián)查詢 resultType
?
* @param userId
?
* @return
?
*/
?
UserDtoqueryUserCardInfoForResultType(@Param("userId")intuserId);
sql 查詢
<selectid="queryUserCardInfoForResultType"resultType="userDto">
?? SELECT
? ? ? ? u.id,
? ? ? ? u.user_name AS userName,
? ? ? ? u.user_pwd AS userPwd,
? ? ? ? u.flag,
? ? ? ? u.cid,
? ? ? ? c.number
? ? FROM
? ? ? ? USER u
? ? LEFT JOIN card c ON u.cid = c.id
? ? WHERE
? ? ? ? u.id = #{userId}
</select>
resultType 實現(xiàn)
<selectid="queryUserByIdResultType"parameterType="int"resultType="com.xxx.dto.UserDto">
? ? SELECT
? ? ? ? u.id,
? ? ? ? u.user_name AS userName,
? ? ? ? u.create_time,
? ? ? ? u.flag,
? ? ? ? u.cid AS cid,
? ? ? ? c.number
? ? FROM
? ? ? ? User u
? ? ? ? LEFT JOIN card c u ON u.cid =c.id
? ? WHERE
? ? ? ? u.id = #{id}
</select>
resultMap 實現(xiàn)
<!--自定義映射關系實現(xiàn)關聯(lián)? -->
<resultMapid="baseUser"type="com.xxx.mybatis.pojo.User">
<idcolumn="id"property="id"/><!-- 主鍵 -->
<!-- 普通例 -->
<resultcolumn="user_name"property="userName"/>
<resultcolumn="true_name"property="trueName"/>
<resultcolumn="role_name"property="roleName"/>
</resultMap>
<selectid="queryUserInfoByIdV2"parameterType="int"resultMap="baseUser">
?? SELECT u.id,u.user_name,u.true_name,l.role_name ? ?
?? FROM t_user u JOIN t_user_role r
?? ON (u.id = r.user_id) JOIN t_role l
?? on (r.role_id = l.id)
?? WHERE u.id? =? #{id}
</select>
resultMap + association實現(xiàn)
resultMap 映射定義
<resultMapid="baseUserRole"type="userRole">
<idcolumn="id"property="id"></id>
<resultcolumn="role_id"property="roleId"></result>
<associationproperty="role"column="role_id"select="queryRoleById"/>
</resultMap>
?
<resultMapid="baseRole"type="role">
<idcolumn="id"property="id"></id>
<resultcolumn="role_name"property="roleName"/>
<resultcolumn="role_remark"property="roleRemark"/>
</resultMap>
查詢
<selectid="queryUserRoleInfoById"parameterType="int"resultMap="baseUserRole">
?? SELECT? id, role_id ? FROM? t_user_role WHERE? id = #{id}
</select>
?
<selectid="queryRoleById"parameterType="int"resultMap="baseRole">
?? SELECT? id, role_name , role_remark? FROM t_role WHERE? id = #{role_id}
</select>
一對多關系
實現(xiàn)方式:resultMap 實現(xiàn)
resultType 有局限飘哨,無法去重绸吸,需手動處理。
ResultMap 定義
<resultMapid="baseGoods"type="goods">
<idcolumn="id"property="id"/>
<resultcolumn="name"property="goodsName"/>
<resultcolumn="promotePrice"property="price"/>
<collectionproperty="ixxxs"column="id"select="queryGoodsIxxxsById"/>
</resultMap>
?
<resultMapid="baseGoodsImnage"type="GoodsIxxxs">
<idcolumn="id"property="id"></id>
<resultcolumn="goods_skuid"property="goodsSkuid"></result>
<resultcolumn="goods_img"property="ixxxUrl"></result>
</resultMap>
查詢
<selectid="queryGoodsById"parameterType="int"resultMap="baseGoods"useCache="true">
?? select? id, name , promotePrice FROM yg_goods WHERE id = #{id}
</select>
?
<selectid="queryGoodsIxxxsById"parameterType="int"resultMap="baseGoodsImnage"useCache="true">
?? SELECT id , goods_skuid , goods_img? FROM yg_goods_imgage where goods_skuid = #{id}
</select>
擴展
sql
sql 元素用來定義一個可以復用的 SQL 語句段习霹,供其它語句調用。比如:
<sqlid="User_columns">userId, userName, password</sql>
<!--用include 引用-->
<selectid="findUserById"resultMap="RM_User">
select<includerefid="User_columns"/>
?? from user where userId = #{userId}
</select>
###