溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

myBatis中實(shí)用技巧

發(fā)布時(shí)間:2020-06-28 18:41:36 來源:網(wǎng)絡(luò) 閱讀:424 作者:沙漏半杯 欄目:編程語言

技巧一:


把查詢的字段,查詢的條件單獨(dú)寫在一起,使用 <sql></sql>標(biāo)簽定義,使用<include></include>標(biāo)簽引用

<!-- 查詢的字段 -->

<sql id="Base_Column_List" >

? ? id, name

</sql>

?

<!-- 查詢的條件 -->

<sql id="QUERY">

? <where>

? ? <if test="id != null">

? ? ? ?AND id = #{id,jdbcType=INTEGER}

? ? </if>

? ? <if test="name != null">

? ? ? ?AND name= #{name,jdbcType=VARCHAR}

? ? </if>

? </where>

</sql>

?

<!-- 查詢語句 -->

<select id="selectByCondition" resultMap="baseResultMap">

? ?select?

? ?

? ?<!-- 引入查詢的字段 -->

? ?<include refid="Base_Column_List" />

? ?

? ?from student

?

? ?<!-- 引入查詢的條件 -->

? ?<include refid="QUERY"></include>

</select>

?


技巧二:


大于小于號(hào)轉(zhuǎn)義

<!-- 第一種方式:使用轉(zhuǎn)義字符 -->

<if test="createTime != null">

?

? <!--? ?&gt; -> 大于號(hào)(>)? ?-->

? create_time &gt;= #{createTime ,jdbcType=DATE}

?

</if>

?

<if test="updateTime != null">

?

? <!--? ?&lt; -> 小于號(hào)(<)? ?-->

? update_time &lt;= #{updateTime ,jdbcType=DATE}

?

</if>

?

?

<!-- 第二種:xml格式 -->

<if test="createTime != null">

?

? <![CDATA[

? ? ? create_time >= #{createTime ,jdbcType=DATE}

? ]]>

?

</if>

?

<if test="updateTime != null">

?

? <![CDATA[

? ? ? update_time <= #{updateTime ,jdbcType=DATE}

? ]]>

?

</if>

?


技巧三:


插入時(shí)返回自增的主鍵id

<!-- myBatis中關(guān)鍵點(diǎn)就是在 insert 標(biāo)簽內(nèi)添加 useGeneratedKeys 和 keyProperty屬性 -->

?

<!-- useGeneratedKeys:如果插入的表以自增列為主鍵,則允許 JDBC 支持自動(dòng)生成主鍵,并可將自動(dòng)生成的主鍵返回 -->

?

<!-- keyProperty:對(duì)應(yīng)的主鍵的對(duì)象 -->

?

<insert id="insertSelective" parameterType="com.test.student" useGeneratedKeys="true" keyProperty="id">

? ? <!-- 這里寫插入 sql -->

</insert>

?

?

<!-- java代碼中關(guān)鍵點(diǎn)就是,返回的自增主鍵不是調(diào)用的 insertSelective 方法返回結(jié)果 -->

?

<!-- 返回結(jié)果為影響行數(shù),正確的獲取方式是在入?yún)⒌?student 對(duì)象中,使用 getId() 方法得到 -->

?

<!-- 這只是舉例,具體的對(duì)象和對(duì)象中的id屬性的getter方法不一樣 -->

?


技巧四:


在插入前/插入后查詢獲取某個(gè)字段的值,并且使用在緊接著的第二條 sql 中

<!-- 場景描述:一個(gè)置頂功能,設(shè)置置頂?shù)臅r(shí)候需要得到最大的置頂數(shù),加一后設(shè)置為本次置頂數(shù) -->

?

?

<!-- 在顯示置頂?shù)臅r(shí)候是按照倒序排列,越往后點(diǎn)擊了置頂?shù)臄?shù)據(jù)顯示的越前面 -->

?

<!-- 設(shè)置置頂 -->

<update id="updateTop">

? ??

? ? <!-- 更新前查詢出最大的置頂數(shù),并且加一后返回出來 -->

? ? <!-- 注: -->

? ? <!--? ? 1. 更新前/更新后:BEFORE/AFTER -->

? ? <!--? ? 2. 這里是在有很多數(shù)據(jù)后添加的排序字段,添加排序字段后,老數(shù)據(jù)那一列都是null -->

? ? <!--? ? ? ?則在此處使用了 COALESCE 函數(shù)做了一個(gè)小處理,如果為null就取值0 -->

?

<selectKey keyProperty="top_sort" order="BEFORE" resultType="java.lang.Integer">

select COALESCE(max(top_sort),0) + 1 from table

</selectKey>

? ? <!-- 設(shè)置置頂主 sql -->

? ? <!-- 注: -->

? ? <!--? ? 1. 下面 sql 中的 #{top_sort} 是取的上面 sql中的結(jié)果 -->

?

update table

top_sort = #{top_sort}?

<if test="update_time!=null">

,update_time=#{update_time}

</if>

<if test="update_user!=null">

,update_user=#{update_user}

</if>

where id = #{id}

</update>

?


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI