两者相同点
- Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
- Hibernate和MyBatis都支持JDBC和JTA事务处理。
Mybatis优势
- MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
- MyBatis容易掌握,而Hibernate门槛较高。
Hibernate优势
- Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
- Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
- Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
- Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
1、MyBatic:ORM框架,半自动化
没有自己日志系统,使用log4j;
与数据库耦合性高,移植性弱;
小巧,灵活,高效,对于复杂sql需要手动编写同时写resultmap;
sql优化比较方便;
2、Hibernate:ORM框架、全自动化
有自己日志系统;
与数据库耦合度低,移植性强;
只要建立pojo与数据库表之间联系即可,不用关心底层实现,注意力放在业务层;
有较好缓存机制。
一、mybatis中缓存:
1)mybatic中缓存:
一级缓存sqlsession 二级缓存 mapper的namespace
mybatic全局缓存开启:
<!--这个配置使全局的映射器(二级缓存)启用或禁用缓存-->
<setting name="cacheEnabled" value="true" />
单个mapper二级缓存设置:
<select id="selectAllStudents" resultMap="studentMap" useCache="true">
SELECT id, name, age FROM student
</select>
二、hibernate中缓存
2)hibernate中缓存
一级缓存:session级
二级缓存:sessiofactory级缓存,需要引入ehcache对应jar(默认关闭)
<property name="hibernate.cache.use_sencond_level_cache">true</property>
<
<property name="hibernate.cache.region.factory_class">
o
org.hibernate.cache.ehcache.EhCacheRegionFactory
<
</property>
查询缓存:一级和二级缓存,只能缓存单个对象,如果需要缓存一个结果集,必须使用查询缓存。查询缓存默认也是关闭的,如需使用需要手动开启,下面是开启过程
<property name="hibernate.cache.use_query_cache">true</property>