现在Dao持久层的解决方案中,大部分是采用Spring Data JPA或MyBatis解决方案,并且传统企业多用前者,互联网企业多用后者。

Spring Data JPA 是Spring Data 在JPA(Java持久层规范)和ORM(对象关系映射)框架之间抽象封装层,它不直接代替ORM框架,默认低层使用的ORM框架是Hibernate,但使用它可以灵活的在各种ORM框架之间切换,并且减少ORM框架接入部分重复代码,进而简化代码。

MyBatis是一个持久层框架的,但它设计初衷与Hibernate等全自动、符合JPA规范的ORM框架不同,重点关注关系到对象的(R——》O),而后者不仅是关系到对象的映射,还有对象到关系的映射(O——》R),设计上希望通过面向对象的方式写SQL,可以更好的屏蔽不同数据库之间的差异,抽象程度更高。而前者MyBatis需要自己手动写SQL,更灵活,但受限于开发编写SQL代码水平,可能会出现不兼容不同数据库SQL的情况。

网上也有观点认为ORM是一种反模式,认为从关系数据库到面向对象不完全是一一对应的,强行的要ORM反而会让一些设计变得很奇怪。

总的来说,Spring Data JPA和MyBatis都是很不错且被广泛使用的持久层解决方案,具体用那个可以看团队成员对技术栈熟悉程度以及项目是否对数据持久层方面有特殊需求。相对来说Spring Data JPA/Hibernate用好的话会简单些,不过复杂查询及结果集的返回没有直接用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根本就没有存在的必要...

Spring Data JPA 和MyBatis比较的更多相关文章

  1. 实例对比 hibernate, spring data jpa, mybatis 选型参考

    原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...

  2. Spring Data JPA、MyBatis还有Hibernate有什么区别

    原文:https://www.imooc.com/article/19754?block_id=tuijian_wz Spring Data JPA.MyBatis还有Hibernate有什么区别 2 ...

  3. MyBatis 与 Spring Data JPA 选择谁?

    MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...

  4. spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  5. Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源

    最近Team开始尝试使用Spring Boot + Spring Data JPA作为数据层的解决方案,在网上逛了几圈之后发现大家并不待见JPA,理由是(1)MyBatis简单直观够用,(2)以Hib ...

  6. 【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  7. JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!

    序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...

  8. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别

    基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...

  9. Spring data Jpa,Mybatis,读写锁,@Lock 使用

    Spring data jpa 支持注解式的读写锁(悲观锁),实际上这个东西硬编码也简单,但是基于Jpa 命名方式定义的Sql,只能用注解添加支持读写锁了, 不了解读写锁的可以点这里 mysql读写锁 ...

随机推荐

  1. T1164 统计数字 codevs

    http://codevs.cn/problem/1164/ 题目描述 Description [问题描述]某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不 ...

  2. luogu P1074 靶形数独

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...

  3. Win10激活Office2013的技巧

    原文:http://www.xitongzhijia.net/xtjc/20150720/53252.html KMSpico Win10激活工具 是一款能激活Win8/Win8.1/win10/Of ...

  4. 【spring boot】mybatis启动报错:Consider defining a bean of type 'com.newhope.interview.dao.UserMapper' in your configuration. 【Mapper类不能被找到】@Mapper 和@MapperScan注解的区别

    启动报错: 2018-05-16 17:22:58.161 ERROR 4080 --- Disconnected from the target VM, address: '127.0.0.1:50 ...

  5. 单点登录CAS-Demo

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 1安全证书配置 2部署服务端CAS-Server 3部署CAS-Client 4测试SSO   1,安全证书配置 CAS默认 ...

  6. nc和telnet配合使用

    nc -l 9932 -c  用nc监听9932端口 telnet 180.150.184.115 29933  telnet 29932 端口

  7. HTML制作练习

  8. long long , __int64 范围

    VC的64位整数 分别叫做__int64与unsigned __int64,其范 围分别是[-2^63, 2^63)与[0,2^64),即-9223372036854775808~9223372036 ...

  9. Creo二次开发--内存清理函数

    我们在处理模型文件时,总会遇到内存环境的清除问题.一个干净的Creo工作环境.是保证工作能顺利完毕的保障. ProMdlEraseNotDisplayed()函数提供了清除未显示模型的功能. 当须要循 ...

  10. Spring官方文档翻译——15.1 介绍Spring Web MVC框架

    Part V. The Web 文档的这一部分介绍了Spring框架对展现层的支持(尤其是基于web的展现层) Spring拥有自己的web框架--Spring Web MVC.在前两章中会有介绍. ...