一、JPA簡介:
JPA全稱Java Persistence API。JPA通過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。
二、這裏用OpenJPA 2.0 和Spring 3.0作爲例子
三、搭建Spring 和 JPA的框架步驟
1.搭建Spring3.0框架,然後Finish。
2.然後搭建JPA框架,這裏選用OpenJPA2.0版本
Next
選上所鏈接的數據庫,還有數據庫驅動,這裏用的是Oracle數據庫。接着Finish
四、框架搭建完成後,映射實體類
1.當框架搭建完之後,會在src目錄下發現一個新建的文件夾和文件
2.映射實體,選擇JPA的反向工程
勾上以下選項,會自動生成接口類,實現類,和工具類。接着Next就行了,和Hibernate的差不多。
五、Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx"> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="E276-JPA" /> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- dao --> <bean id="employeeDao" class="org.e276.dao.impl.EmployeeDAO"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- 註解式事務的配置 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
七、測試類
package org.e276.test;
import java.util.Date;
import java.util.List;
import org.e276.dao.IEmployeeDAO;
import org.e276.entity.Department;
import org.e276.entity.Employee;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 注意這裏的寫法Spring 3.0不同
IEmployeeDAO employeeDao = context.getBean(IEmployeeDAO.class);
// 查詢所有的員工
List<Employee> employees = employeeDao.findAll();
for (Employee employee : employees) {
System.out.println("姓名:" + employee.getName() + ",性別:" + employee.getSex());
}
//添加新的員工
Employee employee = new Employee(null, new Department((short) 5), "小屁孩", true, 1438d, new Date());
employeeDao.save(employee);
}
}
八、又或者添加單元測試框架來測試
package org.e276.test;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import org.e276.entity.Department;
import org.e276.entity.Employee;
import org.e276.util.EntityManagerHelper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestEmployee {
// 得到EntityManager對象
EntityManager manager = null;
@Before
public void setUp() throws Exception {
manager = EntityManagerHelper.getEntityManager();
// 開始事務
EntityManagerHelper.beginTransaction();
}
@After
public void tearDown() throws Exception {
// 提交事務
EntityManagerHelper.commit();
EntityManagerHelper.closeEntityManager();
}
public void saveEmployee() {
Department department = new Department((short) 2);
// 因爲主鍵是通過序列產生,所以一定要設置成null
Employee employee = new Employee(null, department, "李培翔", true, 4500d, new Date());
manager.persist(employee);
System.out.println(employee.getName() + "添加成功!");
}
public void findEmployee() {
Employee employee = manager.find(Employee.class, 1004);
System.out.println("找到一隻小夥伴:" + employee.getName());
}
public void deleteEmployee() {
Employee employee = manager.find(Employee.class, 1005);
manager.remove(employee);
System.out.println("含淚忍痛刪掉一小夥伴,他名字是:" + employee.getName());
}
public void updateEmployee() {
Employee employee = manager.find(Employee.class, 1);
employee.setSalary(15000d);
manager.merge(employee);
}
/**
* 查詢某部門的員工人數
*/
public void findDepartmentCount() {
// JPA-QL不支持*號
Long count = (Long) manager
.createQuery("select count(e) from Employee e where e.department.name=:name")
.setParameter("name", "生產部").getSingleResult();
System.out.println("生產部的人數是:" + count);
}
/**
* 查詢某個部門的所有員工
*/
@Test
@SuppressWarnings("unchecked")
public void findEmployeeByDepartment() {
List<Employee> list = manager
.createQuery("select e from Employee e where e.department.name=:name")
.setParameter("name", "生產部").getResultList();
for (Employee employee : list) {
System.out.println(employee.getName() + "工資:" + employee.getSalary());
}
}
}
九、demo