1.#{}和${}的區別。
#{}是預編譯處理,${}是字串替換。
mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫preparedstatement的set方法來賦值。
mybatis在處理${}時,就是把${}替換成變數的值。
使用#{}可以有效的防止sql注入,提高系統安全性。可以使用#{}時盡量使用#{}。
2.mybatis與hibernate有哪些不同?
(1)mybatis和hibernate不同,它不完全是乙個orm框架,因為mybatis需要程式設計師自己編寫sql語句。
(2)mybatis直接編寫原生態sql,可以嚴格控制sql執行效能,靈活度高,適合於關係資料模型要求不高的軟體開發,
缺點:mybatis無法做到資料庫無關性,如果需要實現支援多種資料庫的軟體,則需要自定義多套sql對映檔案,工作量大。
(3)hibernate物件關係對映能力強,資料庫無關性好,對於關係模型要求高的軟體,如果用hibernate開發可以節省很多**,提高效率。
3.通常乙個xml對映檔案,都會寫乙個dao介面與之對應,請問,這個dao介面的工作原理是什麼?dao介面裡的方法,引數不同時,方法能過載嗎?
4.mybatis是如何將sql執行結果封裝為目標物件並返回的?都有哪些對映形式?
第一種是使用標籤,逐一定義資料庫列名和物件屬性名之間的對映關係。
第二種是使用sql列的別名功能,將列的別名書寫為物件屬性名。
有了列名與屬性名的對映關係後,mybatis通過反射建立物件,同時使用反射給物件的屬性逐一賦值並返回,那些找不到對映關係的屬性,是無法完成賦值的。
5.如何獲取自動生成的(主)鍵值?
insert 方法總是返回乙個int值 ,這個值代表的是插入的行數。
如果採用自增長策略,自動生成的鍵值在 insert 方法執行完後可以被設定到傳入的引數物件中,從該物件中可以獲取。
6.當實體類中的屬性名和表中的欄位名不一樣 ,怎麼辦 ?
第1種: 通過在查詢的sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致。
第2種: 通過來對映欄位名和實體類屬性名的一一對應的關係。
7.mybatis之一級快取和二級快取
mybatis的快取,包括一級快取和二級快取
一級快取是預設使用的。
二級快取需要手動開啟。
一級快取指的就是sqlsession,在sqlsession中有乙個資料區域,是map結構,這個區域就是一級快取區域。一級快取中的key是由sql語句、條件、statement等資訊組成乙個唯一值。一級快取中的value,就是查詢出的結果物件。map
如果查完後,增刪改操作,清空快取。
mybatis常見面試題
1.mybatis動態sql是做什麼的?都有哪些動態sql,簡單描述一下動態sql的執行原理?mybatis動態sql是 指在對映檔案xml中可以通過標籤的形式編寫動態sql,完成邏輯判斷和動態拼接sql的功能。有9種動態sql標籤 trim where set foeach if choose w...
Mybatis 的常見面試題
背景 好久沒用mybatis了,有些面試題還是要好好準備的。問題集mybatis 的常見面試題 mybatis常見面試題總結 ps 總結的還是很全面的 mybatis常見面試題1 精講 和 的區別是什麼?使用 可以有效的防止sql注入,提高系統安全性。原因在於 預編譯機制。預編譯完成之後,sql的結...
常見面試題
1.get和post的區別 1 本質區別 get是向伺服器請求資料,post是向伺服器傳送資料。2 伺服器獲取值的方式 get方式提交的資料,伺服器端使用request.querystring獲取變數的值。post方式提交的資料,伺服器端使用request.form獲取資料。3 安全性 get安全效...