Spring Data JPA 和MyBatis比较
现在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比较的更多相关文章
- 实例对比 hibernate, spring data jpa, mybatis 选型参考
原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...
- Spring Data JPA、MyBatis还有Hibernate有什么区别
原文:https://www.imooc.com/article/19754?block_id=tuijian_wz Spring Data JPA.MyBatis还有Hibernate有什么区别 2 ...
- MyBatis 与 Spring Data JPA 选择谁?
MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...
- spring data jpa 全面解析(实践 + 源码分析)
前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...
- Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源
最近Team开始尝试使用Spring Boot + Spring Data JPA作为数据层的解决方案,在网上逛了几圈之后发现大家并不待见JPA,理由是(1)MyBatis简单直观够用,(2)以Hib ...
- 【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)
前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...
- JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!
序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...
- jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...
- Spring data Jpa,Mybatis,读写锁,@Lock 使用
Spring data jpa 支持注解式的读写锁(悲观锁),实际上这个东西硬编码也简单,但是基于Jpa 命名方式定义的Sql,只能用注解添加支持读写锁了, 不了解读写锁的可以点这里 mysql读写锁 ...
随机推荐
- solr 简要笔记
创建搜索1 创建directory 2.分词器 analyzer 3indexwriter writer dic an 4.document doc.add writer.adddocument(do ...
- VC/MFC中计算程序运行时间
转自原文VC/MFC中计算程序运行时间 说明,这四种方法也分别代表了类似的实现,在MFC中,所可以从哪些类集合去考虑. 方法一 利用GetTickCount函数(ms) CString str; lo ...
- SolidEdge 如何绘制局部视图 局部放大图
创建局部视图(局部放大图),先选择要创建局部放大图的视图,然后绘制一个小圆,然后绘制一个大圆即可. 如果要绘制不规则形状的局部放大图,则点击了局部放大图之后,点击绘制草图的按钮 随后可以用相切 ...
- IE 扩展调用主窗体中的函数
IE 扩展调用主窗体中的函数 在函数名前加上 parentWindow 就可以.如: <script> var doc = external.menuArguments.docum ...
- rtsp 播放器
http://blog.csdn.net/niu_gao/article/details/7753672 /********************************************** ...
- MapReduce简述、工作流程及新旧API对照
什么是MapReduce? 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查而且数出有多少张是黑桃. MapReduce方法则是: 1. 给在座的全部玩家中分配这摞牌. 2. 让每一个玩家数自己手 ...
- sanic官方文档解析之streaming(流动,滚动)和class_based_views(CBV的写法)
1,streaming(流媒体) 1.1请求流媒体 Sanic允许你通过流媒体携带请求数据,如下,当请求结束await request.stream.read()就会返回None,仅仅只有post请求 ...
- debian iptables持久化
1 保存iptables iptables-save > /etc/iptables.rules 2 创建启动文件 touch /etc/network/if-pre-up.d/iptabl ...
- Cocos2d-js异步图片加载
这里说的是在需要的使用加载图片,比如游戏中的某个关卡的图片,不用在游戏一开始就加载(万一用户玩不到那关,岂不是很冤,流量费了那么多),否则 载入速度也慢.这种方式加载资源要用到cc.loader官方文 ...
- Shell编程——Shell中的数学运算
在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...