1. 程式人生 > >mybatis mapper文件裏的<set><trim>

mybatis mapper文件裏的<set><trim>

times back date rri des 規範 ide sta 代碼

簡單介紹:翻看以前在學校寫的代碼,發現那時候有一個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>

 

總結:我個人感覺來說,這兩種寫法花費的時間都差不多,但是第二種的能夠處理不小心添加的逗號或者其他,規範性上感覺更加好一點吧。

mybatis mapper文件裏的<set><trim>