一:开发速度的对比
就开发速度而言,hibernate的真正掌握要比Mybatis难一些。Mybatis框架相对简单,也相对轻量。
但是Hibernate比Mybatis容易理解一点。
比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更
适合本项目的开发,比如:一个项目中没有用到复杂的查询语句,只有简单的增删改查,用Hibernate效
率就很快,因为简单的sql语句hibernate已经封装好了,不用写sql节省开发时间,但是对于一个大型项目
复杂语句较多,选择Mybatis就会快许多,而且sql的管理也比较方便。
二:开发工作量的对比
Hibernate和Mybatis都有各自的代码生成器。可以生成简单的DAO层代码,针对高级查询,Mybatis
需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,程序员不用关系SQL的生成与
结果映射,可以把精力专注到业务流程上面。
三:sql优化方面
Hibernate的查询会将表中的所有字段查询出来,消耗性能。Hibernate也可以自己指定要查询的字段,
但是破坏了Hibernate开发的面向对象的优势。Mybatis的SQL是手写的,可以按需求查询指定字段。Hibernate
HqL语句的调整需要将SQL打印出来。Mybatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的
日志统计。Mybatis不带日志,需要使用Log4j进行日志记录管理。
四:对象管理的对比
Hibernate是完整的对象/关系映射,它提供了对象状态管理(state management)的功能,使开发者不
需要理会底层数据库的实现细节。相对与JDBC/SQL持久层中需要管理SQL语句,Hibernate采用了更自然的
面向对象的方式来进行数据的持久化操作。使用Hibernate只需关注对象的状态(state),不必考虑sql语句的
执行,只需要在性能优化的时候进行了解。使用Mybatis需要对对象自己进行管理。
五:缓存机制
Hibernate缓存
Hibernate一级缓存是session缓存,利用好一级缓存需要对session的生命周期进行管理。建议在一个Action
操作中使用一个session。一级缓存需要对session进行严格管理。
二级缓存是SessionFactory的缓存。SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是
SessionFactory对象的一些集合属性包含的数据(映射元素及预定SQL语句等)对于应用程序来说是只读的。外置
缓存中存放的是数据库数据的副本,其作用和一级缓存类似。二级缓存除了以内存作为存储介质外,还可以选用硬
盘的外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期
伴随着SessionFactory的生命周期存在和消亡。
MyBatis缓存
MyBatis包含一个非常强大的查询缓存特性,它可以非常方便的配置和定制。
Mybatis3中的缓存实现的很多改进都已经实现了,使得它更强大而且易于配置。
默认情况下是没有开启缓存的,除了局部的session缓存,可以增强变现而且处理循环依赖也是必须的。要开
启二级缓存,你需要在你的sql映射文件中添加一行:<cache/>
1。映射语句文件中的所有select语句将会被缓存。
2. 映射语句文件中的所有insert update 和 delete语句会刷新缓存。
3.缓存会使用Least Recently Used算法来回收。
4.根据时间表(no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新。
5.缓存会存储列表集合或对象(无论查询方法返回什么)的1024个引用。
6.缓存会被视为是read/write的缓存,意味着对象检索不是共享的,而且可以安全的被调用或者修改,而不干扰
其他调用者或者线程所做的潜在修改。
总结:
相同点:Hibernate与Mybatis都可以通过SessionFactoryBuider 由XML配置文件生成的SessionFactory,然后由
SessionFactory生成Session,最后由Session来开启执行事务和sql语句。其中SessionFactoryBu,SessionFactory的
生命周期都是差不多的。
Hibernate和Mybatis都支持JDBC和JTA事务处理。
Mybatis优势
MyBatis可以进行更为细致的SQl优化,可以减少查询字段。
Mybatis容易掌握,Hibernate门槛较高。
Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射
Hibernate对对象的维护和缓存比Mybatis好,方便增删改查。
Hibernate数据库移植性好,Mybatis根据数据库不同要重写SQL
Hibernate有更好的二级