1. 程式人生 > >mybatis中動態sql語句(2)

mybatis中動態sql語句(2)

最近在專案中遇到這樣的需求:根據不同的條件修改和插入sql語句時,要寫很多的sql這樣效率有些低,這時有一個很好的解決方法,分享一下:

控制同一張表,但傳入的引數不固定,操作表的欄位不固定,就要用到mybatis動態插入。.xml如下

<insert id="insertMessage" parameterType="com.sf.ccsp.member.client.request.MessageReq">
       insert cx_customer_message
        <trim prefix="(" suffix=")" suffixOverrides="," >
          ID,MEMBERID,
          <if test='messageClassify != null and messageClassify != "" '>
             MESSAGEE_CLASSIFY,
          </if>
          <if test='messageCode != null and messageCode != "" '>
             MESSAGE_CODE,
          </if>
         <if test='messageContent != null and messageContent != "" '>
             MESSAGE_CONTENT,
         </if>
        </trim>
 
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          #{id, jdbcType=VARCHAR},
          #{memberId, jdbcType=VARCHAR},
          <if test='messageClassify != null and messageClassify != "" '>
            #{messageClassify, jdbcType=VARCHAR},
          </if>
          <if test='messageCode != null and messageCode != "" '>
            #{messageCode, jdbcType=VARCHAR},
          </if>
          <if test='messageContent != null and messageContent != "" '>
            #{messageContent, jdbcType=VARCHAR},
          </if>
        </trim>  
</insert>

下面為修改語句的例子:

這裡是使用trim標籤(這裡只是其中的一種方法)

<update id="updateMessage"  parameterType="com.sf.ccsp.member.client.request.MessageReq" >
     update cx_customer_message
     <trim prefix="set" suffixOverrides=",">  
        <if test='messageClassify != null and messageClassify != "" '>
          MESSAGEE_CLASSIFY = #{messageClassify, jdbcType=VARCHAR},
        </if>
        <if test='messageCode != null and messageCode != "" '>
          MESSAGE_CODE = #{messageCode, jdbcType=VARCHAR},
        </if>
        <if test='messageContent != null and messageContent != "" '>
          MESSAGE_CONTENT = #{messageContent, jdbcType=VARCHAR},
        </if>    
     </trim>  
     where ID = #{id, jdbcType=VARCHAR}
     and MEMBERID = #{memberId, jdbcType=VARCHAR} 
</update>

完結~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~