你知道 Mybatis 框架如何實(shí)現(xiàn)級(jí)聯(lián)關(guān)系嗎?

級(jí)聯(lián)關(guān)系實(shí)現(xiàn)的方式

---------

*? 一對(duì)一


*? 一對(duì)多


案例實(shí)操

----

### 一對(duì)一關(guān)系

實(shí)現(xiàn)方式 resultType/resultMap

**接口方法**

/**

?

* 一對(duì)一關(guān)聯(lián)查詢 resultType

?

* @param userId

?

* @return

?

*/

?

UserDto queryUserCardInfoForResultType(@Param("userId")int userId);

**sql 查詢**

<select id="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 **實(shí)現(xiàn)**

<select id="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 實(shí)現(xiàn)

<!--自定義映射關(guān)系實(shí)現(xiàn)關(guān)聯(lián)? -->

<resultMap id="baseUser" type="com.xxx.mybatis.pojo.User">

<id column="id"? property="id" /> <!-- 主鍵 -->

<!-- 普通例 -->

<result column="user_name" property="userName" />

<result column="true_name" property="trueName" />

<result column="role_name" property="roleName"/>

</resultMap>

<select id="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實(shí)現(xiàn)

**resultMap** **映射定義**

<resultMap id="baseUserRole" type="userRole">

<id? column="id"? property="id"></id>

<result column="role_id"? property="roleId"></result>

<association property="role"? column="role_id" select="queryRoleById"/>

</resultMap>

?

<resultMap id="baseRole" type="role">

<id column="id" property="id"></id>

<result column="role_name" property="roleName"/>

<result column="role_remark" property="roleRemark"/>

</resultMap>

**查詢**

<select id="queryUserRoleInfoById" parameterType="int" resultMap="baseUserRole">

SELECT? id, role_id? FROM? t_user_role WHERE? id = #{id}

</select>

?

<select id="queryRoleById" parameterType="int"? resultMap="baseRole">

SELECT? id, role_name , role_remark? FROM t_role WHERE? id = #{role_id}

</select>

### 一對(duì)多關(guān)系

實(shí)現(xiàn)方式:resultMap 實(shí)現(xiàn)

resultType 有局限,無(wú)法去重,需手動(dòng)處理。

**ResultMap 定義**

<resultMap id="baseGoods" type="goods">

<id column="id" property="id"/>

<result column="name" property="goodsName"/>

<result column="promotePrice" property="price"/>

<collection property="ixxxs" column="id" select="queryGoodsIxxxsById"/>

</resultMap>

?

<resultMap id="baseGoodsImnage" type="GoodsIxxxs">

<id column="id" property="id"></id>

<result? column="goods_skuid" property="goodsSkuid" ></result>

<result? column="goods_img" property="ixxxUrl" ></result>

</resultMap>

查詢

<select id="queryGoodsById"? parameterType="int" resultMap="baseGoods" useCache="true">

select? id, name , promotePrice FROM yg_goods WHERE id = #{id}

</select>

?

<select id="queryGoodsIxxxsById" parameterType="int" resultMap="baseGoodsImnage" useCache="true">

SELECT id , goods_skuid , goods_img? FROM yg_goods_imgage where goods_skuid = #{id}

</select>

擴(kuò)展

--

### sql

sql 元素用來(lái)定義一個(gè)**可以復(fù)用的 SQL 語(yǔ)句段**,供其它語(yǔ)句調(diào)用。比如:

<sql id="User_columns">userId, userName, password</sql>

<!--用include 引用-->

<select id="findUserById" resultMap="RM_User" >

select <include refid="User_columns"/>

from user where userId = #{userId}

</select>

###

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容