分享

OpenJPA的基础

 燮羽 2010-10-25

 在项目中我们公司用的持久化语言是JPA,周五为了给同事们详细的讲解JPA的相关知识,我写了一个大概提纲,和网友一起分享!


1、
  
JPA
简介—语言JPQL

JPA(Java Persistence API)作为Java EE 5.0平台标准的ORM规范,将得到所有Java

EE服务器的支持。Sun这次吸取了之前EJB规范惨痛失败的经历,在充分吸收现

ORM框架的基础上,得到了一个易于使用、伸缩性强的 ORM规范。从目 前的

开发社区的反应上看,JPA受到了极大的支持和赞扬,JPA作为ORM领域标准化

整合者的目标应该不难实现。

JPAEJB 3.0软件专家组开发,作为 JSR-220实现的一部分。但它不囿于EJB

3.0,你可以在 Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久

化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便

开发和测试的理念已经深入人心了。

JPA包括以下 3方面的技术: 

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

2)、JPA API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBCSQL代码中解脱出来。 

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

 

 重要的API

JavaEE 5.0中所定义的JPA接口个数并不多,它们位于javax.persistence

javax.persistence.spi两个包中。 javax.persistence包中大部分API都是注解类,除此之

外还包括EntityManagerQuery等持久化操作接口。

EntityManager---实体对象由实体管理器进行管理,JPA使用javax.persistence.EntityManager代表实体管理器。

 

EntityManager的一些主要的接口方法: 

1void persist(Object entity) -----store()

2void remove(Object entity)------remove()

3void flush() -----flush()

 

JPA使用javax.persistence.Query接口代表一个查询实例,接口方法:

1Object getSingleResult():执行SELECT查询语句,并返回一个结果; 

2List getResultList() :执行SELECT查询语句,并返回多个结果;   

3Query setParameter(int position, Object value):通过参数位置号绑定查询语句中的

参数,如果查询语句使用了命令参数,则可以使用Query setParameter(String name,

Object value)方法绑定命名参数;   

4Query setMaxResults(int maxResult):设置返回的最大结果数; 

5int executeUpdate():如果查询语句是新增、删除或更改的语句,通过该方法执行

更新操作;   

 

   以下是JPA中使用的主要组件:

(1) Persistence: javax.persistence.Persistence类包含静态方法用于获得EntityManagerFactory对象。

(2) EntityManagerFactory: javax.persistence.EntityManagerFactory类是创建EntityManager的工厂类。

(3) EntityManager: javax.persistence.EntityManager是应用中主要使用的接口,它主要用于管理持久对象,也用于创建Query 接口。

(4) EntityEntity用于封装持久对象。

(5) EntityTransaction: EntityTransaction 用于封装事务,javax.persistence.EntityTransactionEntityManager之间是一对一的关系。

(6) Query: javax.persistence.Query接口用于持久对象的查询。它支持Java Persistence Query Language (JPQL)  Structured Query Language (SQL)

(7) PersistenceException: JPA异常体系的根是PersistenceException,它继承于RuntimeExceptionOpenJPA中抛出的异常都实现了org.apache.openjpa.util.ExceptionInfo接口,用于提供额外的信息。

 

2、  OpenJPAJPA的关系

OpenJPA中大量使用了genericannotation,因此需要使用1.5以上版本的JDK

JPA的总体思想和现有 HibernateTopLinkJDOORM框架大体一致。目前Hibernate 3.2TopLink 10.1.3以及OpenJpa都提供了JPA的实现。

 

 

3、  OpenJPA在项目中的应用

(1)、引入的jar包有:openjpa-1.2.1.jargeronimo-jpa_3.0_spec-1.0.jargeronimo-jta_1.1_spec-1.1.jar;

(2)、为POJO写映射文件*.orm.xml

(3)、在src下面的META-INF下面的persistence.xml中将POJO的映射文件添加进去

       (4)void persist(Object entity) -----store()

void remove(Object entity)------remove()

            void flush() -----flush()

     getNamedQuery(String queryName)---createNamedQuery()

 getNativeQuery(String queryString)--- createNativeQuery()

 getDynamicQuery(String queryString)--- createQuery()

 getNamedUpdate(String queryName)---createNamedQuery()

 

4、  推荐资料

  Apache OpenJPA 2.0 User's Guide.pdf

  ejb-3_0-pfd-spec-persistence.pdf

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多