mybatis mapper檔案裡的<set><trim>
簡單介紹:翻看以前在學校寫的程式碼,發現那時候有一個sql寫的很有意思,用到了 <set>標籤,和我現在寫的雖然有點差別,但是效果一樣
程式碼:
// mapper裡的sql<update id="updateEvent" parameterType="map">
update event
<set>
<if test="title!=null and title!=''">
title=#{title},
</if>
<if test="event!=null and event!=''">
event=#{event}
</if>
</set>
where id=#{id}
</update>
//mapper裡的sql
<update id="updateEvent" parameterType="map">
update event
<trim prefix="set" suffixOverrides=",">
<if test="title!=null and title!=''">
title=#{title},
</if>
<if test="event!=null and event!=''">
event=#{event},
</if>
</trim>
where id=#{id}
</update>
解釋屬性,順便再補充幾個常用的屬性:
- prefix:給trim標籤範圍內的sql語句加上字首,這個很靈活,比如說常見的:加上where條件 加上左括號 加上set 等等,下邊會給例子的
- suffix:給trim標籤範圍內的sql語句加上字尾,用法和上邊差不多,他們兩個可以說是一對,但是也可以有所不同
- prefixOverrides:去除trim標籤範圍內多餘的字首內容
- suffixOverrides:去除trim標籤範圍內多餘的字尾內容,如:suffixOverrides=","就是用來去除trim標籤內sql語句多餘的字尾","
//insert sql
<insert id="insert" parameterType="Contract">
insert into contract
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="userId != null">user_id,</if>
<if test="createDate != null">create_date,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id,jdbcType=BIGINT},</if>
<if test="userId != null">#{userId,jdbcType=BIGINT},</if>
<if test="createTime != null">#{createDate,jdbcType=TIMESTAMP},</if>
</trim>
</insert>
//update sql
update user
<trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">
<if test="name != null and name.length()>0"> name=#{name} , </if>
<if test="gender != null and gender.length()>0"> gender=#{gender} , </if>
</trim>
總結:我個人感覺來說,這兩種寫法花費的時間都差不多,但是第二種的能夠處理不小心新增的逗號或者其他,規範性上感覺更加好一點吧。