这里是使用spring整合JPA,而且是不完全版,纯属是因为测试方便。
如果想看原始的没用spring整合的JPA配置,请去这里: 创建JPA项目
1. 依赖配置
<!--版本控制 -->
<properties>
<mysql.version>5.1.34</mysql.version>
<spring.version>4.3.0.RELEASE</spring.version>
<hibernate.version>4.1.0.Final</hibernate.version>
<querydsl.version>4.1.4</querydsl.version>
<jackson.version>2.5.4</jackson.version>
</properties>
<dependencies>
<!-- javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- Spring Framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Framework end -->
<!-- c3p0 start -->
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- c3p0 end -->
<!--hibernate start -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!--hibernate end -->
<!--mysql start -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--mysql end -->
<!--test start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--test end -->
<!--common start -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<!--common end -->
</dependencies>
2.配置applicationContext.xml
<?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:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 配置数据源 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<!-- 配置其他属性(省略) -->
</bean>
<!-- 配置 JPA 的 EntityManagerFactory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
<!--扫描实体-->
<property name="packagesToScan" value="com.ssj.domain"></property>
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
<!-- 指定自动生成数据表的策略 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 执行操作时是否在控制台打印SQL -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否对SQL进行格式化 -->
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- 其他配置 -->
</props>
</property>
</bean>
</beans>
1.这里配置了 JPA 的 EntityManagerFactory,用来获取实体管理器EntityManage,EntityManage相当于hibernate的session,其中包含大量的接口用来操控实体实现对数据库的操作。
2.其实spring整合hibernate是将session交给spring容器管理,而spring整合JPA就是将EntityManage交给spring容器管理。
3.创建实体类
package com.ssj.domain;
import java.util.Date;
import javax.persistence.*;
@Entity
@Table(name="employee")
public class Employee {
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Id
private Integer Id;
@Column(name="EMP_NAME")
private String empName;
@Column(name="EMP_BIRTH")
@Temporal(TemporalType.DATE)
private Date empBirth;
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Date getEmpBirth() {
return empBirth;
}
public void setEmpBirth(Date empBirth) {
this.empBirth = empBirth;
}
@Override
public String toString() {
return "Employee [Id=" + Id + ", empName=" + empName + ", empBirth="
+ empBirth + "]";
}
}
4.测试类
package com.ssj.test;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.ssj.domain.Employee;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:applicationContext.xml")
public class Test01 {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Test
public void test1(){
//2. 创建EntityManager
EntityManager em = entityManagerFactory.createEntityManager();
//3.开启事务
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Employee emp = new Employee();
emp.setEmpName("张三");
emp.setEmpBirth(new Date());
em.persist(emp);
//5. 提交事务
transaction.commit();
//6. 关闭EntityManager
em.close();
}
}
5.运行结果
新建了表