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




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值