一、JPA简介

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 [1]
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

总结:JPA是ORM的一套标准,它是Sun公司在JavaEE 5中提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具,来管理Java应用中的关系数据,JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。很多ORM框架都是实现了JPA的规范,如:Hibernate、EclipseLink。

二、JPA包括三方面技术

1、ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
2、API
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
3、查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

三、JPA 的优势

1、标准化
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
容器级特性的支持
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
2、简单方便
JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易地掌握。JPA基于非侵入式原则设计,因此可以很容易地和其它框架或者容器集成。
3、查询能力
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
4、高级特性
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

四、数据库是用sql操作的,那用对象操作,由谁来产生SQL?

答:JPA实现框架

五、JPA的实现者

既然我们说JPA是一套标准,意味着,它只是一套实现ORM理论的接口。没有实现的代码。
那么我们必须要有具体的实现者才可以完成ORM操作功能的实现!
市场上的主流的JPA框架(实现者)有:
Hibernate (JBoos)、EclipseTop(Eclipse社区)、OpenJPA (Apache基金会)。

六、关于JPA常见问题

1、推荐对主键使用“long”还是“Long”?如果允许使用null作为值,将会如何?
答:这实际上取决于您的数据模型。如果您的数据模型允许主键为null,那么使用Long,如果您的数据模型规定主键列不能为null,则使用 long更合适。总的来说,我认为对于非复合主键,允许null作为合法值容易产生混淆,因此我倾向于使用long,而不是Long。
2、JPA是否支持组合主键?
答:JPA支持自然ID和组合ID,以及数据库指派或实现指派的数字值。
3、JPA是否支持JDK1.4?
答:JPA需要Java 5或更新版本。
4、使用范围查询时,它是否也会返回结果总数(例如,返回538项结果中的1-10项)?
答:不,要想获得总数,必须发出另外一个查询。通用模式是,在第一次执行搜索时获得总数,然后通过页面浏览结果,将总数存储到方便的位置(会话状态、cookie等):
5、与Hibernate相比,JPA是不是更好?
答:JPA是规范,而Hibernate是实现。因此,这是不同事物的比较。可以肯定,使用标准API比使用专有API有更多优势,但不存在真正的劣势。
6、规范是否解决了缓存问题?
答:JPA规范没有解决二级缓存问题(EntityManagerFactory-级),但是提供了实现该缓存必须遵守的一些数据锁定和一致性规则,即使在启用缓存时也是如此。
7、使用乐观锁定时,@Version注释仅支持int字段吗,它可以是datetime吗?
答:根据JPA的要求,@Version可以对int、long、short、Integer、Short、Long和Timestamp类型的字段使用。

Java开发必看JPA概念大全相关推荐

  1. Java开发必看ORM概念大全

    一.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中.本质上就是 ...

  2. Java开发必看!拼多多+携程+蚂蚁金服技术面集合

    2021第一次Java面试,我去了快手.快手的面试挺有挑战性的,而且还特别有意思,感觉啥都能问到.(二面是10天前约的面试,差点要忘了)然后是HR面,前天我就收到offer. 常见的分布式事务场景 分 ...

  3. Spring基础知识汇总 Java开发必看

    Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅 ...

  4. 46道面试题带你了解中高级Java面试,Java开发必看书籍

    前言 分布式事务主要解决分布式一致性的问题.说到底就是数据的分布式操作导致仅依靠本地事务无法保证原子性.与单机版的事务不同的是,单机是把多个命令打包成一个统一处理,分布式事务是将多个机器上执行的命令打 ...

  5. java语言注释符号,高级Java开发必看

    架构原则:"4 要 1 不要" 如果你是一个架构师,你首先要勾勒出一个轮廓,想一想如何构建一个超大流量并发读写.高性能,以及高可用的系统,这其中有哪些要素需要考虑? 我把这些要素总 ...

  6. 带你手撸红黑树,高级Java开发必看

    Kubernetes简介 Kubernetes(简称K8S,K和S之间有8个字母)是用于自动部署,扩展和管理容器化应用程序的开源系统.它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现.Kub ...

  7. Web 安全漏洞之 XSS 攻击,Java 开发必看!

    编者说:作为JS系工程师接触最多的漏洞我想就是 XSS 漏洞了,然鹅并不是所有的同学对其都有一个清晰的认识.今天我们请来了@卢士杰 同学为我们分享他眼中的 XSS 漏洞攻击,希望能帮助到大家. 什么是 ...

  8. 8月22日云栖精选夜读 | Java开发者必看!机器学习开发库精选!

    本文将介绍一些目前流行的.强大的基于Java的机器学习库. 热点热议 Java开发者必看!机器学习开发库精选! 作者:[方向] 学界 | 不!机器学习才不只是统计学的美化! 作者:技术小能手  发表在 ...

  9. Java常见面试题 Java面试必看 (二)

    Java常见面试题 Java面试必看 (一) 十一.Spring Boot/Spring Cloud 104.什么是 spring boot? Spring Boot 是由 Pivotal 团队提供的 ...

最新文章

  1. 将moss 2007的模板文件导入到moss 2010
  2. Hinton团队CV新作:用语言建模做目标检测,性能媲美DETR
  3. mysql 如何搜索自增列_mysql 如何搜索自增列
  4. Spark系列(八)Worker工作原理
  5. Centos7 之目录处理命令(八)
  6. SoftGrid教程系列
  7. poj 3461 Oulipo kmp 预处理
  8. podman,ctr镜像导入导出
  9. 高性能Mysql(第三版)笔记
  10. invest模型的python安装方法,两种方法
  11. dell笔记本电脑驱动_2020年最佳笔记本电脑top榜
  12. 软件需求,概要设计,详细设计(文档)怎么做,做什么?
  13. 论文阅读笔记------摄影测量与深度学习
  14. jquery File upload 的一个例子
  15. Android开发自定义相机,自定义拍照界面
  16. 数字图像处理:图像几何变换(Matlab实现几何变换+原理解析
  17. Elasticsearch 7.X RESTful 风格 高级查询
  18. windows本地git关联远程gitlab仓库
  19. html5开发android应用
  20. ORA-16032: parameter LOG_ARCHIVE_DEST_3 destination string cannot be translated

热门文章

  1. Party(HDU-3062)
  2. 理论基础 —— 线性表 —— 单链表
  3. 信息学奥赛一本通C++语言——1088:分离整数的各个数
  4. 58 MM配置-评估和科目设置-OBYC配置自动记账
  5. 15 CO配置-控制-内部订单-维护分配结构
  6. 日语学习-多邻国-饮食
  7. mysql insert id的参数_Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)
  8. 如何制定客户留存策略_企业如何制定数字化转型策略?
  9. python网络编程项目_python网络编程(1):客户端与网络编程简介
  10. C语言 memset函数简单实现