編程式事務管理、聲明式事務管理中HibernateDaoSupport與JdbcDaoSupp...

編程式事務管理、聲明式事務管理中HibernateDaoSupport與JdbcDaoSupport的應用:
 一、編程式事務管理:
 1>、JdbcDaoSupport編程式事物管理,必須繼承JdbcDaoSupport類,獲得JdbcTemplate從而實現事務管理;
 
 TestA.java:
public class TestA extends JdbcDaoSupport{
 public void test(){
     PlatformTransactionManager ptm = new DataSourceTransactionManager(this.getDataSource());
     TransactionTemplate tst = new TransactionTemplate(ptm);
     tst.execute(new TransactionCallback(){
   public Object doInTransaction(TransactionStatus status) {
      getJdbcTemplate().update("update User set password='1230' where userid='1001'"); 
      getJdbcTemplate().update("update User set email='4444444444444444444444444444444444' where userid='1002'");
      getJdbcTemplate().update("update User set phone='phone'");
      return null;
   }
     });
 }
 
 
 public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    TestA t = (TestA)ctx.getBean("testa");
    t.test();
 }
}java

須要在Spring的配置文件applicationContext.xml中控制反轉用到鏈接數據庫中的類是注入DataSource,以下:
applicationContext.xml:
  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    
    ... ...
    
    <property name="defaultAutoCommit">
    <value>false</value>
    </property>
  </bean>
    
        <bean id="testa" class="com.sun.demo.TestA">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>
2>、HibernateDaoSupport編程式事物管理,必須繼承HibernateDaoSupport類,獲得HibernateTemplate從而實現事務管理;
TestB.java:
public class TestB extends HibernateDaoSupport{
 public void test(){
     HibernateTransactionManager hm = new HibernateTransactionManager(this.getSessionFactory());
     TransactionTemplate ttm = new TransactionTemplate(hm);
     ttm.execute(new TransactionCallback(){
   public Object doInTransaction(TransactionStatus status) {
    User u1 = new User();
    u1.setUserid("3001");
    u1.setPassword("3001");
    getHibernateTemplate().save(u1);
    
    User u2 = new User();
    u2.setUserid("3001");
    u2.setPassword("3002");
    getHibernateTemplate().save(u2);
    return null;
   }
     });
 }
 
 public static void main(String[] args) {
           ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
           TestB t = (TestB)ctx.getBean("testb");
        t.test();
 }
}
須要在Spring的配置文件applicationContext.xml中控制反轉用到鏈接數據庫中的類是注入SessionsFactory,以下:
applicationContext.xml:
  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    
    ... ...
    
    <property name="defaultAutoCommit">
    <value>false</value>
    </property>
  </bean>
    
     <bean id="testb" class="com.sun.demo.TestB">
     <property name="sessionFactory">
     <ref bean="mySessionFactory"/>
     </property>
     </bean>
二、聲明式事務管理:   
1>、JdbcDaoSupport聲明式樣事物管理,必須繼承JdbcDaoSupport類;
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
        
         ... ....
  
  <property name="defaultAutoCommit">
  <value>false</value>
  </property>
</bean>
  
   須要在Spring配置文件中配置聲明事務處理,用JdbcDaoSupport提供的DataSourceTransactionManager以下:
        <!-- 事務管理配置 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>
      
        <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager" ref="transactionManager"/>
        <!-- 事務管理屬性 -->
        <property name="transactionAttributes">
           <props>
           <prop key="updateUser">PROPAGATION_REQUIRED</prop>
           </props>
        <!-- 事務管理目標bean -->
        </property>
        <property name="target" ref="userdao"></property>
        </bean>
       
        <bean id="userdao" class="com.sun.demo.UserDao">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>

IUserDao.java://定義接口
public interface IUserDao {
 public void updateUser();
}

UserDao.java:
public class UserDao extends JdbcDaoSupport implements IUserDao{
       public void updateUser(){
        this.getJdbcTemplate().update("update User set password='password1' where userid='1001'");
           this.getJdbcTemplate().update("update User set password='password9999999999999999999999999999999' where userid='1002'");
       }
}

TestA.java://調用updateUser()方法
public class{
   
    public void test(){
          ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDao u = (IUserDao)ctx.getBean("baseTransactionProxy");
          u.updateUser();
    }
 
 
 public static void main(String[] args) {
           TestA t = new TestA();
           t.test();
 }
}
2>、HibernateDaoSupport聲明式事物管理,必須繼承HibernateDaoSupport類;
IUserDao.java://定義接口
public interface IUserDao {
 public void updateUser();
}
UserDao.java:
public class UserDao extends HibernateDaoSupport implements IUserDao{
       public void updateUser(){
              User u1 = new User();
              u1.setUserid("1001");
              u1.setPassword("5001");
              this.getHibernateTemplate().update(u1);
             
             
              User u2 = new User();
              u2.setUserid("1003");
              u2.setPassword("20015555555555555555555555555555555555555555555");
              this.getHibernateTemplate().update(u2);
       }
}

測試:
public class TestA{
   
    public void test(){
          ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDao userdao= (IUserDao)ctx.getBean("userproxy");
          userdao.updateUser();
    }
 
 
 public static void main(String[] args) {
           TestA t = new TestA();
           t.test();
 }
}
 須要在Spring配置文件中配置聲明事務處理,用JdbcDaoSupport提供的HibernateTransactionManager以下: applicationContext.xml:         <!-- 事務管理配置 -->         <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">         <property name="sessionFactory">         <ref bean="mySessionFactory"/>         </property>         </bean>                 <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">         <property name="transactionManager" ref="transactionManager"/>         <!-- 事務管理屬性 -->         <property name="transactionAttributes">            <props>            <prop key="update*">PROPAGATION_REQUIRED</prop>            <prop key="save*">PROPAGATION_REQUIRED</prop>            <prop key="delete*">PROPAGATION_REQUIRED</prop>            </props>         <!-- 事務管理目標bean -->               </property>         </bean>                 <bean id="userdao" class="com.sun.demo.UserDao">         <property name="sessionFactory">         <ref bean="mySessionFactory"/>         </property>         </bean>                 <bean id="userproxy" parent="baseTransactionProxy">         <property name="target" ref="userdao"></property>         </bean>
相關文章
相關標籤/搜索