Spring--12.spring整合jpa

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
   }
}


猜你喜欢

转载自blog.csdn.net/qq_26553781/article/details/79827044
今日推荐