Mybatis與Hibernate程序員
1、瞭解Mybaitssql
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(PlainOld Java Objects,普通老式 Java 對象)爲數據庫中的記錄。數據庫
2、Mybaits總體架構編程
一、 配置文件緩存
全局配置文件(核心配置文件):mybatis-config.xml,做用:配置數據源(配置數據庫鏈接信息),引入映射文件安全
映射文件:XxMapper.xml,做用:配置sql語句、參數、結果集封裝類型等session
二、 SqlSessionFactorymybatis
做用:獲取SqlSession架構
經過newSqlSessionFactoryBuilder().build(inputStream)來構建,inputStream:讀取配置文件的IO流app
三、 SqlSession
做用:執行CRUD操做
它是線程不安全的。
四、 Executor
執行器,SqlSession經過調用它來完成具體的CRUD
它是一個接口,提供了兩種實現:緩存的實現、數據庫的實現
五、 Mapped Statement
在映射文件裏面配置,包含3部份內容:
具體的sql,sql執行所需的參數類型,sql執行結果的封裝類型
參數類型和結果集封裝類型包括3種:
HashMap,基本數據類型,pojo
3、瞭解Hibernate
Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,它將POJO與數據庫表創建映射關係,是一個全自動的orm框架,hibernate能夠自動生成SQL語句,自動執行,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用。
4、Hibernate體系結構
Hibernate架構包括許多對象持久對象,會話工廠,事務工廠,鏈接工廠,會話,事務等。
會話工廠(SessionFactory)
SessionFactory是ConnectionProvider的會話和客戶端工廠。它擁有數據的二級緩存(可選)。 org.hibernate.SessionFactory接口提供了工廠方法來獲取Session的對象。
會話(Session)
Session對象提供應用程序和存儲在數據庫中的數據之間的接口。 它是一個短生命週期的對象幷包裝JDBC鏈接。 它是事務,查詢和標準的工廠。 它擁有一級緩存(強制性)數據。 org.hibernate.Session接口提供插入,更新和刪除對象的方法。它還提供了事務,查詢和標準的工廠方法。
事務(Transaction)
事務對象指定工做的原子單位,它是一個可選項。 org.hibernate.Transaction接口提供事務管理的方法。
鏈接提供者(ConnectionProvider)
它是一個JDBC鏈接工廠。 它從DriverManager或DataSource抽象出來的應用程序。 它是一個可選項。
事務工廠(TransactionFactory)
它是一個事務工廠,是一個可選項。
5、 編寫實現
Mybatis須要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發者無需關心SQL的生成與結果映射,能夠更專一於業務流程。(hibernate自動生成SQL語句機制)
6、性能比較
Hibernate的查詢會將表中的全部字段查詢出來,這一點會有性能消耗。Hibernate也能夠本身寫SQL來指定須要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性。而Mybatis的SQL是手動編寫的,因此能夠按需求指定查詢的字段。(hibernate的性能低於Mybatis)
7、執行細節
Hibernate 是完整的對象/關係映射解決方案,它提供了對象狀態管理(state management)的功能,使開發者再也不須要理會底層數據庫系統的細節。也就是說,相對於常見的 JDBC/SQL 持久層方案中須要管理 SQL 語句,Hibernate採用了更天然的面向對象的視角來持久化 Java 應用中的數據。換句話說,使用 Hibernate 的開發者應該老是關注對象的狀態(state),沒必要考慮 SQL 語句的執行。這部分細節已經由 Hibernate 掌管穩當,只有開發者在進行系統性能調優的時候才須要進行了解。而MyBatis在這一塊沒有文檔說明,用戶須要對對象本身進行詳細的管理。
8、緩存機制
Hibernate一級緩存是Session緩存,Hibernate二級緩存是SessionFactory級的緩存。 SessionFactory的緩存分爲內置緩存和外置緩存。內置緩存中存放的是SessionFactory對象的一些集合屬性包含的數據(映射元素據及預約SQL語句等),對於應用程序來講,它是隻讀的。外置緩存中存放的是數據庫數據的副本,其做用和一級緩存相似.二級緩存除了之內存做爲存儲介質外,還能夠選用硬盤等外部存儲設備。二級緩存稱爲進程級緩存或SessionFactory級緩存,它能夠被全部session共享,它的生命週期伴隨着SessionFactory的生命週期存在和消亡。
MyBatis 包含一個很是強大的查詢緩存特性,它能夠很是方便地配置和定製。MyBatis 3 中的緩存實現的不少改進都已經實現了,使得它更增強大並且易於配置。
默認狀況下是沒有開啓緩存的,除了局部的session 緩存,能夠加強變現並且處理循環 依賴也是必須的。要開啓二級緩存,你須要在你的 SQL 映射文件中添加一行。
9、總結
Mybatis優點
MyBatis能夠進行更爲細緻的SQL優化,能夠減小查詢字段。
MyBatis容易掌握,而Hibernate門檻較高。
Hibernate優點
Hibernate的DAO層開發比MyBatis簡單,Mybatis須要維護SQL和結果映射。
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
Hibernate數據庫移植性很好,MyBatis的數據庫移植性很差,不一樣的數據庫須要寫不一樣SQL。
Hibernate有更好的二級緩存機制,可使用第三方緩存。MyBatis自己提供的緩存機制不佳。
Hibernate功能強大,數據庫無關性好,O/R映射能力強,若是你對Hibernate至關精通,並且對Hibernate進行了適當的封裝,那麼你的項目整個持久層代碼會至關簡單,須要寫的代碼不多,開發速度很快,很是爽。
MBATIS入門簡單,即學即用,提供了數據庫查詢的自動對象綁定功能,並且延續了很好的SQL使用經驗,對於沒有那麼高的對象模型要求的項目來講,至關完美。
MBATIS的缺點就是框架仍是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,可是整個底層數據庫查詢實際仍是要本身寫的,工做量也比較大,並且不太容易適應快速數據庫修改。