Hibernate和Mybatis的增,删,改,查,对于业务逻辑层来说大同小异,对于映射层而言Hibernate的配置不需要接口和SQL,相反Mybatis是需要的。对于Hibernate而言,不需要编写大量的SQL,就可以完全映射,同时提供了日志,缓存,级联(级联比Mybatis强大)等特性,此外还提供HQL对POJO进行操作,使用十分方便,但是他也有致命缺陷。
由于无需SQL,当多表关联超过3个时,通过Hibernate的级联会造成太多性能的丢失,又或者我现在访问一个财务的表,然后他会关联财产信息表,财产又分为机械,原料等,显然机械和原料的字段是不一样的,这样关联字段只能根据特定的条件变化而变化,而Hibernate无法支持这样的变化。遇到存储过程,Hibernate只能作罢。更为关键的是性能,在管理系统的时代,对于性能的要求不是那么苛刻,但是在互联网时代性能就是系统的根本,响应过慢就会丧失客户,试想一下谁会去用一个经常需要等待10s以上的应用呢?
以上的问题Mybatis都可以解决,Mybatis可以自由书写SQL,支持动态SQL,处理列表,动态生成表名,支持存储过程。这样就可以灵活地定义查询语句,满足各类需求和性能优化的需要,这些在互联网系统中是十分重要的。
但Mybatis也有缺陷。首先,他需要编写SQL和映射规则,其工作量稍大于Hibernate。其次,它支持的工具也有限,不像Hibernate那样有许多的插件可以帮助生成映射代码和关联关系,而即使使用生成工具,往往也需要开发者进一步简化,Mybatis通过手工编码,工作量相对大些。
所以对于性能要求不太苛刻的系统,比如管理系统,ERP等推荐使用Hibernate;而对于性能要求高,响应快,灵活的系统则推荐使用Mybatis。
全文来自《JavaEE 互联网轻量级框架整合开发》