JPA OpenJPA 簡單例子


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




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM