Mybatis和Hibernate

一、简介

二者都是O/R mapping框架。

1、Hibernate

Hibernate框架对数据库提供了较为完整的封装,实现了POJO(Plain Ordinary Java Object:简单的Java对象,或者叫普通的JavaBean,是为了避免和EJB混淆所创造的简称)和数据库表之间的映射,以及sql的自动生成和执行。程序员往往只需要定义好了POJO到数据库表的映射关系,即可以通过Hibernate提供的方法完成操作。Hibernate/OJB会根据制定的存储逻辑,自动生成对应的sql并调用JDBC接口加以执行。

2、Mybatis

Mybatis的着力点则在于POJO与sql之间的映射关系,通过映射配置文件,将sql所需的参数以及返回的结果字段映射到指定的POJO。

相对于Hibernate的“O/R”而言,Mybatis是一种“Sql Mapping”的ORM实现。

二、系统调优对比

1、Hibernate常用的调优方案:

1)制定合理的缓存策略;

2)尽量使用延迟加载特性;

3)采用合理的Session管理机制;

4)使用批量抓取,设定合理的批处理参数(batch_size);

5)进行合理的O/R映射设计。

2、Mybatis常用的的调优方案:

1)制定合理的缓存策略;

2)采用合理的Session管理机制;

3)进行sql优化设计。

Mybatis在Session方面和Hibernate的Session生命周期是一致的,同样也有二级缓存机制。

三、sql优化方面

1、Hibernate的sql优化:

1)Hibernate的查询会将表中所有的字段查询出来,这一点会有性能损耗;

2)Hibernate也可以自己写sql来制定要查询的字段,但这样就破坏了Hibernate开发的简洁性;

3)Hibernate的HQL语句调优需要将sql打印出来,调整不方便,不直观;

4)Hibernate有自己完整的日志统计,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;

2、Mybatis的sql优化:

1)Mybatis的sql是手动编写的,可以按需求指定查询的字段,调整直观方便;

2)Mybatis本身不带日志统计。

四、扩展性方面

1、Hibernate与具体数据库的关联只需在xml文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好;

2、Mybatis项目中所有的sql语句都是依赖所用的数据库,因此对不同类型数据库的支持不好。

五、对象管理与抓取策略

1、对象管理

Hibernate是完整的对象/关系映射解决方案,它提供了对象状态管理的功能,是开发者不再需要理会底层数据库系统的细节。相对于常见的JDBC/SQL持久层方案中需要管理sql语句而言,Hibernate采用了更自然的面向对象的视角来持久化Java中应用的数据;

Mybatis在对象管理上没有详细的解决方案,需要用户自己对对象进行管理。

2、抓取策略

Hibernate对实体关联对象的抓取有良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式,它是详细配置和处理的;

Mybatis的延迟加载时全局配置的。

六、缓存机制

各自的详细介绍见《磁盘缓存、Hibernate缓存、Mybatis缓存》

1、相同点

Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,还可以通过实现自己的缓存或者采用第三方缓存方案,创建适配器来完全覆盖缓存行为。

2、不同点

1)Hibernate的二级缓存在Session Factory生成的配置文件中进行详细配置,然后再具体的表-对象映射中配置是哪种缓存;

Mybatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过cache-ref来实现。

2)因为Hibernate对查询对象有着良好的管理机制,用户无需关心sql,所以在使用二级缓存时如果出现脏数据,系统会报错;

Mybatis在使用二级缓存时需要特别小心,如果不能完全确定数据更新操作的波及范围,需避免cache的盲目使用,否则,脏数据的出现会给系统的正常运行带来很大的隐患。

七、两个框架对比总结

1、相同点

1)Hibernate和Mybatis都可以通过SessionFactoryBuilder由xml配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session来开启执行事务和sql语句。二者的SessionFactoryBuilder、SessionFactory、Session的生命周期都差不多;

2)Hibernate和Mybatis都支持JDBC和JTA事务处理。

2、优势

Hibernate优势

1)Hibernate数据库无关性好,O/R映射能力强,Mybatis需要维护sql和结果映射;

2)Hibernate对对象的维护和缓存要比Mybatis好,对增删改查的对象的维护要方便;

3)Hibernate数据库移植性很好,Mybatis的数据库移植性不好,不同的数据库需要写不同的sql;

4)Hibernate有更好的二级缓存,Mybatis本身提供的缓存机制不佳。

Mybatis优势

1)Mybatis可以进行更为细致的sql优化,可以减少查询字段;

2)Mybatis容易掌握,Hibernate门槛较高。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值