2021年MyBatis核心面試題


首先Mybatis是一個優秀的持久層ORM框架,它對jdbc的操作數據庫的過程進行封裝,使得開發者只需要關注SQL本身。不需要花費精力去處理一些重復和繁瑣的步驟。最后通過java對象和statement中的sql進行映射生成最終執行的sql語句。最后由mysql框架執行sql並將結果映射成java對象並返回。

ORM:對象關系映射,簡單點說就是將數據庫中的表和java中的對象建立映射關系,可以讓我們操作對象來間接的操作數據庫。

半ORM:在查詢關聯對象或關聯集合對象時,需要手動編寫sql來完成。

MyBatis編程步驟

  • 創建SqlSessionFactory
  • 通過SqlSessionFactory創建SqlSession
  • 通過sqlsession執行數據庫操作
  • 調用session.commit()提交事務
  • 調用session.close關閉會話

MyBatis的工作原理

  • 讀取MyBatis配置文件。(獲取MyBatis的運行環境等信息)
  • 加載映射文件。(SQL映射文件,其中配置了操作數據庫的SQL語句)
  • 構造會話工廠:通過MyBatis的環境等配置信息構建會話工廠SqlSessionFactory
  • 創建會話對象:有會話工廠創建SqlSession對象,該對象包括了執行SQL語句的所有方法
  • Executor執行器:根據SqlSession傳遞的參數動態的生成需要執行的SQL語句,同時負責查詢緩存的維護
  • Mappedstatement對象:用於存儲要映射的SQL語句的id、參數等信息
  • 輸入參數映射:參數類型可以為Map、List等集合類型也可以使用基本數據類型和POJO類型
  • 輸出結果映射:和輸入類似。

MyBatis的優點

  • 基於SQL語句編程,相當靈活。SQL寫在XML中,解除sql與程序代碼的耦合,便於統一管理。提供XML標簽,支持編寫動態SQL語句,並可重用
  • 消除了 JDBC 大量冗余的代碼,不需要手動開關連接;
  • 很好的與各種數據庫兼容
  • 能夠與 Spring 很好的集成;
  • 提供映射標簽,支持對象與數據庫的 ORM 字段關系映射;提供對象關系映射標簽,支持對象關系組件維護。

MyBatis框架的缺點

  • SQL 語句的編寫工作量較大,尤其當字段多、關聯表多時,對開發人員編寫SQL 語句的功底有一定要求。
  • SQL 語句依賴於數據庫,導致數據庫移植性差,不能隨意更換數據庫。

MyBatis與Hibernate有哪些不同

  • MyBatis是一個半ORM框架,需要自己編寫sql語句,靈活性高,但是需要自定義多套sql映射文件,工作量大
  • Hibernate數據庫無關性好,節省代碼,提高效率

#{}和${}的區別

  • #{}:是預編譯處理,會把sql中的#{}替換為?,調用PreoaredStatement的set方法來賦值
  • ${}:是字符串替換,用於標簽屬性值和sql內部,屬於靜態文本替換。把${}替換為變量的值。

使用#{}可以有效的防止SQL注入,提高系統的安全性 。

當實體類的屬性名和表中的字段名不一致如何處理

  • 通過在查詢的sql語句中定義字段名的別名,讓字段名的別名和實體類的屬性名一致。

  • 通過 類映射字段名和實體類屬性名的一一對應的關系

模糊查詢like怎么編寫

  • 在Java代碼中添加sql通配符
  • 在sql語句中拼接通配符(但是會引起sql注入問題)

通常一個Xml映射文件,都會寫一個Dao接口與之對應。那么Dao接口的工作原理是什么。

Dao接口就是Mapper接口。

  • 接口的全限定名就是映射文件的namespace的值
  • 接口的方法名就是映射文件中Mapper的Statement的id值
  • 接口方法內的參數就是傳遞給sql的參數

Mapper接口是沒有實現類的,當調用接口方法的時候,接口的全限定名+方法名拼接字符串作為key值,可以唯一定位一個MapperStatement。在MyBatis中,每一個


免責聲明!

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



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