JPA学习
来源:互联网 发布:四川网络教育学校 编辑:程序博客网 时间:2024/05/16 08:21
简介
JPA全称Java Persistence API,即Java 持久层 API 。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
API
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
供应商
JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API。因此开发人员只需使用供应商特有的API来获得JPA规范没有解决但应用程序中需要的功能。尽可能地使用JPA API,但是当需要供应商公开但是规范中没有提供的功能时,则使用供应商特有的API。
Hibernate
PA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证
只要熟悉Hibernate或者其他ORM框架,在使用JPA时会发现其实非常容易上手。例如实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,明眼人一看就知道,这些状态都是一一对应的。再如flush方法,都是对应的,而其他的再如说Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了manager,所以从Hibernate到JPA的代价应该是非常小的。
同样,JDO,也开始兼容JPA。在ORM的领域中,看来JPA已经是王道,规范就是规范。在各大厂商的支持下,JPA的使用开始变得广泛。
Spring
Spring + Hibernate 常常被称为 Java Web 应用人气最旺的框架组合。而在 JCP 通过的 Web Beans JSR ,却欲将JSF + EJB + JPA 、来自 JBoss Seam(Spring 除外)的一些组件和EJB 3(能够提供有基本拦截和依赖注入功能的简化 Session Bean框架)的一个 Web 组合进行标准化。Spring 2.0 为 JPA 提供了完整的 EJB容器契约,允许 JPA在任何环境内可以在 Spring 管理的服务层使用(包括 Spring 的所有DI 和 AOP增强)。同时,关于下一个Web应用组合会是 EJB、Spring + Hibernate 还是 Spring + JPA 的论战,早已充斥于耳。
在Spring 2.0.1中,正式提供对JPA的支持,这也促成了JPA的发展,要知道JPA的好处在于可以分离于容器运行,变得更加的简洁。
参考资料:
http://baike.baidu.com/link?url=k4scKImWd-XBpXYV0oFuGmoSoMPU6chvrOE8HW_eQ23WNjVw92lDwAwEWuKEK_Dytu2kiWV2u041pGoPWMFRX_
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- 学习JPA
- JPA学习笔记-JPA基础
- JPA学习笔记-JPA进阶
- jpa学习1---jpa入门
- 传智播客jpa学习,jpa整合hibernate
- JPA学习笔记(二):JPA初步使用
- JPA学习笔记(三):JPA关系处理
- JPA(三):JPA+Hibernate 基础学习
- JPA 学习篇(一)JPA简介
- 解决Idea 2016打开Andorid项目报java home is different
- The operator of C++ : sizeof
- 多线程系列提高(2)--线程安全性
- JVM性能调优
- Mysql数据库int(1)和tinyint(1)的区别&&扩展阅读
- JPA学习
- IOS之同步请求、异步请求、GET请求、POST请求
- win7 64位下安装多版本的python及tensorflow安装
- mongodb以background方式建立索引
- Retrofit传入body返回对象或json字符串
- JavaScript setter与getter
- github中提问
- Python爬虫利器Beautiful Soup
- MFC中char*,string和CString之间的转换