久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Spring的事務處理

     nbtymm 2007-02-07

     

    1 、什么是Spring事務處理?

    什么是事務處理我就不想回答了。 Spring 的事務處理,可以說是 Spring AOP 的一種實現。因為事務處理是所謂方面( Aspect )的一個子集。因此默認情況下,事務處理是利用 Java 動態代理機制實現的,這樣就必須先定義一個接口,然后再編寫實現;而對于沒有接口的 Javabean ,則通過 CGLIB 實現。這部分是 Spring AOP 部分的內容。

    2 、兩種事務處理方式

    EJB 一樣, Spring 也提供兩種事務處理方式,一種是編程式事務處理;一種是聲明式事務處理。

       何時使用什么

              如果需要大量的事務處理,就用聲明式事務處理,如果很少的事務處理,就用編程式

    二、詳細

                  編程式事務處理與聲明式事務處理

    (一)編程式事務處理

    1 、使用TransactionTemplate進行事務處理(Spring進行commitrollback

              1 )使用事務處理的類

     

    import javax.sql.DataSource;

    import org.springframework.jdbc.core.*;

    import org.springframework.transaction.*;

    import org.springframework.dao.*;

     

    public class bookDAO{

    private DataSource dataSource;// 依賴注入 dataSource ,管理數據庫

    private PlatformTransationManager transactionManager;// 依賴注入管理事務

     

    public void setDataSource(DataSource dataSource){

        this.dataSource=dataSource;

    }

     

         public void setTransactionManager(PlatformTransationManager transactionManager){

             this. transactionManager= transactionManager;

    }

     

    public int create(String msg){

        TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);

        // 調用 transactionTemplate execute 方法進行事務管理

        Object result= transactionTemplate.execute (

         // 這是一個回調函數,實現了 TransactionCallback 接口的 doInTransaction 方法,就是在這個方法里寫數據庫新增數據的操作

              new TransactionCallback()

    {

              public Object doInTransaction(TransactionStatus status)

    {

                  // 數據庫操作代碼

                  return resultObject;

               }

           }

    [U1]       )

    }

    }

    如果不想返回結果( resultObject ),則可以用 TransactionCallbackWithoutResult 來實現 TransactionCallback 接口,代碼如下:

            new TransactionCallback WithoutResult ()

    {

              public Object doInTransaction WithoutResult (TransactionStatus status)

    {

                  // 數據庫操作代碼

                

               }

           }

     

    2 )配置文件

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

     "http://www./dtd/spring-beans.dtd">

    <beans>

       <!— dataSource à

       <bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>

          <!— 使用SQL Server à

           <property name=”driverClassName”>

              <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

           </property>

            <property name=”url”>

              <value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>

           </property>

    <property name=”name”>

              <value>admin</value>

           </property>

    <property name=”msg”>

              <value>admin</value>

           </property>

        </bean>

     

        <!— 設定 transactionManager à

        <bean id=”transactionManager”

    class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>

            <property name=”dataSource”>

                <ref bean=”dataSource”/>

            </property>

        </bean>

     

       <!— 示例中 DAO-->

        <bean id=”bookDAO” class=”com.bookDAO”>

            <property name=”dataSource”>

                <ref bean=”dataSource”/>

            </property>

            <property name=”transactionManager”>

                <ref bean=”transactionManager”>

            </property>

       </bean>

    </beans>

       這樣 Spring 就可以自動進行 commit rollback 這兩個操作了。粉色部分是為了和 bookDAO 中的粉色部分相匹配。

    2 、使用JdbcTemplate進行事務處理(硬編碼進行commitrollback

    1 )使用事務處理的類

     

    import javax.sql.DataSource;

    import org.springframework.jdbc.core.*;

    import org.springframework.transaction.*;

    import org.springframework.dao.*;

     

    public class bookDAO{

    private DataSource dataSource;// 依賴注入 dataSource ,管理數據庫

    private PlatformTransationManager transactionManager;// 依賴注入管理事務

     

    public void setDataSource(DataSource dataSource){

        this.dataSource=dataSource;

    }

     

         public void setTransactionManager(PlatformTransationManager transactionManager){

             this. transactionManager= transactionManager;

    }

     

    public int create(String msg){

      /*  TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);

          Object result= transactionTemplate.execute (

           new TransactionCallback()

    {

              public Object doInTransaction(TransactionStatus status)

    {

     

                  return resultObject;

               }

           }

        )*/

      // 使用下面的代碼替換上面注釋掉的部分

        DefaultTransactionDefinition def =new DefaultTransactionDefinition();

       TransactionStatus status=transactionManager.getTransaction(def);

       try

    {

            JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);

            jdbcTemplate.update(“INSERT INTO book VALUES(1,’gf’,’Mastering Spring’)”);

       }

       catch(DataAccessException ex)

    {

           transactionzManager.rollback(status);

           throw ex;

       }

       finally

       {

            transactionManager.commit(status);

       }

    }

    }

    2 )配置文件

    同上

     

    ( )聲明式事務處理

    1 )使用事務處理的類

     

    import javax.sql.DataSource;

    import org.springframework.jdbc.core.*;

    import org.springframework.transaction.*;

    import org.springframework.dao.*;

     

    public class bookDAO{

    private DataSource dataSource;// 依賴注入 dataSource ,管理數據庫

    private PlatformTransationManager transactionManager;// 依賴注入管理事務

     

    public void setDataSource(DataSource dataSource){

        this.dataSource=dataSource;

    }

     

         public void setTransactionManager(PlatformTransationManager transactionManager){

             this. transactionManager= transactionManager;

    }

     

    public int create(String msg){

      /*  TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);

          Object result= transactionTemplate.execute (

           new TransactionCallback()

    {

              public Object doInTransaction(TransactionStatus status)

    {

     

                  return resultObject;

               }

           }

        )*/

     

    /*  DefaultTransactionDefinition def=new DefaultTransactionDefinition();

       TransactionStatus status=transactionManager.getTransaction(def);

       try

    {

            JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);

            jdbcTemplate.update(“INSERT INTO book VALUES(1,’gf’,’Mastering Spring’)”);

       }

       catch(DataAccessException ex)

    {

           transactionzManager.rollback(status);

           throw ex;

       }

        finally

       {

           transactionManager.commit(status);

       } */

    // 使用下面的代碼替換上面注釋掉的部分

         JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);

        jdbcTemplate.update(“INSERT INFO book VALUES(1,’gf’,’Mastering Spring’)”);

    / / 相比,此段代碼省去了 commit rollback 事務處理語句;與 相比,不必實現 TransactionCallback 接口

    }

    }

    2 )配置文件

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

     "http://www./dtd/spring-beans.dtd">

    <beans>

       <!— dataSource à

       <bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>

          <!— 使用SQL Server à

           <property name=”driverClassName”>

              <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

           </property>

            <property name=”url”>

              <value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>

           </property>

    <property name=”name”>

              <value>admin</value>

           </property>

    <property name=”msg”>

              <value>admin</value>

           </property>

        </bean>

     

        <!— 設定 transactionManager à

        <bean id=”transactionManager”

    class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>

            <property name=”dataSource”>

                <ref bean=”dataSource”/>

            </property>

        </bean>

     

       <!— 示例中 DAO-->

        <bean id=”bookDAO” class=”com.bookDAO”>

            <property name=”dataSource”>

                <ref bean=”dataSource”/>

            </property>

        <!— 與編程式事務處理相比,在 DAO 設置中去掉了這個屬性,把它放到了代理類中。 - à

     

        <!—    <property name=”transactionManager”>

                <ref bean=”transactionManager”>

            </property> - à

     

       </bean>

       <!— 聲明式事務處理 - à

       <bean id=”bookDAOProxy” class=”org.springframework.transaction.interceptor.Transation.ProxyFactoryBean”>

            <property name=”transacionManager”>

                <ref bean=”transacionMaganer”/>

            </property>

    <property name=”target”>

                <ref bean=”bookDAO”/>

            </property>

    <property name=”transactionAttributes”>

                <props>

                   <!-- 表示對 bookDAO 中的 create 方法進行事務處理,并指明當前沒有事務就新建一個(用 PROPAGATION_REQUIRED 常量來表示的) à

                    <prop key=”create * ”>PROPAGATION_REQUIRED</prop>

                </props>

            </property>  

       </bean>

    </beans>

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产二区三区不卡免费| 亚洲精品美女一区二区| 麻豆精品一区二区综合av| 国产精成人品日日拍夜夜| 精品国产一区二区三区麻豆| 国产AV无区亚洲AV麻豆| 亚洲 日本 欧洲 欧美 视频| 精品久久久久久无码专区| 最新国产精品中文字幕| 国产福利萌白酱在线观看视频 | 国产成人高清精品亚洲| 国产真实伦在线观看视频| 精品亚洲精品日韩精品| 久久精品国产99久久久古代| 亚洲精品日本一区二区| 国精品人妻无码一区免费视频电影| 国产精品剧情亚洲二区| 精品无码国产一区二区三区51安| 亚州中文字幕一区二区| 情侣黄网站免费看| 亚洲人成网站77777在线观看 | 久久亚洲精品11p| 99久久久国产精品消防器材| 最新偷拍一区二区三区| 特级毛片A级毛片免费播放| 午夜福利片1000无码免费| 同桌上课脱裙子让我帮他自慰| 小嫩批日出水无码视频免费| 小妖精又紧又湿高潮H视频69| 6080午夜三级中文在线观看| 欧美人妻在线一区二区| 无码一区二区三区AV免费| 亚洲日韩性欧美中文字幕| 国产精品国三级国产av| 日本公与熄乱理在线播放| 无码专区 人妻系列 在线| 国产精品久久国产三级国不卡顿 | 全国最大的成人网站| 美乳丰满人妻无码视频| 国内精品久久久久久无码不卡| 欧美人与动人物牲交免费观看|