Mybatis之 和 區別及動態傳入表名

2021-08-20 09:59:32 字數 811 閱讀 5307

動態傳入表名

#能防止sql注入,$不能

$方式一般用於傳入資料庫物件,例如傳入表名.

mybatis排序時使用order by 動態引數時需要注意,用$而不是#

id = 1, select # from tablename -> select 1 from tablename(引用)

id = 1, select $ from tablename -> select id from tablename

在動態 sql 解析階段, # 和 $ 會有不同的表現:

tips:

1. 能使用 # 的地方就用 #

2. 表名作為變數時,必須使用 $

mybatis深入理解之 # 與 $ 區別以及 sql 預編譯

定義sql 預編譯指的是資料庫驅動在傳送 sql 語句和引數給 dbms 之前對 sql 語句進行編譯,這樣 dbms 執行 sql 時,就不需要重新編譯。

為什麼需要預編譯

jdbc 中使用物件 preparedstatement 來抽象預編譯語句,使用預編譯

預編譯階段可以優化 sql 的執行。

預編譯之後的 sql 多數情況下可以直接執行,dbms 不需要再次編譯,越複雜的sql,編譯的複雜度將越大,預編譯階段可以合併多次操作為乙個操作。

預編譯語句物件可以重複利用。

把乙個 sql 預編譯後產生的 preparedstatement 物件快取下來,下次對於同乙個sql,可以直接使用這個快取的 preparedstate 物件。

mybatis 預設情況下,將對所有的 sql 進行預編譯

mybatis中 和 傳參的區別

會按照型別替換,如果a 是string,那麼最後的結果為 ssss a是 文字替換 如果a 是str ing,那麼最後 的結果也 為sss s,主要用在 group by,order by 後面 具體來講一下吧 使用 傳入引數是,sql語句解析是會加上 比如 select from table wh...

mybatis 動態sql及分頁

if 一樣的用拼接條件 bname trim 格式化標籤 prefix 字首 suffix 字尾 suffixoverrides 減除最後乙個 foreach 遍歷集合,批量查詢,通常用於in關鍵字 select from t mvc book where bid in 2.1 引數中直接加入 2....

記錄下mybatis中 和 傳參的區別

最近在用mybatis,之前用過ibatis,總體來說差不多,不過還是遇到了不少問題,再次記錄下,比如說用 和 傳參的區別,使用 傳入引數是,sql語句解析是會加上 比如 select from table where name 傳入的name為小李,那麼最後列印出來的就是 select from ...