1、我们为什么要用JPA
JPA是Sun官方提出的Java持久化规范,JPA不是一种新的ORM框架,不是一套产品,JPA只是一套规范,他的出现只是用于规范现有的ORM技术,他不能取代现有的Hibernate,TopLink等ORM框架。相反,在采用JPA开发时,我们仍将使用到这些ORM框架,只是此时开发出来的应用不再依赖于某个持久化提供商,应用可以在不修改代码的情况下在任何JPA环境下运行,真正做到低耦合,可扩展的程序设计。
2、JPA的配置环境搭建
配置JPA的运行环境,导入Hibernate关于JPA的实现jar包,首先我们需要去下载HIbernate的jar包。
第一个包是Hibernate的核心包,第二个Hibernate对JPA规范的封装实现的一个包,首先我们解压第一个压缩包。
把hibernate3.jar以及hibernate3.jar需要使用到了第三方的lib目录下的所有jar包复制到工程的lib下。然后解压第二压缩包。
把hibernate-entitymanager.jar以及lib目录下的所有jar包复制工程下,最后把数据库的驱动jar包复制到工程下,到目前为止,jpa的环境基本已经搭建完毕。
3、创建JPA的配置文件
在工程的src目录下创建一个META-INF文件夹,在META-INF文件下创建一个JPA配置文件(persistence.xml),内容如下:
<?xml version="1.0"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="user" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123456"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence> |
配置文件中的<persistence-unit><persistence-unit/>表示持久化单元,代表一堆实体bean的集合,我们叫他们做实体bean单元,其中,transaction-type="RESOURCE_LOCAL "表示事务类型,RESOURCE_LOCAL表示本地事务,如果使用全局事务就用JTA。其他的配置属性基本上和Hibernate数据源的配置文件相同。
4、创建数据实体Bean
根据JPA规范,映射的数据可以根据注解的方式来书写,如果当前类表示一个实例bean,需要加上@Entity注解。每个实体bean都要有个实体标识属性,通过@Id表示主键,可以标识在属性的get方法前面,也可以标识在字段上面。@GeneratedValue表示主键的生成策略,基本的策略有:
- GenerationType.AUTO: JPA实现产品自动灵活的选择合适的策略,是默认选项,可以表示自增。
- IDENTITY:明确表示使用自增,Oracle数据库不支持。
- SEQUENCE: 通过序列产生主键,通过@SequenceGenerator注解指定序列名,MySql不支持这种方式,实例代码:
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Person { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; @Column(length=10,nullable=false,name="personname") private String name; public Person(){} public Person(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
5、创建单元测试进行数据保存测试:
创建一个Junit测试类,测试方法如下:
@Test public void savePerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("user"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person p=new Person(); p.setName("zhangsan"); em.persist(p); em.getTransaction().commit(); em.close(); factory.close(); } |
如果测试通过,在数据库生成了一张person表并且生成了一条数据,那么表示JPA环境已经搭建成功。