1. 程式人生 > 程式設計 >Java Spring事務使用及驗證過程詳解

Java Spring事務使用及驗證過程詳解

事務,只要是為了保證資料的原子性。避免出現髒資料。

下面來講解下spring是如何使用事務的。

1.配置事務。這裡採用的是註解的模式

<!-- 配置事務管理器 ,如果你暫時未使用到事務可以不配置,次以下內容均可以在不適用事務的情況下刪除 -->
<bean id="transactionManager"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
  <property name="dataSource" ref="dataSource"/>
</bean>
 
 <!-- 開啟事務行為 -->
<tx:annotation-driven transaction-manager="transactionManager" />

2.配置就基本搞定了,然後就是在service或者service的方法上使用@Transactional定義是否需要是否管理就行了。

@Transactional
  @Override
  public String userInfoData(String id) {
    // TODO Auto-generated method stub
    System.out.print("呼叫 dao層方法");
    UserInfo arr = loginDao.getUser(1);
    System.out.println("arr id = "+ arr.getId());
    System.out.println("arr Username = "+ arr.getUsername());
     
    MoneyInfo money = moneyDao.getmoney(1);
     
    moneyDao.InsertMony(500);
     
    loginDao.InsertUser(3,"Tigger");
     
     
    System.out.println("money = "+ money.getMoney());
    System.out.println("money += "+ money.getMoney());
    Logger log = Logger.getLogger(UserServiceImpl.class);
     
    log.info("執行了m01...");
    //1.mybatis 的自己呼叫方法
/*   try {
      mybatisTest();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }*/
    //2.spring + mybatis整合後的呼叫
     
    return null;
  }

 以上就基本可以搞定了,驗證配置是否成功的話,可以在不加註解的時候插入兩條資料,後面一條資料是會報錯的。

如果不使用事務的話,會發現第一條插入成功到DB裡去了,然後在插入第二條的時候,程式報錯。

如果這裡使用@Transactional 開啟事務,那麼會發現兩條資料都插入不了,直接報錯了,這裡事務就成功的啟用了起來。

@Transactional

(1)這裡說明一下,有的把這個註解放在類名稱上面了,這樣你配置的這個@Transactional 對這個類中的所有public方法都起作用.

(2)@Transactional 方法方法名上,只對這個方法有作用,同樣必須是public的方法

(3)資料庫引擎要支援事務,如果是MySQL,注意表要使用支援事務的引擎,比如innodb,如果是myisam,事務是不起作用的

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。