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


例子讲解:


例子代码下载完成之后,导入工程,可以看到如下的目录结构

JPA OpenJPA 简单例子


其中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相关的简单介绍,有个基本的认识就可以了,下载例子代码,运行下,看看具体的代码细节。




 

你可能感兴趣的:(openjpa)