今天是上课的第一天,由徐老师给我们上JPA的课,新年过后,这是一个惊喜,因为又是徐老师带我们的课程,大家都十分喜欢徐老师,因为自从听完Hibernate后,“徐侠客”这三个字已经深深扎在我们班的每个同学心里了。今天也和大家分享一下JPA相关知识,虽然JPA在国内还不是很火,但是在国外,JPA的使用还是十分多的,而且JPA在未来还是很有发展前景的。
一、JPA概述
JPA(Java Persisitence API)是Sun官方提出的java持久化规范,它为java开发人员提供了一种对象/关系映射来管理java应用中的关系数据,他的出现只要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink等ORM框架各自为营的局面。
JPA是在充分吸收了现有Hibernate、TopLink等ORM框架的基础上发展而来的,具有易于使用、伸缩性强等优点。
JPA通过JDK5.0注解和XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
二、 jpa简单应用
下面编写一个简单的jpa程序,步骤如下:
1.建立一个java工程,导入jar包(jpa的相关jar包以及供应商的jar包,包括一些数据库连接的jar包)
2.引入配置文件,并配置
在JPA中我们的配置文件一定放在classpath下的META-INF文件夹下,文件名为persistence.xml,配置说明如下:
1)Transaction-type属性配置:
l Resource-local事务:本地资源管理事务,依托于数据库管理(或者消息队列)事务。
l JTA(Java Transaction Api):必须javaEE应用服务器下。
当我们在一个事务中需要用到两个不同数据库(跨越多个资源)的时候,我们需要用jta,分布式事务管理,每一个库都有自己的分布式事务管理,开启事务和提交都是有jta完成,驱动我们需要用XADriver(每一个数据库分布式事务管理驱动),当我们提交时,它会通知子资源(多个不同数据库),如果一个不成功。两个都不成功。总之当多个资源参与(多个数据库),XA(分布式XA(分布式事务)资源)时我们采用JTA管理事务,
小结: Jee环境中默认是JTA ,J2se环境中默认是Resource-local
2)Provider子元素配置
配置供应商。即jpa规范的实现厂商。如果是hibernate,由于在hibernate-entitymanager.jar中的META-INF文件夹的services下的javax.persistence.spi.PersistenceProvider中已经配置了持久化供应商,所以可以扫描到,找到正确的供应商,不用配置。但是如果是其他产品,需要配置了。
3)Properties子元素配置
配置产品相关的自身的属性,两个属性,一个name,一个value,name不要随便写,是相关产品自身的属性。
4)class子元素
配置实体类,hibernate的不用配置,加了注解,可以扫描到。
3.创建实体
注意虽然我们可以通过配置文件映射,这里推荐使用注解,至少两个注解@Entity和@Id,但是如果我们采用代理主键,需要加@GeneratedValue,它的属性有strategy(策略),我们可以设置代理主键的策略,这里不写相当于AUTO,依赖底层数据库自身机制。不加约束相当于自然主键
@Entity
public class Person {
@Id
private Integer id;
private String name;
......
以下是set get方法,省略
4.建立一个类测试一下
1).创建EntityManagerFactory
EntityManagerFactory emf= Persistence.createEntityManagerFactory("jpa");
2).创建EntityManager
javax.persistence.EntityManager em = emf.createEntityManager();
3).开始一个事务
em.getTransaction().begin();
4).持久化操作(persist/merge/remove/find等方法)
5).提交事务
6).关闭EntityManager