簡介
MyBatis 是支持普通 SQL查詢铃诬,[存儲過程]和高級映射的優(yōu)秀[持久層]框架烦味。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設置以及[結果集]的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射龄寞,將接口和 Java 的POJOs(Plain Ordinary Java Objects汰规,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
每個MyBatis應用程序主要都是使用Sql[Session]Factory實例的物邑,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得溜哮。SqlSessionFactoryBuilder可以從一個xml配置文件或者一個預定義的配置類的實例獲得。
用xml文件構建SqlSessionFactory實例是非常簡單的事情色解。推薦在這個配置中使用類路徑資源(classpath resource)茂嗓,但你可以使用任何Reader實例,包括用文件路徑或file://開頭的url創(chuàng)建的實例科阎。MyBatis有一個實用類----Resources述吸,它有很多方法,可以方便地從類路徑及其它位置加載資源锣笨。
特點
簡單易學:本身就很小且簡單蝌矛。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易于學習票唆,易于使用,通過文檔和源代碼屹徘,可以比較完全的掌握它的設計思路和實現(xiàn)走趋。
靈活:mybatis不會對應用程序或者數(shù)據(jù)庫的現(xiàn)有設計強加任何影響。 sql寫在xml里噪伊,便于統(tǒng)一管理和優(yōu)化簿煌。通過sql語句可以滿足操作數(shù)據(jù)庫的所有需求氮唯。
解除sql與程序代碼的耦合:通過提供DAO層,將業(yè)務邏輯和數(shù)據(jù)訪問邏輯分離姨伟,使系統(tǒng)的設計更清晰惩琉,更易維護,更易單元測試夺荒。sql和代碼的分離瞒渠,提高了可維護性。
提供映射標簽技扼,支持對象與數(shù)據(jù)庫的orm字段關系映射
提供對象關系映射標簽伍玖,支持對象關系組建維護
提供xml標簽,支持編寫動態(tài)sql剿吻。
框架架構
我們把Mybatis的功能架構分為三層:
(1)API接口層:提供給外部使用的接口API窍箍,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫。接口層一接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理丽旅。
(2)數(shù)據(jù)處理層:負責具體的SQL查找椰棘、SQL解析、SQL執(zhí)行和執(zhí)行結果映射處理等榄笙。它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作邪狞。
(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理办斑、事務管理外恕、配置加載和緩存處理,這些都是共用的東西乡翅,將他們抽取出來作為最基礎的組件鳞疲。為上層的數(shù)據(jù)處理層提供最基礎的支撐。
動態(tài)SQL
MyBatis 最強大的特性之一就是它的動態(tài)語句功能蠕蚜。如果您以前有使用JDBC或者類似框架的經(jīng)歷尚洽,您就會明白把SQL語句條件連接在一起是多么的痛苦,要確保不能忘記空格或者不要在columns列后面省略一個逗號等靶累。動態(tài)語句能夠完全解決掉這些痛苦腺毫。
盡管與動態(tài)SQL一起工作不是在開一個party,但是MyBatis確實能通過在任何映射SQL語句中使用強大的動態(tài)SQL來改進這些狀況挣柬。動態(tài)SQL元素對于任何使用過JSTL或者類似于XML之類的文本處理器的人來說潮酒,都是非常熟悉的。在上一版本中邪蛔,需要了解和學習非常多的元素急黎,但在MyBatis 3 中有了許多的改進,現(xiàn)在只剩下差不多二分之一的元素。MyBatis使用了基于強大的OGNL表達式來消除了大部分元素勃教。
Mtbatis集成
單獨使用mybatis是有很多限制的(比如無法實現(xiàn)跨越多個session的事務)淤击,而且很多業(yè)務系統(tǒng)本來就是使用spring來管理的事務,因此mybatis最好與spring集成起來使用故源。
Mydbtis優(yōu)缺點
優(yōu)點
與傳統(tǒng)的數(shù)據(jù)庫訪問技術相比污抬,ORM有以下優(yōu)點:
基于SQL語句編程,相當靈活绳军,不會對應用程序或者數(shù)據(jù)庫的現(xiàn)有設計造成任何影響印机,SQL寫在XML里,解除sql與程序代碼的耦合删铃,便于統(tǒng)一管理耳贬;提供XML標簽,支持編寫動態(tài)SQL語句猎唁,并可重用
與JDBC相比咒劲,減少了50%以上的代碼量,消除了JDBC大量冗余的代碼诫隅,不需要手動開關連接
很好的與各種數(shù)據(jù)庫兼容(因為MyBatis使用JDBC來連接數(shù)據(jù)庫腐魂,所以只要JDBC支持的數(shù)據(jù)庫MyBatis都支持)
提供映射標簽,支持對象與數(shù)據(jù)庫的ORM字段關系映射逐纬;提供對象關系映射標簽蛔屹,支持對象關系組件維護
能夠與Spring很好的集成
缺點
SQL語句的編寫工作量較大,尤其當字段多豁生、關聯(lián)表多時兔毒,對開發(fā)人員編寫SQL語句的功底有一定要求
SQL語句依賴于數(shù)據(jù)庫,導致數(shù)據(jù)庫移植性差甸箱,不能隨意更換數(shù)據(jù)庫
MyBatis框架適用場景
MyBatis專注于SQL本身育叁,是一個足夠靈活的DAO層解決方案。
對性能的要求很高芍殖,或者需求變化較多的項目豪嗽,如互聯(lián)網(wǎng)項目,MyBatis將是不錯的選擇豌骏。