Mybatis動態sql的動態表名問題


    

<update id="obsoleteWeigh">
    update #{tableName} set iobsolete = 1,update_date = #{date} where reg_id in
    <foreach item="id" collection="ids" separator="," open="(" close=")" index="">
        #{id}
    </foreach>
</update>

 


  一開始這樣寫的sql,sql語句的表名會有引號,導致sql報錯,需要想辦法去掉#{tableName}的引號。查了半天發現mybatis的update標簽有個屬性:statementType。

  

 

   statementType的值設為STATEMENT可以滿足我們的需求,把表名的引號去掉,但是同時也去掉了參數的引號,這樣還是有問題。對Statement和PrepareStatement的理解具體可以參閱:http://wenku.baidu.com/view/ccb9da020740be1e650e9abc.html

  把statementType的值設為STATEMENT后,我們需要注意sql里的參數如 #{tableName}、#{date} 都需要改為${},不然無法把參數拼接上去。

  做完這些工作之后,我們需要注意的是,我們傳的參數值(除去表名、表字段)的引號也被去掉了,我們需要在給參數加上引號,此時我們可以使用轉義符:&apos; 是單引號,

值得注意的是: 
  (1)轉義序列字符之間不能有空格; 
  (2) 轉義序列必須以”;”結束; 
  (3) 單獨出現的”&”不會被認為是轉義的開始; 
  (4) 區分大小寫。 

  最終一個正確的表名動態的sql為:

<update id="obsoleteWeigh" statementType="STATEMENT">
    update ${tableName} set iobsolete = 1,update_date = &apos;${date}&apos; where reg_id in
    <foreach item="id" collection="ids" separator="," open="(" close=")" index="">
        &apos;${id}&apos;
    </foreach>
</update>

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM