jpa findone怎么用_Jpa VS MyBatis,你用哪个?

经常看到有小伙伴在讨论 JPA 和 MyBatis 这两个孰优孰劣的问题,其实松哥觉得这是一个伪命题,没必要为这种问题争个面红耳赤,每种框架有它存在的道理,也有各自擅长的事情,今天松哥就和大家来聊聊这两个框架,顺便来了解一下大家在开发中都用的是哪一个数据库框架?

以下内容,松哥尽量保持一个客观中立立场,大家不要喷我,说的不完善的地方大家可以留言补充。

JPA

JPA是什么

  1. Java Persistence API:用于对象持久化的 API

  2. Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层 96ef34874e7774aa90273856f0e28637.png

JPA和Hibernate的关系

  1. JPA 是 Hibernate 的一个抽象(就像JDBC和JDBC驱动的关系);

  2. JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架,这是因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现;

  3. Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现

  4. 从功能上来说, JPA 是 Hibernate 功能的一个子集

JPA的供应商

JPA 的目标之一是制定一个可以由很多供应商实现的 API,Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现,JPA 供应商有很多,常见的有如下四种:
1.Hibernate
JPA 的始作俑者就是 Hibernate 的作者,Hibernate 从 3.2 开始兼容 JPA。
2.OpenJPA
OpenJPA 是 Apache 组织提供的开源项目。
3.TopLink
TopLink 以前需要收费,如今开源了。
4.EclipseLink

JPA的优势

  1. 标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。

  2. 简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。

  3. 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

  4. 支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型

  5. ....

JPA包含的技术

  1. ORM 映射元数据:JPA 支持 XML 和 JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

  2. JPA 的 API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC 和 SQL 代码中解脱出来。

  3. 查询语言(JPQL):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 SQL 紧密耦合。

MyBatis

什么是 MyBatis

MyBatis 也是一个 Java 持久化框架,它通过 XML 描述符或 Annotation 把对象与存储过程或SQL语句关联起来。与 JPA 这种对象关系映射(ORM)框架不同,MyBatis 并没有将 Java 对象与数据库表关联起来,而是将 Java 方法与 SQL 语句关联。MyBatis 允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性,其实 MyBatis 最吸引松哥的地方就是完全控制 SQL 的执行。

与 JDBC 相比,MyBatis 简化了查询结果映射:SQL 语句在一行代码中就能执行。MyBatis 提供了一个映射引擎,声明式的把 SQL 语句执行结果与对象树映射起来。通过使用一种内建的类 XML 表达式语言,或者使用 Apache Velocity 集成的插件,SQL 语句可以被动态的生成,这些特性都可以使开发者更方便的使用 MyBatis。MyBatis 也支持声明式数据缓存,当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库取得的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。

MyBatis 优势

  1. 上手容易,也更加容易掌握。

  2. 由于自己掌握 SQL ,因此可以写出更加优质的 SQL ,提高 SQL 的执行效率。

  3. 多表关联查询时,MyBatis 要灵活一些,也更具备优势。

  4. .....

怎么用

关于这两个框架的用法,松哥在公众号都写过专门的文章介绍,读者可以翻一下历史记录,三年前还在 CSDN 写过一个 MyBatis 专栏,有兴趣的小伙伴可以去松哥专栏看看。

你用哪个

最后松哥来做一个小小的调查,看看大家在开发中用的哪个?

大家也可以留言说说自己项目中用了哪一个数据持久化框架,出于什么样的考虑用了该框架?

7c18ad815476ef8cf44213d54502f117.gifc476453ec40239e2e6f4545b0bb37949.png关注牧码小子,后台回复 Java ,领取松哥为你精心准备的Java干货!7c18ad815476ef8cf44213d54502f117.gif

往期文章一览

1、工作之余,你是怎么提高技术的?

2、两年了,我写了这些干货!

3、想和大家谈一点合作

4、一个Java程序猿眼中的前后端分离以及Vue.js入门

5、跟着平台混了四年,现在要单飞了!

4bc62cef8018dc51456165c26847b64d.png你点的每个在看,我都认真当成了喜欢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家开放大学本科计算机应用基础,【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】.docx...

【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案 盗传必究 形考作业一 一、单选题 1当前的计算机一般被认为是第四代计算机,它所采用…

Reset Password 重置密码 (CentOS 5,6,7 ; Juniper Networks: SRX100 )

一些重置root 密码的文档分享(来自官网): CentOS 5,6,7 Juniper Networks : SRX100 链接:https://share.weiyun.com/5BM4kwK 密码:f3t5xu转载于:https://www.cnblogs.com/ling3blog/p/905018…

python正则表达式中的转义字符_python 正则表达式之转义字符

最近在整理python相关的知识,使用python对网站进行爬取数据的时候,需要使用到转义字符,之前对转义字符理解一直比较模糊,并且在python中还有一个叫原生字符r。所以通过网上调查资料对该内容进行整理,已备不时之需。 字…

计算机控制系统a卷-答案,计算机控制系统2010-2011年试题A答案

济南大学2010 ~2011学年第一学期课程考试试卷(A卷)4、振铃现象:(虽然闭环系统输出较快地趋向于稳态值)……课 程 计算机过程控制系统 授课教师 王小平 数字调节器输出u(kT)以2T为周期上下摆动。………考试时间 2010年 12 月 30日 考试班级 … ……学 号 …

非root用户ssh 执行 sudo远程机器免密钥

非root用户ssh 执行 sudo远程机器免密钥 # 1、登陆192.168.1.10 ssh-keygen -t rsa # 一路回车 # 将公钥添加到认证文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 并设置authorized_keys的访问权限 chmod 600 ~/.ssh/authorized_keys [rootwebserver ~]# c…

分数的拆分原理和方法_常见的节税原理你知道吗?

节税可以帮助大家合理的降低税收支出,然后实现企业以及利益的最大化。但是节税的时候一般都会使用一些节税原理,因为不同的结节税原理会有不同的节税方法,这样节税效果也是不同的,那么生活中有哪些常见的节税原理呢?第…

Flume实战监听文件夹内文件变化

Flume官网有多种场景的source,sink,channel的配置 1、flume安装目录下新建文件夹 example 2、在example下新建文件 spooldir-logger.conf内容如下: a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source a1.source…

python如何获取输入_python如何从键盘获取输入实例

python中使用input()函数来获取用户输入 函数 input() 让程序暂停运行,等待用户输入一些文本,获取用户的输入后,Python将其存储到一个变量中,以方便后期使用。 name input("Tell me your name,and I will repeat it back to…

cad打印本计算机未配置,CAD打印的基本设置详细教程

CAD打印的基本设置详细教程开始画图之前我们就考虑到打印的需要,要用多大纸张,打印比例应该设置成多少,打印后的字高、线宽、颜色应该设置成多少,在绘制图形的时候,这些为打印而做的准备工作必须做好。要想正确地打印图…

原 BinaryWriter和BinaryReader(二进制文件的读写)

原文 BinaryWriter和BinaryReader(二进制文件的读写) C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 StreamReader类增强了FileStream,它让我们在字符串级别上操…

python redis 消息队列_Python的Flask框架应用调用Redis队列数据的方法

任务异步化打开浏览器,输入地址,按下回车,打开了页面。于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容。 我们每天都在浏览网…

go ip过滤_用Go实现自己的爬虫

作者:Masamune在日常生活中,我们时常会遇到一些采集数据相关的需求,比如获取一些官方数据整理到excel表中进行统计,聚合一些网页新闻提高自己的阅读效率等等。虽然许多爬虫教程都是用python写的,但是我认为Go语言是比p…

Flume实战采集文件内容存入HDFS

1、flume安装目录下新建文件夹 example 2、在example下新建文件 log-hdfs.conf 内容如下: # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1#exec 指的是命令 # Describe/configure the source a1.sources.r1.type exec #F…

总结计算机语言的基本元素,认识程序设计中基本元素教案.doc

曲靖师院计算机科学与工程学院学生试讲教案表课题:认识程序中的基本元素 年级:高一 课时:1课时授课时间:20分钟 讲授者:秦巧林 指导教师:崔丽梅教学目标知识与技能1. 掌握计算机程序中常用的常量、变量、函…

python海龟绘图圆形_python之海龟绘图

1. 基本功能介绍 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟&a…

PLSQL Developer导入csv文件到oracle

csv文件内容: 要导入的表结构 create table RPT_MONILUCE_2_P01 ( imsi NUMBER, road_line NUMBER, ci NUMBER, diff NUMBER, rn NUMBER, sdate DATE, report_id NUMBER(20) ) 步骤: 1、在csv第一行上增加…

erwin 不能输入中文_国产开源建模软件PDMan与国外商业建模软件ERwin的主要功能比较...

在数据库建模的过程中,我们经常会使用到ERwin或者Power Designer之类的建模软件,来构建我们的逻辑模型和物理模型。但是这类软件都属于商业软件,需要企业购买相应的许可证授权。有些时候,我们会在没有购买这类商业建模软件的环境下…

Confluence 6 workbox 通知包含了什么

当一个用户在 Confluence 中进行下面的操作的时候,workbox 将会显示为通知: 分享(Shares) 你的页面或者博客页面。 提及(Mentions) 你的页面,博客页面,回复或者任务。你 关注&#x…

已知一点经纬度,方位角,距离,求另一点经纬度

参考了博文:http://blog.csdn.net/pyx6119822/article/details/52298037 ------------------------------------------------ package hellotest;public class LonLatTest3 {/** 大地坐标系资料WGS-84 长半径a6378137 短半径b6356752.3142 扁率f1/298.2572236*//**…

计算机一级excel如何选择2个,2017年计算机一级excel操作题(2)

(3)建立和编辑图表选择工作簿中需要编辑的表单,为其添加图表,其具体操作如下:步骤1选取“电脑城日出货统计表”的“配件”和“所占比例”两列,选择【插入一图表】命令,在弹出的“图表向导”对话框“标准类型”的“图表…