JPA
全稱,Java Persistence API,Java持久化API
JPA是一套持久化標准,相當於JDBC標准,針對於此標准的實現目前有OpenJAP,TOPLINK,Hibernate等。
OpenJPA
是apache基金會針對於JPA2 標准開發的一套持久化實現類庫。
下載地址:http://openjpa.apache.org/ http://openjpa.apache.org/downloads.html
JPA書籍
下載地址:http://download.csdn.net/detail/changsheng1453052832/5859125
JPA 例子
下載地址:http://download.csdn.net/detail/changsheng1453052832/5859153
JPA文檔chm格式
下載地址:http://download.csdn.net/detail/changsheng1453052832/5859559
例子講解:
例子代碼下載完成之后,導入工程,可以看到如下的目錄結構


其中persistence.xml是JPA配置文件。內容如下:
<?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" version="2.0"> <!-- 持久化單元 --> <persistence-unit name="EmployeeService" transaction-type="RESOURCE_LOCAL"> <!-- OpenJPA 持久化實現 --> <provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> <!-- 指定哪些實體需要持久化 --> <class>examples.model.Employee</class> <!-- 配置數據庫連接信息 --> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="changsheng" /> <!-- 可以自動生成數據庫表 --> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> </properties> </persistence-unit> </persistence>
獲取EntityManager方法:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmployeeService");
EntityManager em = emf.createEntityManager();
其中“EmployeeService”為persistence.xml中持久化單元中的名字。
在獲取了EntityManager之后可以對你進行注冊的實體進行操作。如Employee類。
目前有一個EmployeeService對實體Employee進行操作,增刪改查。將EntityManager注入進去。通過接口中的方法對實體進行操作。
主要的方法有persist,find,remove,createQuery
package examples.model;
import java.util.Collection;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public class EmployeeService {
protected EntityManager em;
public EmployeeService(EntityManager em) {
this.em = em;
}
public Employee createEmployee(int id, String name, long salary) {
Employee emp = new Employee(id);
emp.setName(name);
emp.setSalary(salary);
em.persist(emp);
return emp;
}
public void removeEmployee(int id) {
Employee emp = findEmployee(id);
if (emp != null) {
em.remove(emp);
}
}
public Employee raiseEmployeeSalary(int id, long raise) {
Employee emp = em.find(Employee.class, id);
if (emp != null) {
emp.setSalary(emp.getSalary() + raise);
}
return emp;
}
public Employee findEmployee(int id) {
return em.find(Employee.class, id);
}
@SuppressWarnings("unchecked")
public Collection<Employee> findAllEmployees() {
Query query = em.createQuery("SELECT e FROM Employee e");
return (Collection<Employee>) query.getResultList();
}
}
Employee領域對象
package examples.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private int id;
private String name;
private long salary;
public Employee() {}
public Employee(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getSalary() {
return salary;
}
public void setSalary(long salary) {
this.salary = salary;
}
public String toString() {
return "Employee id: " + getId() + " name: " + getName() + " salary: " + getSalary();
}
}
在employee領域對象中,我們定義了ID,Name ,Salary(薪水)。當然每個員工需要有一個ID來進行標示,不可能重復。
其中@Entity注解,指定Employee類是需要持久化的。
@Id指定id字段作為實體的標示符。
事務
事務可以通過EntityManager.getTransaction()
em.getTransaction().begin(); Employee emp = service.createEmployee(id, name, salary); em.getTransaction().commit();
以上主要是和JPA相關的簡單介紹,有個基本的認識就可以了,下載例子代碼,運行下,看看具體的代碼細節。
