如今Dao持久层的解决方案中,大部分是采用Spring Data JPA或MyBatis解决方案,而且传统企业多用前者,互联网企业多用后者。java
Spring Data JPA 是Spring Data 在JPA(Java持久层规范)和ORM(对象关系映射)框架之间抽象封装层,它不直接代替ORM框架,默认低层使用的ORM框架是Hibernate,但使用它能够灵活的在各类ORM框架之间切换,而且减小ORM框架接入部分重复代码,进而简化代码。sql
MyBatis是一个持久层框架的,但它设计初衷与Hibernate等全自动、符合JPA规范的ORM框架不一样,重点关注关系到对象的(R——》O),然后者不只是关系到对象的映射,还有对象到关系的映射(O——》R),设计上但愿经过面向对象的方式写SQL,能够更好的屏蔽不一样数据库之间的差别,抽象程度更高。而前者MyBatis须要本身手动写SQL,更灵活,但受限于开发编写SQL代码水平,可能会出现不兼容不一样数据库SQL的状况。数据库
网上也有观点认为ORM是一种反模式,认为从关系数据库到面向对象不彻底是一一对应的,强行的要ORM反而会让一些设计变得很奇怪。安全
总的来讲,Spring Data JPA和MyBatis都是很不错且被普遍使用的持久层解决方案,具体用那个能够看团队成员对技术栈熟悉程度以及项目是否对数据持久层方面有特殊需求。相对来讲Spring Data JPA/Hibernate用好的话会简单些,不过复杂查询及结果集的返回没有直接用MyBatis灵活方便,可参考以下解决方案:mybatis
做者:beamofsoul
连接:https://www.zhihu.com/question/53706909/answer/200878397
使用Spring Data JPA + QueryDSL + Hibernate。 基本的增删改查和调用存储过程经过Spring Data JPA Repository来解决 稍微复杂的查询或是批量操做使用QueryDSL或Spring Data Specification的API来解决 特别特别复杂的查询操做可使用Spring Data JPA Repository的注解定义native sql来解决 全部持久层底层操做都由Hibernate来支持,且为了保证效率和性能,不须要的包/特性就不须要引入,基本上使用core包就可以解决问题,固然若是有须要能够加上orm 全过程脱离任何格式(.java除外)的配置文件,都使用Java Config的方式进行配置,除了须要抽象出一套本身架构的持久层的API之外,只须要提供一个独立的空内容.java配置文件(若是不须要多数据源配置的话),在类上面配置RepositoryFactoryBean和Repository接口包路径架构
全使用过程当中,除了native sql处之外,所有持久层操做都是类型安全的,特别是使用QueryDSL或Specification后... 今后,mybatis根本就没有存在的必要...框架