版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26553781/article/details/79827044
参考博客:http://www.cnblogs.com/crawl/p/7718741.html
Tomcat启动走的是web.xml,单元测试走的是当前文件,所以要测试思路就是启动spring
1 Spring 整合 JPA
1.1 三种整合方式:
LocalEntityManagerFactoryBean:适用于那些仅使用 JPA进行数据访问的项目,该 FactoryBean 将根据JPA PersistenceProvider 自动检测配置文件进行工作,一般从“META-INF/persistence.xml”读取配置信息,这种方式最简单,但不能设置 Spring 中定义的DataSource,且不支持 Spring 管理的全局事务
从JNDI中获取:用于从 JavaEE 服务器获取指定的EntityManagerFactory,这种方式在进行 Spring 事务管理时一般要使用 JTA 事务管理
LocalContainerEntityManagerFactoryBean:适用于所有环境的FactoryBean,能全面控制 EntityManagerFactory 配置,如指定 Spring 定义的 DataSource 等等。
1.2 JPA 提供者的适配器
<!-- 配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
1.3 Jpa相关配置
<!-- 4.配置 JPA 的基本属性. 例如 JPA 实现产品的属性 -->
<property name="jpaProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
1.4 JPA 使用的事务管理器
<!-- 配置 JPA 使用的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<!-- 配置支持基于注解是事务配置 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
2 Demo查看
2.1 applicationContext.xml
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.atguigu.jpa"></context:component-scan>
<!-- 配置 C3P0 数据源 -->
<context:property-placeholder location="classpath:db.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>
<!-- 配置EntityManagerFactory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 1.注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 2.配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
<!-- 3.配置实体类所在的包 -->
<property name="packagesToScan" value="com.atguigu.jpa.entities"></property>
<!-- 4.配置 JPA 的基本属性. 例如 JPA 实现产品的属性 -->
<property name="jpaProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 配置 JPA 使用的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<!-- 配置支持基于注解是事务配置 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
2.2 JPATest
public classJPATest {
private ApplicationContext ctx = null;
private PersonService personService = null;
{
ctx = newClassPathXmlApplicationContext("applicationContext.xml");
personService = ctx.getBean(PersonService.class);
}
/**
* 测试数据库是否连通
* @throws SQLException
*/
@Test
public void testDataSource() throws SQLException {
DataSourcedataSource= ctx.getBean(DataSource.class);
System.out.println(dataSource.getConnection());
}
@Test
public void testPersonService(){
Personp1 = new Person();
p1.setAge(11);
p1.setEmail("[email protected]");
p1.setLastName("AA");
Personp2 = new Person();
p2.setAge(12);
p2.setEmail("[email protected]");
p2.setLastName("BB");
System.out.println(personService.getClass().getName());
personService.savePersons(p1, p2);
}
}