`
Asen丶
  • 浏览: 39132 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JPA规范及其它持久层框架

阅读更多

JPA是一种规范,而hibernate是JPA的一种实现

JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。

 

JPA是目前比较流行的一种ORM技术之一,所以他拥有ORM技术的各种特点,当然他还有自己的一些优势:

 

1 标准化

  JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问 API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

2 对容器级特性的支持

  JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

3 简单易用,集成方便

  JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释;JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。

4 可媲美JDBC的查询能力

  JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

5 支持面向对象的高级特性

  JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

 

实例中使用的注释列表如下。

 

注解

描述

@Entity

声明类为实体或表。

@Table

声明表名。

@Basic

指定非约束明确的各个字段。

@Embedded

指定类或它的值是一个可嵌入的类的实例的实体的属性。

@Id

指定的类的属性,用于识别(一个表中的主键)。

@GeneratedValue

指定如何标识属性可以被初始化,例如自动,手动,或从序列表中获得的值。

@Transient

指定的属性,它是不持久的,即,该值永远不会存储在数据库中。

@Column

指定持久属性栏属性。

@SequenceGenerator

指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。

@TableGenerator

指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。

@AccessType

这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),然后进入FIELD明智的。如果设置@AccessType(PROPERTY),然后进入属性发生明智的。

@JoinColumn

指定一个实体组织或实体的集合。这是用在多对一和一对多关联。

@UniqueConstraint

指定的字段和用于主要或辅助表的唯一约束。

@ColumnResult

参考使用select子句的SQL查询中的列名。

@ManyToMany

定义了连接表之间的多对多一对多的关系。

@ManyToOne

定义了连接表之间的多对一的关系。

@OneToMany

定义了连接表之间存在一个一对多的关系。

@OneToOne

定义了连接表之间有一个一对一的关系。

@NamedQueries

指定命名查询的列表。

@NamedQuery

指定使用静态名称的查询。

 

JPA基础教程:

http://www.yiibai.com/jpa/

 

 

 

 

JPA和hibernate关系

一些重要的注解如Column, OneToMany等,hibernate没有提供,这说明jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两 套注解。曾经看过两个很经典的问题,

第一个是问如果想用hibernate注解,是不是一定会用到jpa的。网友的回答:“是。如果hibernate认为jpa的注解够用,就直接用。否则会弄一个自己的出来作为补充”

 

第二个是问,jpa和hibernate都提供了Entity,我们应该用哪个,还是说可以两个一起用?网友回答说“Hibernate的Entity是继承了jpa的,所以如果觉得jpa的不够用,直接使用hibernate的即可”。

 

 

EJB:

http://www.yiibai.com/html/ejb

 

在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。在EJB3.0推出以后,实体Bean被单独分了出来,形成了新的规范JPA

 

 

JPA和EJB关系:

简单的说,JPA虽然出自EJB3,但是其使用的范围却大于EJB3,不仅可以在JavaEE5中,也可以在JavaSE的环境中,如图所示EJB3和JPA的关系.



 

 

 

JDBC

Java语言访问数据库的一种规范,是一套APIJDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。

 

为了使客户端程序独立于特定的数据库驱动程序,JDBC规范建议开发者使用基于接口的编程方式,即尽量使应用仅依赖java.sqljavax.sql中的接口和类。

 

 

ORM

ORM Object-Relation-Mapping,即对象关系影射技术,是对象持久化的核心。ORM是对JDBC的封装,从而解决了JDBC的各种存在问题:

a) 繁琐的代码问题

 

JDBCAPI编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。例如:PreparedStatement pstmt=con.prepareStatment("insert into account value(?,?,?,?,?,?,?,?,?)");

 

ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。

 

b) 数据库对象连接问题

 

关系数据对象之间,存在各种关系,包括111对多、多对1、多对多、级联等。在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很费时费力的过程。

 

ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。

 

c) 系统架构问题

 

JDBC属于数据访问层,但是使用JDBC编程时,必须知道后台是用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息。

 

使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter Setter方法,即可实现对后台数据库的操作,程序员不必知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。

 

d) 性能问题

 

采用JDBC编程,在很多时候存在效率低下的问题。

 

pstmt =conn.prepareStatement("insert into user_info values(?,?)");

       for (int i=0; i<1000; i++) {

          pstmt.setInt(1,i);

          pstmt.setString(2,"User"+i.toString());

          pstmt.executeUpdate();

       }

 

以上程序将向后台数据库发送1000SQL语句执行请求,运行效率较低。

 

采用ORM技术,ORM框架将根据具体数据库操作需要,会自动延迟向后台数据库发送SQL请求,ORM也可以根据实际情况,将数据库访问操作合成,尽量减少不必要的数据库操作请求。

 

 

 

ORM框架:

目前ORM框架的产品非常之多,除了个大公司、组织的产品外,其他一些小团队也在推出自己的ORM框架。目前流行的ORM框架有如下这些产品:

1Enitiy EJBEnitiy EJB实际上也是一种ORM技术,这是一直备受争议的组件技术。事实上,EJBJava EE的蓬勃发展赢得了极高的声誉,EJB作为一种重量级、高花费的ORM技术具有不可比拟的优势。就其他架构设计来讲,依然非常优秀。即使现在十分流行的轻量级Java EE架构,其实质是对经典Java EE架构的模仿——虽然存在些许的改进。EJB3.1也采取了低侵入式的设计,增加了Annotation,也具有极大的吸引力。

2hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案。整个HIbernate项目也一并投入了Jboss的怀抱,而JBoss又加入了RedHat组织,所以现在Hibernate属于RedHat 的一部分。Hibernate 灵巧的设计、优秀的性能,还有其丰富的文档都是其风靡全球的重要因素。

3iBatis Apache软件基金组织的子项目。与其称它为一种ORM框架,不如称它为一中“SQL Mapping”框架。曾经在J2EE的开发中扮演非常重要的角色,但因为不支持存粹的面向对象操作,因此现在逐渐地被取代。但是在一些公司,依然占有一席之地,特别是一些对数据访问特别灵活的地方,iBatis更加的灵活,它允许开发人员直接编写SQL语句。

4TopLinkOracle公司的产品,作为一个遵循OTN协议的商业产品,TopLink 在开发过程中可以自由地下载和使用,但是一旦作为商业产品被使用,则需要收取费用。由于这一点,TopLink 的市场占有率不高。

5OBJApache软件基金组织的子项目。另一个开源的ORM框架,可以说是Apache作为iBatis之后的取代产品,也是非常优秀的O/R Mapping框架,但是由于Hibernate 的广芒太盛,所以并未有广泛的使用,而且由于OJB的开发文档不是很多,这也影响了OJB的流行。



 

  • 大小: 92.1 KB
  • 大小: 21.1 KB
1
2
分享到:
评论

相关推荐

    JPA深度刘宝宝剖析版第一讲

    Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层 JPA的优势: 标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。 简单易用,...

    Hibernate框架包

    轻量级JavaEE应用的持久层框架,是一个完全的ORM框架。(说完这句话,肯定有很多人懵圈了,下面我来一个个解释)  持久化:将我们想要保存的数据保存到硬盘上,也就是我们电脑的磁盘上,为什么叫持久化呢,就是数据...

    openjpa

    Apache OpenJPA是Apache软件基金会的Java持久性项目,可以用作独立的POJO持久性层,也可以集成到任何符合Java EE的容器和许多其他轻量级框架中,例如Tomcat和Spring。 1.x发行版是JSR-220 Enterprise Java Beans 3.0...

    SpringBoot操作数据库jpa-SB系列之006-配套项目

    JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 [1]  Sun引入新的JPA ORM规范出于两个原因:其一,简化...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    Eclipsejee下JPA的开发

    以下文字来源于互联网:程序代码JPA主要借鉴了领导持久层的诸如Hibernate,OracleTopLink,JavaDataObjects(JDO)等持久层框架,以及早期EJB的容器管理持久化的思想与概念。实现了ORM(对象关系映射:Object-...

    基于SpringBoot卷烟工厂空调监测预警系统的设计与实现

    本系统结构为B/S 模式的三层架构体系,采用SpringBoot 框架和SpringData JPA 的ORM 持久层框架来搭建系统业务架构;通过Node.js 和Vue 等前端技术实现前端页面搭建,数据库系统采用 SQL Server,并通过 C#实现基于 ...

    1. 尚硅谷_佟刚_SpringData_概述.zip

    开发者唯一要做的,就只是声明持久层的接口,其他都交给Spring Data JPA 来帮你完成! 框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个UserDao.findUserById()这样一个方法声明,大致应该能判断出这是根据...

    Java毕业设计-基于springboot开发的企业资产管理系统-毕业论文(附毕设源代码).rar

    同时,结合MyBatis或JPA等持久层框架,实现了与数据库的灵活交互。前端则采用了流行的前端框架和组件库,保证了用户界面的美观与易用性。 值得一提的是,本项目不仅是一个完整的资产管理解决方案,更是一个开放的...

    javaweb投票系统源码-s2jh:基于Struts/Spring/JPA/Hibernate和jquery/bootstrap的企业系统J

    java ...Introduction 集结最新主流时尚开源技术的面向企业级Web应用的基础开发框架,提供一个J2EE相关主流开源技术架构整合及一些企业应用基础通用功能和组件的设计...引入JPA、Spring-Data-JPA提升持久层架构规范性和开

    JAVA程序开发大全---上半部分

    13.2 MyEclipse创建基于JPA规范的项目 233 13.2.1 创建JPA项目 233 13.2.2 使用反向工程生成JPA实体类和DAO类 234 13.2.3 调整生成的实体类标注 237 13.2.4 使用JPA功能 238 13.3 MyEclipse中支持JPA规范的工具 238 ...

    基于spring boot搭建的web基础框架.zip

    数据库客户端工具用于连接、查询、更新数据库,ORM(对象关系映射)工具简化了数据操作和持久化层的开发工作。 总之,开发工具极大地提升了软件工程师的工作效率,保证了开发过程中的准确性与一致性,同时也促进了...

    Spring-generator一键生成数据库文件

    工具默认集成了以 MyBatis 作为持久化层的模板,如果需要 JPA 相关等模板可以自己参考工具的文档进行编写。 特色功能预览 生成实体类 生成 WEB API相关接口 Controller 生成业务逻辑相关的 Service/ServiceImpl ...

    blog:一个基于SpringBoot简约优雅的个人博客

    初始SpringBoot框架分为控制层(Controller)业务层(Service)数据持久层(Dao)按照SpringMVC架构模式规范进行开发。 前置UI采用语义UI模板引擎Thymeleaf 数据持久层采用SpringBootJPA,数据库为MySQL8.0 四。运行...

    计算机毕业设计-旅游管理系统.zip

    系统的数据持久化层采用JPA(Java Persistence API),它是一个Java EE 5中定义的规范,用于对象关系映射,简化了数据库操作,提高了开发效率。前端页面则使用Thymeleaf模板引擎,它是一个适用于Java和Java EE的灵活...

Global site tag (gtag.js) - Google Analytics