mybatis是支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架。封裝了?幾乎所有的JDBC代碼和參數的手工設置?,以及結果集的檢索:
封裝了:1,獲取連接,執行sql,釋放連接。
??????????????2,sql的參數設置,屬性自動傳遞參數(例如emp有name和age屬性,sql語句寫成“insert into emp (name,age) values(#{name},#{age})”就可以了,不用像jdbc ?????????????????? 一樣還要用preparedstatement對象設置參數ps.setString(1,“xiaoming”)
maven面試???????????????3,封裝了記錄映射成實體對象的的過程,(jdbc要自己寫rowmapper)
hibernate也是當前流行的orm工具,訪問數據庫的框架,對數據結構提供了較完整的封裝。
封裝了:1,獲取連接,sql編寫,執行sql,釋放連接。
??????????????2,sql參數設置,
idea和jdk,????????????? 3,記錄封裝成實體對象等一系列過程。
對比上面兩個,一目了然,hibernate相比mabatis居然連sql編寫也封裝了。這點本質的不同,是mybatis與hibernate的最大區別,很多網上寫的區別,看起來很亂,很頭大其實大多都是從這點引發出來的。
接下來我們一點一點的說。
區別一:擴展性方面。使用mybatis要自己根據相應的數據庫寫不同的sql實現,例如用MySQL數據庫寫了一個sql的分頁語句,如果換成了oracle數據庫就用不了了。然而如果是hibernate的hql語句則是對實體類(User)和屬性的操作,也拿分頁查詢來說,string hql=“from User”; Query q1=session.creatQuery(hql); q1.setFirstResult(m);q1.setMaxResult(n);?? List<User> list=q1.list();會根據具體的數據庫生成各自相應不同的查詢的語句,所以移植性很好。
Mybatis框架?區別二:sql效率,優化方面。Hibernate的查詢,更新都是對所有字段的操作例如(根據id查詢,sessin.get(User.class,"id"),還有要session.update(對象)時,按照對象的id做條件,更新其他字段信息。如果想要更新部分字段,其他字段保持不變,則對象的其他字段對應的屬性也要有原值),這一點會有性能消耗。Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性。而Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。maybatis的優化,就是對sql語句的優化,MyBatis在Session方面和Hibernate的Session生命周期是一致的,同樣需要合理的Session管理機制。hibernate的優化(可以記一下):
- 制定合理的緩存策略;
- 盡量使用延遲加載特性;
- 采用合理的Session管理機制;
- 使用批量抓取,設定合理的批處理參數(batch_size);
- 進行合理的O/R映射設計
?
還有一點被面試問到過,就是sql和hql形式上的區別。個人認為屬于第一點區別:
?????? sql: select 字段名...from table_name? where? 字段名...?? sql是直接對數據庫表的操作
hibernate??????? hql:select 屬性名...from 實體類 where 屬性 條件 ...group by?屬性order by屬性。hql是對與表有映射關系的實體類的操作,底層會再自動生成相應的sql。??
?
以上點就是最大的區別了。當然網上還有說對象管理和抓取策略,緩存機制什么的,太高級了這里不再討論了。附上連接:
http://blog.csdn.net/firejuly/article/details/819022