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相關的簡單介紹,有個基本的認識就可以了,下載例子代碼,運行下,看看具體的代碼細節。