Mybatis和Hibernate的區(qū)別
Mybatis并不是一個(gè)完全的orm框架渗稍。Hibernate是面向?qū)ο罅低螅梢圆皇褂胹ql語句。Mybatis是面向sql語句的稿存。專注的是輸入映射返回值映射以及sql語句的靈活性而涉。
傳統(tǒng):dao,daoimpl
impl:
SqlSession sqlSession = sessionFactory.openSession();? ? ??
? User user = sqlSession.selectOne("test.getUserById", id);??
? ? ?sqlSession.close();
return user;
存在問題:dao中操作數(shù)據(jù)庫的代碼重復(fù)著瓶。可以考慮使用模板替代啼县。statementId存在硬編碼的問題材原。
另一種是mapper代理方法,程序員只需要寫mapper接口相當(dāng)于dao接口
Hibernate具有自己的日志統(tǒng)計(jì)。Mybatis本身不帶日志統(tǒng)計(jì)挺峡,使用Log4j進(jìn)行日志記錄葵孤。
mybatic ? ?
session緩存,可以增強(qiáng)變現(xiàn)而且處理循環(huán) 依賴也是必須的。要開啟二級(jí)緩存,你需要在你的SQL映射文件中添加一行:?
MyBatis可以進(jìn)行更為細(xì)致的SQL優(yōu)化橱赠,可以減少查詢字段尤仍。
MyBatis容易掌握,而Hibernate門檻較高狭姨。
相同:
Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成SessionFactory吓著,然后由SessionFactory生成Session鲤嫡,最后由Session來開啟執(zhí)行事務(wù)和SQL語句。其中SessionFactoryBuider绑莺,SessionFactory,Session的生命周期都是差不多的惕耕。
Hibernate和MyBatis都支持JDBC和JTA事務(wù)處理纺裁。
Hibernate優(yōu)勢(shì)
Hibernate的DAO層開發(fā)比MyBatis簡(jiǎn)單,Mybatis需要維護(hù)SQL和結(jié)果映射司澎。
Hibernate對(duì)對(duì)象的維護(hù)和緩存要比MyBatis好欺缘,對(duì)增刪改查的對(duì)象的維護(hù)要方便。
Hibernate數(shù)據(jù)庫移植性很好挤安,MyBatis的數(shù)據(jù)庫移植性不好谚殊,不同的數(shù)據(jù)庫需要寫不同SQL。
Hibernate有更好的二級(jí)緩存機(jī)制蛤铜,可以使用第三方緩存嫩絮。MyBatis本身提供的緩存機(jī)制不佳。