面試之Mybatis中的 和 區別?

2021-08-20 19:09:56 字數 729 閱讀 3074

mybatis是如何做到sql預編譯的呢?其實在框架底層,是jdbc中的preparedstatemen類在起作用,preparedstatement是我們很熟悉的statement的子類,它的物件包含了編譯好的sql語句。這種「準備好」的方式不僅能提高安全性,而且在多次執行同乙個sql時,能夠提高效率。原因是sql已編譯好,再次執行時無需再編譯。

#{}:相當於jdbc中的preparedstatement(經過預編譯的,安全的)

①:#將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號(「」);

②:#能夠很大程度防止sql注入

${}:是輸出變數的值(未經過編譯的,僅僅是取變數的值,是非安全的,存在sql注入)

①:$將傳入的資料直接顯示在生成sql中。

②:$無法防止sql注入

③:$一般傳入資料庫物件,例如傳入表名。

如以下兩條sql語句:

#{}格式傳入入參

select * from user where userid="1" or userid="2" and password="11111";

${}格式傳入入參

select * from user where userid=1 or userid=2 and password=1111;

以${}傳入入參後的執行sql打亂了我們的預期sql格式及查詢條件,從而實現sql注入。所以,除了order by 等需要傳入資料庫欄位等入參使用${},其他的盡量使用#{}。

面試之jpa和mybatis的區別

第一 jpa是物件與物件之間的對映,而mybatis是物件和結果集的對映。第二 jpa移植性比較好,不用關心用什麼資料庫,因為mybatis自由寫sql語句,所以當專案移植的時候還需要改sql。及時判斷資料庫型別,不嫌累麼 第三 當需要修改欄位的時候mybatis改起來特別費事,而jpa就相對簡單。...

面試4 mybatis中的 和 的區別

佔位符號,好處防止sql注入 sql拼接符號 優先使用 因為 會導致 sql 注入的問題 1 是預編譯處理,mybatis在處理 時,它會將sql中的 替換為?然後呼叫preparedstatement的set方法來賦值,傳入字串後,會在值兩邊加上單引號,如上面的值 4,44,514 就會變成 4,...

面試之mybatis和hibernate的區別

mybatis是支援普通sql查詢 儲存過程和高階對映的優秀持久層框架。封裝了 幾乎所有的jdbc 和引數的手工設定 以及結果集的檢索 封裝了 1,獲取連線,執行sql,釋放連線。2,sql的引數設定,屬性自動傳遞引數 例如emp有name和age屬性,sql語句寫成 insert into emp...