什麼是MyBatis?
MyBatis(前身是iBatis)是一個支持普通SQL查詢、存儲過程以及高級映射的持久層框架。
MyBatis框架也被稱之爲ORM(Object/Relation Mapping,即對象關係映射)框架。所謂的ORM就是一種爲了解決面向對象與關係型數據庫中數據類型不匹配的技術,它通過描述Java對象與數據庫表之間的映射關係,自動將Java應用程序中的對象持久化到關係型數據庫的表中。
Hibernate與MyBatis有什麼區別?
- Hibernate是一個全表映射的框架。
- 通常開發者只需定義好持久化對象到數據庫表的映射關係,就可以通過Hibernate提供的方法完成持久層操作。
- 開發者並不需要熟練的掌握SQL語句的編寫,Hibernate會根據制定的存儲邏輯,自動的生成對應的SQL,並調用JDBC接口來執行,所以其開發效率會高於MyBatis。
- Hibernate也存在一些缺點,例如它在多表關聯時,對SQL查詢的支持較差;更新數據時,需要發送所有字段;不支持存儲過程;不能通過優化SQL來優化性能等。
-
MyBatis是一個半自動映射的框架。
-
“半自動”是相對於Hibernate全表映射而言的,MyBatis需要手動匹配提供POJO、SQL和映射關係,而Hibernate只需提供POJO和映射關係即可。
-
與Hibernate相比,雖然使用MyBatis手動編寫SQL要比使用Hibernate的工作量大,但MyBatis可以配置動態SQL並優化SQL,可以通過配置決定SQL的映射規則,它還支持存儲過程等。對於一些複雜的和需要優化性能的項目(電商)來說,顯然使用MyBatis更加合適。
-
由於mybatis的sql都是寫在xml裏,因此優化sql比hibernate方便很多。而hibernate的sql很多都是自動生成的,無法直接維護sql;雖有hql,但功能還是不及sql強大。
MyBatis的工作原理
MyBatis的操作步驟
1.讀取配置文件
2.根據配置文件構建SqlSessionFactory
3.通過SqlSessionFactory創建SqlSession
4.使用SqlSession對象操作數據庫
5.關閉SqlSession
注意
在使用"${}"進行 SQL 字符串拼接時,無法防止 SQL 注入問題 所以想要眈能實現棋糊查詢,又要防止 SQL 注入,可以對上述映射文件 CustomerMapper.xml 中模糊查詢的 select 語句進行修改,使用 MySQL 中的 concatO 函數進行字符串拼接