两种框架本身都用过一段时间,如今想总结一下各自适用的场景,部分比较取自群友分享程序员
框架简介sql
Spring Data JPA是Spring Data的子模块。使用Spring Data,使得基于“repositories”概念的JPA实现更简单和容易。Spring Data JPA的目标是大大简化数据访问层代码的编码。做为使用者,咱们只须要编写本身的repository接口,接口中包含一些个性化的查询方法,Spring Data JPA将自动实现查询方法。
JPA默认使用hibernate做为ORM实现,因此,通常使用Spring Data JPA即会使用hibernate。咱们再看看hibernate的官方概念,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了很是轻量级的对象封装,它将POJO与数据库表创建映射关系,是一个全自动的orm框架,hibernate能够自动生成SQL语句,自动执行,使得Java程序员能够为所欲为的使用对象编程思惟来操纵数据库。数据库
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。编程
比较mybatis
维度一:hibernate是面向对象的,而MyBatis是面向关系的框架
1.面向对象考虑的是对象的整个生命周期包括在对象的建立、持久化、状态的改变和行为等,对象的持久化只是对象的一种状态,而面向关系型数据库的概念则更关注数据的高效存储和读取;
2.面向对象更强调对象状态的封装性,对象封装本身的状态(或数据)不容许外部对象随意修改,只暴露一些合法的行为方法供外部对象调用;而关系型数据库则是开放的,能够供用户随意读取和修改关系,并能够和其余表任意的关联(只要sql正确容许的状况下);
3.面向对象试图为动态的世界建模,他要描述的是世界的过程和规律,进而适应发展和变化,面向对象老是在变化中处理各类各样的变化。而关系型模型为静态世界建模,它经过数据快照记录了世界在某一时候的状态,它是静态的。异步
维度二:从项目功能类型比较(这个真心须要JPA的高手哦,请定位清晰再参考)微服务
数据分析型的OLAP应用适合用MyBatis,事务处理型OLTP应用适合用JPA。
越是复杂的业务,越须要领域建模,建模用JPA实现最方便灵活。可是JPA想用好,门槛比较高,不懂DDD的话,就会沦为增删改查了。
复杂的查询应该是经过CQRS模式,经过异步队列创建合适查询的视图,经过视图避免复杂的Join,而不是直接查询领域模型。
从目前的趋势来看OLAP交给NoSQL数据库可能更合适性能
维度三:项目维护迭代维度比较(长期快速迭代类、变更较小的类型)优化
追求快速迭代,需求快速变动,灵活的 mybatis 修改起来更加方便,并且通常每一次的改动不会带来性能上的降低。JPA常常由于添加关联关系或者开发者不了解优化致使项目愈来愈糟糕(这里可能要考研功力了)。
我的总结(请参考上面一些维度,或者还有许多其它维度,总结本身的理解)
1.表关联较多的项目,优先使用mybatis
2.持续维护开发迭代较快的项目建议使用mybatis,由于通常这种项目须要变化很灵活,对sql的灵活修改要求较高
3.对于传统项目或者关系模型较为清晰稳定的项目,建议JPA(好比DDD设计中的领域层)
4.目前微服务比较火,基于其职责的独立性,若是模型清晰,能够考虑使用JPA,但若是数据量较大全字段返回数据量大的话可能在性能有影响,须要根据实际状况进行分析