samtiger


          QQ:418148757
          Name:yangchuan
          數據加載中……
          關于spring+hibernate的事務的簡單配置(這里用的mysql數據庫)
             今天晚上有同事提到這個spring的事務配置,其實我也就知道兩種最簡單的配置。恩,還是寫個例子測試一下吧。環境是:spring2.04+hibernate3.1吧

            

          首先,我使用的mysql,設置mysql為InnoDB類型。
          事務管理的控制應該放到業務邏輯層。你可以寫個處理業務邏輯的JavaBean,在該JavaBean中調用DAO(或則是HibernateTemplate()的crud操作),然后把該Bean的方法納入spring的事務管理。

          方法一:xml文件定義如下:
                  //聲明事務管理器
           <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
           </bean>
                  //聲明事務代理,使用抽象屬性(abstract="true") 方便所有的業務類都擁有這個事務代理
           <bean id="baseTransactionProxy"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
            abstract="true">
            <property name="transactionManager" ref="transactionManager" />
            <property name="transactionAttributes">
             <props>
              <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
             </props>
            </property>
           </bean>

                 
           <bean id="userManager" parent="baseTransactionProxy">
            <property name="target" >
                                    //具體的實現了業務邏輯的JavaBean
             <bean class="org.zdpuyao.srm.service.imp.UserManageImp">
              <property name="sessionFactory">
               <ref local="sessionFactory" />
              </property>
             </bean>
            </property>
           </bean>
          org.zdpuyao.srm.service.imp.UserManageImp就是我們的實現業務邏輯的JavaBean。我們通過parent元素聲明其事務支持。
          在測試的時候,就用
          UserManage um=(UserManage) context.getBean("userManager");來取得bean對象(注意上邊的"userManager"配置)

          具體類
          package org.zdpuyao.srm.service.imp;

          public class UserManageImp extends HibernateDaoSupport implements UserManage {

           public void addUser(Object obj) {
            
            TblBsDepartmentType dept; //=(TblBsDepartmentType)temp.find("from TblBsDepartmentType").get(0);
            dept = new TblBsDepartmentType();
            dept.setBdtyName("java12");
            getHibernateTemplate().save(dept);
            
            ///throw new  ("ssss");
            //throw new RuntimeSQLException("sssss");
            
            /*TblBsUserType user = (TblBsUserType)obj;
            user.setTblBsDepartmentType(dept);
            temp.save(user);*/

           }

          }


          具體測試類:
          public class TestUser extends TestCase {

           protected void setUp() throws Exception {
            
            super.setUp();
           }
           
           private BeanFactory getFactory()
           {
            Resource res=new FileSystemResource("\\WebRoot\\WEB-INF\\applicationContext.xml");
            BeanFactory factory=new XmlBeanFactory(res);
            return factory;
           }
           private UserManage getUserManage()
           {
            BeanFactory factory=getFactory();
            UserManage um=(UserManage) factory.getBean("userManager");
            return um;
            
           }

           public void testAddUser() throws Exception {
             
            TblBsUserType user = new TblBsUserType();
            
            user.setButyId(Long.valueOf(12345645));
            user.setButyName("yangchuan");
            user.setButyPassword("12345");
            getUserManage().addUser(user);
            
            //excuteJDBCTranscation();
           }
          }



          ///////////////////////////////////////////
          方法二:xml文件定義如下:
              
              1: 第一步:
                
          <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
           </bean>


              1: 第二步:
           <bean id="userManager"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
            abstract="false">
            <property name="transactionManager" ref="transactionManager" />
            <property name="target">
             <ref local="userManagerimp" />
            </property>
            <property name="transactionAttributes">
             <props>
              <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
             </props>
            </property>
           </bean>

           

              1: 第三步:
           <bean id="userManagerimp"
            class="org.zdpuyao.srm.service.imp.UserManageImp">
            <property name="sessionFactory">
             <ref local="sessionFactory" />
            </property>
           </bean>

          org.zdpuyao.srm.service.imp.UserManageImp就是我們的實現業務邏輯的JavaBean。
          在測試的時候,就用
          UserManage um=(UserManage) context.getBean("userManager");來取得bean對象

          具體類
          package org.zdpuyao.srm.service.imp;

          public class UserManageImp extends HibernateDaoSupport implements UserManage {

           public void addUser(Object obj) {
            
            TblBsDepartmentType dept; //=(TblBsDepartmentType)temp.find("from TblBsDepartmentType").get(0);
            dept = new TblBsDepartmentType();
            dept.setBdtyName("java12");
            getHibernateTemplate().save(dept);
            
            ///throw new  ("ssss");
            //throw new RuntimeSQLException("sssss");
            
            /*TblBsUserType user = (TblBsUserType)obj;
            user.setTblBsDepartmentType(dept);
            temp.save(user);*/

           }

          }
          具體測試類:
          public class TestUser extends TestCase {

           protected void setUp() throws Exception {
            
            super.setUp();
           }
           
           private BeanFactory getFactory()
           {
            Resource res=new FileSystemResource("\\SRMnew\\WebRoot\\WEB-INF\\applicationContext.xml");
            BeanFactory factory=new XmlBeanFactory(res);
            return factory;
           }
           private UserManage getUserManage()
           {
            BeanFactory factory=getFactory();
            UserManage um=(UserManage) factory.getBean("userManager");
            return um;
            
           }

           public void testAddUser() throws Exception {
             
            TblBsUserType user = new TblBsUserType();
            
            user.setButyId(Long.valueOf(12345645));
            user.setButyName("yangchuan");
            user.setButyPassword("12345");
            getUserManage().addUser(user);
            
            //excuteJDBCTranscation();
           }
          }

          本人才疏學淺,涉java不深,如果以上配置有什么錯誤或不足的地方,請您指出,將  不甚感激!如果還有別的配置,也請共享一份給我,將感激不盡。

            說明:如果你的代碼報:java.lang.ClassCastException: $Proxy7 cannot be cast to 。。。。。的錯誤;
          解決方式有兩種:
           一種: 為org.springframework.transaction.interceptor.TransactionProxyFactoryBean的bean配置一個property屬性:proxyTargetClass ,并設置其值為true
          另一種:就是為你的dao類寫一個接口類,就是說讓你的dao必須實現一個接口。

          posted on 2007-09-28 00:04 sam.chuan.yang 閱讀(2444) 評論(1)  編輯  收藏

          評論

          # re: 關于spring+hibernate的事務的簡單配置(這里用的mysql數據庫) 2009-08-26 00:31 sss

          這兩個方法一樣的啊
            回復  更多評論    

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 郯城县| 青河县| 巴林左旗| 河西区| 商南县| 林周县| 临城县| 静安区| 景德镇市| 神木县| 清涧县| 德保县| 湖南省| 民丰县| 长春市| 巨鹿县| 夏河县| 慈利县| 昌邑市| 巴南区| 绥化市| 梁河县| 闽侯县| 正安县| 专栏| 灵璧县| 陕西省| 米泉市| 宿迁市| 广东省| 德昌县| 靖边县| 青海省| 观塘区| 宁夏| 上犹县| 团风县| 老河口市| 隆安县| 舒城县| 万全县|