注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(二)(转贴)

       我们简化了hibernate中扰人的 xxxxx.hbm.xml文件。那么是否可以再进行简化呢?

那么,我们在这一步骤的目的,就是把整个 hibernate.cfg.xml都给简化了。

依然是利用注解注入的方式。通过jpa 我们可以把 hibernate.cfg.xml中那些 mapping classes再次简化与无形。

      在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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
        xmlns:tx="http://www.springframework.org/schema/tx">
   
   
        <bean id="entityManagerFactory"
           class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
           <property name="persistenceUnitName" value="testerPU" />
       </bean>
       <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
           <property name="entityManagerFactory" ref="entityManagerFactory" />
       </bean>
  
       <tx:annotation-driven transaction-manager="transactionManager" />
  
       <bean id="transactionInterceptor"
           class="org.springframework.transaction.interceptor.TransactionInterceptor">
           <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
           <property name="transactionManager">
               <ref local="transactionManager" />
           </property>
           <property name="transactionAttributes">
               <!-- 下面定义事务(指service里面的方法)传播属性 -->
               <props>
                   <prop key="insert*">PROPAGATION_REQUIRED</prop>
                   <prop key="update*">PROPAGATION_REQUIRED</prop>
                   <prop key="save*">PROPAGATION_REQUIRED</prop>
                   <prop key="add*">PROPAGATION_REQUIRED</prop>
                   <prop key="update*">PROPAGATION_REQUIRED</prop>
                   <prop key="remove*">PROPAGATION_REQUIRED</prop>
                   <prop key="delete*">PROPAGATION_REQUIRED</prop>
                   <prop key="get*">PROPAGATION_REQUIRED,readOnly
                   </prop>
                   <prop key="find*">PROPAGATION_REQUIRED,readOnly
                   </prop>
                   <prop key="load*">PROPAGATION_REQUIRED,readOnly
                   </prop>
                   <prop key="change*">PROPAGATION_REQUIRED</prop>
                   <prop key="count*">PROPAGATION_REQUIRED</prop>
                   <prop key="*">PROPAGATION_REQUIRED</prop>
               </props>
           </property>
       </bean>
       <!-- 定义自动代理BeanNameAutoProxyCreator -->
       <bean id="beanNameAutoProxyCreator"
           class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
           <!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
           <property name="beanNames">
               <list>
                   <value>*Service</value>
               </list>
           </property>
           <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器  -->
           <property name="interceptorNames">
               <list>
                   <!-- 此处可增加其他新的Interceptor -->
                   <value>transactionInterceptor</value>
               </list>
           </property>
       </bean>
  
  
  
  
  
       <bean id="AlcorTCountriesDAO" class="com.firemax.test.hibernate.AlcorTCountriesDAO">
           <property name="entityManagerFactory" ref="entityManagerFactory" />
       </bean>
       <bean id="AlcorTProvincesDAO" class="com.firemax.test.hibernate.AlcorTProvincesDAO">
           <property name="entityManagerFactory" ref="entityManagerFactory" />
       </bean>
       <bean id="AlcotTDistrictDAO" class="com.firemax.test.hibernate.AlcotTDistrictDAO">
           <property name="entityManagerFactory" ref="entityManagerFactory" />
       </bean>
      <bean id="AlcorTCitysDAO" class="com.firemax.test.hibernate.AlcorTCitysDAO">
           <property name="entityManagerFactory" ref="entityManagerFactory" />
       </bean>
  
       <bean id="CountryService" class="com.firemax.test.service.CountryService">
           <property name="alcorTCountriesDAO" ref="AlcorTCountriesDAO" />
           <property name="alcorTProvincesDAO" ref="AlcorTProvincesDAO" />
           <property name="alcorTCitysDAO" ref="AlcorTCitysDAO" />
           <property name="alcotTDistrictDAO" ref="AlcotTDistrictDAO" />
       </bean>
  
   </beans>
 
注意红色部分。这部分和(一)里面提到的那个applicationContext.xml中使用的bean是不同的。这里面已经用到了spring 的jpa部分。
其中 <property name= "persistenceUnitName"  value= "testerPU"  />  是指向了一个 jpa的PU(Persistent Units)

那么这个 是在哪里定义的呢?
这里的定义是在你的 classes(src)目录下META-INF下的persistence.xml文件中来定义
persistence.xml文件内容如下:

 

 ?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"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
     version="1.0">

     <persistence-unit name="testerPU"
         transaction-type="RESOURCE_LOCAL">
         <provider>org.hibernate.ejb.HibernatePersistence</provider>
         <class>com.firemax.test.hibernate.AlcorTCountries</class>
         <class>com.firemax.test.hibernate.AlcorTProvinces</class>
         <class>com.firemax.test.hibernate.AlcotTDistrict</class>
         <class>com.firemax.test.hibernate.AlcorTCitys</class>
         <properties>
             <property name="hibernate.connection.driver_class"
                 value="com.mysql.jdbc.Driver" />
             <property name="hibernate.connection.url"
                 value="jdbc:mysql://localhost:3306/alcorweb?useUnicode=true&characterEncoding=utf-8" />
             <property name="hibernate.connection.username"
                 value="alcorweb" />
             <property name="hibernate.connection.password"
                 value="alcorweb" />
             <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
             <property name="hibernate.c3p0.max_size" value="100"/>
             <property name="hibernate.c3p0.min_size"  value="20"/>
             <property name="hibernate.c3p0.timeout"   value="120"/>
             <property name="hibernate.c3p0.max_statements" value="0"/>
             <property name="hibernate.c3p0.idle_test_period"  value="120"/>
             <property name="hibernate.c3p0.acquire_increment" value="5  "/>

             <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
             <property name="hibernate.cache.use_query_cache" value="false"/>
             <property name="hibernate.show_sql" value="false"/>
             <property name="hibernate.useUnicode" value="true"/>
             <property name="hibernate.characterEncoding" value="utf8"/>
         </properties>
     </persistence-unit>
 </persistence>
 
仔细观察他的代码,我们发现其实和hibernate.cfg.xml和相似。都有指向pojo的定义 和 database连接的定义。先别着急。我们这次的优化,就先完成这个目标。主要是引入的spring的jpa框架。
后面将介绍更进一步的优化。来展示jpa 和 注释注入的能力。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值