關於 Mybatis mapping.xml中的 StatementType 知識點

AlbenXie發表於2018-07-29

遇到的問題:

statementType="STATEMENT"是使用非預編譯。

現在我需要動態傳人表名欄位名,所以需要用STATEMENT。

使用之後所有變數取值都要改成${xxxx},而不是#{xxx},就是因為這個錯了半天。

 

一、要實現動態傳入表名、列名,需要做如下修改 

新增屬性statementType=”STATEMENT” 
同時sql裡的屬有變數取值都改成${xxxx},而不是#{xxx}


<delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT">  
    <![CDATA[ 
        delete from ${table} where 
        ${col} < ${date}]]>  
</delete>  

二、statementType

  1. statementType:STATEMENT(非預編譯),PREPARED(預編譯)或CALLABLE中的任意一個,這就告訴 MyBatis 分別使用Statement,PreparedStatement或者CallableStatement。預設:PREPARED。這裡顯然不能使用預編譯,要改成非預編譯。
  2. 將傳入的資料直接顯示生成在sql中,對於字串資料,需要手動加上引號。

String dateStr = DateFormatUtils.format(date.getTime(), "yyyy-MM-dd HH:mm:ss");  
dateStr = "'" + dateStr + "'"; 

 

相關文章