您好,登錄后才能下訂單哦!
技巧一:
把查詢的字段,查詢的條件單獨(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">
?
? <!--? ?> -> 大于號(hào)(>)? ?-->
? create_time >= #{createTime ,jdbcType=DATE}
?
</if>
?
<if test="updateTime != null">
?
? <!--? ?< -> 小于號(hào)(<)? ?-->
? update_time <= #{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>
?
免責(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)容。