mybatis中 #{} 和 ${} 的區別


mybatis 為提供了兩種支持動態 sql 的語法:

(1)#{ }

  解析為一個 JDBC 預編譯語句(prepared statement)的參數標記符

(2)${ }

  在動態 SQL 解析階段將會進行變量替換

#{} 的參數替換是發生在 DBMS 中,而 ${} 則發生在動態解析過程中

區別:

  #{}將傳入的參數當成一個字符串,會給傳入的參數加一個雙引號

  ${}將傳入的參數直接顯示生成在sql中,不會添加引號

  #{}能夠很大程度上防止sql注入,${}無法防止sql注入

說明:

  ${}一般用於替換數據庫的表名、字段名等

  能用#{}的地方盡量別用${}

eg:

動態調用表名和字段名

<select id="getLists"  statementType="STATEMENT">
    select 
        ${columns}
    from ${tableName}
        where name= #{name}
</select>

說明:

  不使用預編譯,需添加statementType="STATEMENT"

  STATEMENT(非預編譯),PREPARED(預編譯),默認為PREPARED

 


免責聲明!

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



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