Jpa是一种规范,Hibernate是其事实上的实现,现在非常热门的spring boot的spring-data-jpa也是以Hibernate为基础实现的,Hibernate的设计理念更加符合DDD。
MyBatis似乎上现在大部分互联网公司ORM框架的首选,他的优势在于可以更加灵活的进行数据库的操作,并且通过配置文件也可以实现查询结果到java对象的映射。对于复杂的数据库查询效率也更高等等
JdbcTemplate是spring框架对jdbc操作的封装,封装了jdbc底层的行为,包括管理数据源,数据库的连接等。
Hibernate和MyBatis都是ORM框架,Hibernate使用起来非常方便,对java开发来讲数据库操作是透明的,操作对象就相当操作数据库,像spring-data-jpa框架,数据库对象的查询只需要定义一个接口方法就可以实现,对开发来讲真的是相当方便和高效了。而且,Hibernate数据库移植性好,不用担心不同数据库sql语法的差异。虽然Hibernate这么好用,但也是有一些问题的,对于复杂的表结构来讲,映射的设计与性能的平衡是一个比较难的问题,需要对这个复杂的框架有深入的理解。
Mybatis的话相较Hibernate来说上手更快,因为它更加直接,会写sql,基本就可以直接上手了,它也不需要你去设计映射对象,无论是简单还是复杂的操作,DBA对SQL能有更大的把控力度,非常灵活,这应该就是业务变更频繁,用户增长快的互联网公司选择MyBatis的原因吧。不过有得必有失,MyBatis变得灵活的代价就是牺牲了易用性,所有查询的映射都需要自己维护,而且一旦变更数据库,很多Sql语句都需要跟着修改。
现在网上有很多声讨Hibernate的声音,觉得它过时且笨重,喜欢吹MyBatis。这种争论其实很没意思,网友们吵起来就喜欢唯一论,非得把两者搞对立。这些框架本身都有非常明显的优点,而且这些优点大多数是可以互补的,如果有必要完全可以兼容使用。