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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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…

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

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

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…

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之类的建模软件,来构建我们的逻辑模型和物理模型。但是这类软件都属于商业软件,需要企业购买相应的许可证授权。有些时候,我们会在没有购买这类商业建模软件的环境下…

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

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

python的基本语术_一起学python-彻底掌握专业术语“变量”的概念

昨天分享了笨方法学习编程,今天就让我们通过实战来接触python,掌握专业术语“变量”的概念吧 python 中的变量的基本概念和初中代数的方程式X的概念是一样的,只是在计算机程序当中这个X不仅仅可以代表一个数字,还可以代表一段文字…

lamp自动部署工具_Linux一键配置工具ezhttp介绍

简介: ezhttp是一个Linux一键配置工具,采用bash脚本语言编写。支持自动配置LAMP,LNMP,LNAMP环境,以前提供各种其它的配置工具,如自动配置swap,配置iptables等。项目托管在github,地址为https://github.com/centos-bz/e…

git设置全局账号密码_jenkins2.222使用之二、总体设置

构建前提:由于构建的时候是基于maven、git(码云)以及jdk1.8来的,所以这些都需要和jenkins安装在同一台服务器上面。全局工具配置:1、配置jdk系统管理-全局工具配置-jdk,配置如下:jdk版本可以配置多个,构建的时候&#…

Mybatis源码之(TypeAliasRegistry)TypeAlias别名实现机制

原文链接:http://blog.csdn.net/qq924862077/article/details/52612589 ---------------------------------- 在Mybatis编程中我们经常会用到将某个bean作为参数类型parameterType或者结果返回值类型ResultType,所以很多时候我们需要把完成的Bean的包名…

Java中Synchronized的用法

2019独角兽企业重金招聘Python工程师标准>>> 《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念…

concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...

作者:Tom HardyDate:2020-02-01来源:MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)原文链接:https://arxiv.org/abs/1911.07217主要内容实时语义分割是一项具有挑战性的任务,因…

wifi信号手机测试软件,专业的WiFi检测工具有哪些?如何解决wifi信号不好?

原标题:专业的WiFi检测工具有哪些?如何解决wifi信号不好?有朋友wifi测试软件有哪些?WiFi信号和声音一样,强弱都是可以测量的,检测WiFi的方法有很多,作为普通的家庭用户,我们有时需要…

python创建数组与列表_python基础(三):数组和列表

下面是小凰凰的简介,看下吧! 💗人生态度:珍惜时间,渴望学习,热爱音乐,把握命运,享受生活 💗学习技能:网络 -> 云计算运维 -> python全栈( 当前正在学习…

Mybatis之typeAlias配置的3种方法

原文链接&#xff1a;http://www.cnblogs.com/lxcmyf/p/6444120.html ------------------------------- 扩展阅读&#xff1a;http://blog.csdn.net/zengmingen/article/details/70163420 ------------------------------------ 1.定义别名&#xff1a; <typeAliases>…