当前位置 博文首页 > PORSCHE_GT3RS的博客:Spring整合Hibernate(2)----注解方式

    PORSCHE_GT3RS的博客:Spring整合Hibernate(2)----注解方式

    作者:[db:作者] 时间:2021-09-22 16:59

    承接上一篇文章:《Spring整合Hibernate(1)-----applicationContext.xml 设值注入依赖方式》

    这篇主要介绍一下Spring整合Hibernate(2)----注解方式:

    和设置注入的依赖方式基本上一样,这里只讨论具体的不同点即可:

    最大一个不同的点就是注解方式不需要写实体类的映射文件,直接使用配置实体类即可,Spring框架会自己帮我们完成实体类

    到数据库表之间的ORM映射。而applicationContext.xml文件就需要写ORM映射文件。

    注解方式下的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:aop="http://www.springframework.org/schema/aop"  
         xmlns:tx="http://www.springframework.org/schema/tx"  
         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/tx  
             http://www.springframework.org/schema/tx/spring-tx.xsd  
             http://www.springframework.org/schema/aop  
             http://www.springframework.org/schema/aop/spring-aop.xsd  
             http://www.springframework.org/schema/context  
             http://www.springframework.org/schema/context/spring-context.xsd">  
    	<!--自动扫描包-->
        <context:component-scan base-package="com.test" /> 
    	<!--加载配置文件-->
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
          <property name="locations">  
            <list>  
                <value>classpath:jdbc.properties</value>  
            </list>  
          </property>  
        </bean>  
    	<!--配置连接池数据源-->
        <bean id="c3p0DataSource" destroy-method="close"  
            class="com.mchange.v2.c3p0.ComboPooledDataSource">  
            <property name="driverClass" value="${driverClass}" />  
            <property name="jdbcUrl" value="${url}" />  
            <property name="user" value="${user}" />  
            <property name="password" value="${password}" />  
            <property name="initialPoolSize" value="${initialPoolSize}" />  
            <property name="minPoolSize" value="${minPoolSize}" />  
            <property name="maxPoolSize" value="${maxPoolSize}" />  
            <property name="maxIdleTime" value="${maxIdleTime}" />  
        </bean>
    	<!--配置sessionFactory-->
        <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
            <property name="dataSource" ref="c3p0DataSource" />  
            <property name="packagesToScan">  
                <list>  
                    <value>com.test.bean</value>  <!--这里只需要配置bean即可-->
                </list>  
            </property>  
            <property name="hibernateProperties">  
                <props>  
                    <prop key="hibernate.dialect">${dialect}</prop>  
                    <prop key="hibernate.show_sql">${show_sql}</prop>  
                    <prop key="hibernate.format_sql">${format_sql}</prop>  
                    <prop key="hibernate.use_sql_commants">${use_sql_comments}</prop>  
                    <prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>  
                </props>  
            </property>  
        </bean>  
        <bean id="txManager"  
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
            <property name="sessionFactory" ref="sessionFactory" />  
        </bean>  
        <tx:advice id="txAdvice" transaction-manager="txManager">  
            <tx:attributes>  
                <tx:method name="get*" read-only="true" />  
                <tx:method name="*" />  
            </tx:attributes>  
        </tx:advice>  
        <aop:config>  
            <aop:pointcut id="bizMethods" expression="execution(* com.test.biz.*.*(..))" />  
            <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />  
        </aop:config>  
    </beans>  
    设置注入依赖的方式的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:aop="http://www.springframework.org/schema/aop"  
      xmlns:tx="http://www.springframework.org/schema/tx"  
      xsi:schemaLocation="http://www.springframework.org/schema/beans  
                          http://www.springframework.org/schema/beans/spring-beans.xsd  
                          http://www.springframework.org/schema/tx  
                          http://www.springframework.org/schema/tx/spring-tx.xsd  
                          http://www.springframework.org/schema/aop  
                          http://www.springframework.org/schema/aop/spring-aop.xsd">  
               
        <!-- 让spring 去读取指定路径下的资源文件 -->  
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
          <property name="locations" value="classpath:jdbc.properties"/>  
        </bean>  
          
        <!-- 配置c3p0连接池 -->  
        <bean id="c3p0Source" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
          <property name="driverClass" value="${driverClass}" />  
          <property name="jdbcUrl" value="${url}" />  
          <property name="user" value="${user}" />  
          <property name="password" value="${password}" />  
          <property name="initialPoolSize" value="${initialPoolSize}" />  
          <property name="minPoolSize" value="${minPoolSize}" />  
          <property name="maxPoolSize" value="${maxPoolSize}" />  
          <property name="maxIdleTime" value="${maxIdleTime}" />  
        </bean>  
          
        <!-- 配置SessionFactory -->  
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
          <property name="dataSource" ref="c3p0Source" />  
          <property name="mappingResources">  
              <list>  
                <value>/com/cdzg/spring/bean/User.hbm.xml</value>  <!-- 需要写ORM映射文件 -->
              </list>  
          </property>  
          <property name="hibernateProperties">  
            <props>  
                    <prop key="hibernate.dialect">${dialect}</prop>  
                    <prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>  
                    <prop key="hibernate.show_sql">${show_sql}</prop>  
                    <prop key="hibernate.format_sql">${format_sql}</prop>  
                    <prop key="hibernate.use_sql_comments">${use_sql_comments}</prop>  
                </props>  
          </property>  
        </bean>  
          
        <!-- 配置事务管理器 -->  
        <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
          <property name="sessionFactory" ref="sessionFactory" />  
        </bean>  
          
        <!-- 定义事务通知 -->  
        <tx:advice id="txAdvice" transaction-manager="txManager">  
          <tx:attributes>  
            <tx:method name="get*" read-only="true"/>  
            <tx:method name="*"/>  
          </tx:attributes>  
        </tx:advice>  
           
         <!-- 定义事务切面,并应用事务通知 -->      
         <aop:config>  
          <aop:pointcut id="xxxBizImpl" expression="execution(* com.cdzg.spring.biz.*.*(..))"/>  
          <aop:advisor pointcut-ref="xxxBizImpl" advice-ref="txAdvice"/>  
         </aop:config>  
               
        <bean id="userDaoImpl" class="com.cdzg.spring.dao.impl.UserDaoImpl">  
            <property name="sessionFactory" ref="sessionFactory" />  
        </bean>  
        <bean id="userBizImpl" class="com.cdzg.spring.biz.impl.UserBizImpl">  
            <property name="userDao" ref="userDaoImpl" />  
        </bean>  
        <bean id="userAction" class="com.cdzg.spring.web.actions.UserAction">  
            <property name="userBiz" ref="userBizImpl" />  
        </bean>  
    </beans>  

    读者自行对比上面两个applicationContext.xml配置文件,即可。


    cs
    下一篇:没有了