Struts 2, spring 2, hibernate 的整合

来源: 作者:佚名 2008-04-30 出处:pcdog.com

apache  hibernate  jsp  sas  spring  
上一页 1 2 
    2.配置sessionFactory
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" scope="prototype">
            <property name="dataSource" ref="dataSource" />
            <property name="annotatedClasses"><!-- or use <property name="annotatedPackages"> -->
                <list>
                    <value>com.wod.bean.Application</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.hbm2ddl.auto">create</prop>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                    <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
                </props>
            </property>
            <property name="eventListeners">
                <map>
                    <entry key="merge">
    <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
                    </entry>
                </map>
            </property>
        </bean>
        这两个bean是spring结合hibernate的最主要的两个bean.
        当这两个bean设置好了之后,就可以直接使用spring提供的”HibernateDaoSupport” ,直接使用封装好的hibernate特性,非常方便.
        <bean id="serverInfoDao" class="com.wod.db.hibernate.ServerInfoDAO">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        初始化一个DAO.
    public List<ServerInfoBean> getAllServersInfo() {
            List<ServerInfoBean> find = getHibernateTemplate().loadAll(ServerInfoBean.class);
            return find;
        }
        直接调用getHibernateTemplate()访问数据库
       
    三.Spring 事务的设置

        1.设置transactionManager
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
                p:sessionFactory-ref="sessionFactory"/>
        2.设置advice
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="get*" read-only="true"/>
                <tx:method name="list*" read-only="true"/>
                <tx:method name="*" rollback-for="Exception"/>
            </tx:attributes>
     </tx:advice>
        3.接下来设置AOP
    <aop:config>
           <aop:pointcut id="businessService" expression="execution(* com.hisoft.db.hibernate.impl.*.*(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
            <aop:aspect id="businessAspect" ref="AOPTest">
                 <aop:before pointcut-ref="businessService" method="before"/>
                 <aop:after-returning pointcut-ref="businessService" method="after"/>
            </aop:aspect>
    </aop:config>
    这个的意思是说,当执行到com.hisoft.db.hibernate.impl这个包下面的任何类的任何方法,而且不管参数是什么,也就是说这个包下面的所有方法调用了,都要接受前面的transactionManager的管理。

        4.AOP设置
    <bean id="AOPTest" class="com.wod.common.LogHandler.AOPTest"/>
    <aop:config>
            <aop:pointcut id="businessService" expression="execution(* com.hisoft.db.hibernate.impl.*.*(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
            <aop:aspect id="businessAspect" ref="AOPTest">
                 <aop:before pointcut-ref="businessService" method="before"/>
                 <aop:after-returning pointcut-ref="businessService" method="after"/>
            </aop:aspect>
    </aop:config>

    定义一个切面,叫做businessAspect,引用的是我前面定义的一个叫做AOPTest的类,然后下面的两句话:
            <aop:before pointcut-ref="businessService" method="before"/>
              <aop:after-returning pointcut-ref="businessService" method="after"/>
        aop:before 指的是在调用目标方法之前要干点事情,pointcut-ref="businessService"就是目标的方法,在调用匹配这个pointcut 的方法之前,会调用 method中定义的那个方法。


更多内容请看PCdog.com--Hibernate相关文章  Spring开发技术篇专题
上一页 1 2 
上一篇:Struts--使用validate方法验证数据。
下一篇:Grails+EJB Domain Models