Mybatis和Hibernate的區別
Mybatis并不是一個完全的orm框架。Hibernate是面向對象,可以不使用sql語句。Mybatis是面向sql語句的。專注的是輸入映射返回值映射以及sql語句的靈活性。
傳統:dao,daoimpl
impl:
SqlSession sqlSession = sessionFactory.openSession();? ? ??
? User user = sqlSession.selectOne("test.getUserById", id);??
? ? ?sqlSession.close();
return user;
存在問題:dao中操作數據庫的代碼重復。可以考慮使用模板替代。statementId存在硬編碼的問題。
另一種是mapper代理方法,程序員只需要寫mapper接口相當于dao接口
Hibernate具有自己的日志統計。Mybatis本身不帶日志統計,使用Log4j進行日志記錄。
mybatic ? ?
session緩存,可以增強變現而且處理循環 依賴也是必須的。要開啟二級緩存,你需要在你的SQL映射文件中添加一行:?
MyBatis可以進行更為細致的SQL優化,可以減少查詢字段。
MyBatis容易掌握,而Hibernate門檻較高。
相同:
Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session來開啟執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事務處理。
Hibernate優勢
Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。
Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。