mybatis 與 的區別

2022-08-25 16:48:46 字數 1015 閱讀 8260

在mybatis中寫sql的時候經常會用到#{},也可能用到${},它們都是用來獲取介面方法引數的值的。接下來用示例展示兩者的異同。

一、${}

${}用於sql的拼接,比如在模糊查詢的時候會用到如下sql:(注意:$ ,大括號中只能填value.)

執行,檢視日誌:(輸入的引數是乙個string "o")

執行時的sql語句實際上和上面是一樣的。

由此可見,${}實現的是sql的拼接,直接將獲取的值與兩邊的字串進行拼接,組成該sql語句。但是,sql拼接的方式不安全,會引起sql注入的問題,所以下面會用#{}來解決。

二、#{}

如果介面方法入參只有乙個,那麼在sql中#就可以獲取到入參的值。如果是兩個引數,則可以#獲取第乙個引數值,#獲取第二個引數值。但是如果在引數前面用了@param註解,則只能用註解中的名稱來獲取值,例如@param("username") string name   , 那麼在獲取入參name的值時,只能用#。

那麼#{}中的值是怎麼組合到sql中的呢。給出乙個sql語句:

執行,檢視日誌:

可見#{}是乙個佔位符,原理類似preparedstatement.

如果是模糊查詢就應該這樣寫:

執行,檢視日誌:

執行時的sql是: select id,username from mmall_user where username like "%" 'o' "%";    (o為引數)

對比用${}的sql: select id,username from mmall_user where username like "%o%";

這樣完成了模糊查詢,還防止sql注入。

總結:#{}是佔位符的方式,${}是字串拼接。兩者都可以完成模糊查詢,只是形式不一樣。但#{}防sql注入,所以用#{}更安全。

mybatis 與 的區別

public int updatebyid param id int id param name string babyage 注意 此時傳遞的兩個引數的型別不一致 一開始我的xml是這樣寫的 update tf user set baby age where id update tf user s...

Mybatis 與 的區別

select from user where id select from user where id user 123456789 解析後的結果會自動帶上引號。同時在某些情況下,就不能使用 比如 order by,之後只能跟 select from user where id select fro...

Mybatis 與 的區別

可以發現 相當於是在進行字串拼接,而 只是佔位符。用 存在sql注入的風險,則沒有 當需要自定義排序的時候,需要用 如select from test order by desc 可以根據前端傳的orderby欄位,自定義某個字段進行排序 select from test where address...