JPA(java persistent api) 是sun公司推出的一个对象/关系(ORM)标准,常见的orm厂商有Hibernate, Toplink,jdo等,这些产品都有各自的实现方式,sun 公司为了统一ORM 持久化技术提高代码的灵活性(面向接口编程)推出了这一标准,这套标准只定义了一些接口,具体实现有各个厂商自己决定(类似于jdbc标准,sun提供接口,各个数据库厂商提供具体实现)。下面举例讲述以Hibernate实现JPA的常见操作。
先直接写个简单的例子,从整体上大致了解下JPA的书写流程。
- 定义一个简单的JavaBean
package com.zt.bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="tb_person") public class Person { private int id; private String name; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } }
- JPA 需要在类路径的META-INF有persistence.xml文件,在src目录下新建META-INF目录,然后新建persistence.xml文件:persistence-unit是一系列持久化javabean的集合name 要和 Persistence.createEntityManagerFactory("mysqljpa")的名字一致。
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="mysqljpa" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="root"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> </properties> </persistence-unit> </persistence>
- 导入jar包(附件可下载)
- 测试代码
@Test public void testPersistent() { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("mysqljpa"); EntityManager entityManager = entityManagerFactory.createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); Person person = new Person(); person.setName("zhangsan"); entityManager.persist(person); transaction.commit(); entityManager.close(); entityManagerFactory.close(); }