1、hibernate真正掌握要比mybatis难,因为hibernate的功能和特性非常多,还不适合多表关联查询。
2、hibernate和mybatis都有代码生成工具,可以生成简单的dao方法。但对于高级查询mybatis需要自己写sql以及resultMap,而hibernate有良好的反射机制,提供预定义查询只需遵循一定的语法规范无需写sql语句。
3、hibernate调优方案:1、制定合理的缓存策略2、尽量使用延迟加载特性3、采用合理的session管理机制4、使用批量抓取设定合理的批处理参数5、进行合理的O/R映射设计
mybatis调优方案:mybatis和hibernate的session是一致的所以也需要合理的session管理机制,可以进行详细的sql优化
4、hibernate查询会将所有关联表的字段全部查询出来,会导致性能消耗,当然hibernate也可以自己写sql指定字段,但这就破坏了hibernate的简洁性
mybatis的sql是自己手动编写的,所以可以指定查询字段
hibernate自带日志统计,会将sql打印出来而hibernate的sql被很多人嫌弃太丑
mybatis不带日志统计需要使用log4j,而mybatis的sql是自己手动写的调整也方便
5、hibernate与数据库管联只需在xml文件中配置即可,所有的HQL语句都与具体使用的数据库无关,移植性很好
mybatis所有的sql都是依赖所用数据库的,所以不能更换数据库,移植性差
6、hibernate是在jdbc上进行一次封装,mybatis是基于原生的jdbc,运行速度较快
总结:
hibernate优势:
hibernate的dao层开发比mybatis简单,mybatis需要维护sql和结果映射
hibernate对对象的维护和缓存要比mybatis好,对增删改查的对象维护要方便
hibernate数据库移植性好,mybatis不同的数据库要写不同的sql,移植性差
mybatis优势:
mybatis门槛较低更容易掌握
mybatis可以进行sql优化,自己编写sql可以指定查询字段
如果有上千万的表或者单次查询或提交百万数据以上不建议使用hibernate
如果统计功能,多表关联查询较多较复杂建议使用mybatis