更新時間:2024-01-05 來源:黑馬程序員 瀏覽量:
在Spring的事務(wù)管理配置信息中,只有find*方法是只讀的,因此要驗證事務(wù)的只讀方法是否生效,可以在Dao和Service中編寫一個findByld()方法,并在Service中增加保存Person對象的操作。如果事務(wù)控制成功,則保存操作會失敗。下面就按照此種方式測試事務(wù)的只讀操作。
(1)編寫Dao層接口方法。在PersonDao接口中,增加一個根據(jù)id查詢數(shù)據(jù)的方法findById(),其方法代碼如下所示:
//根據(jù)id查詢 public Person findById(String id);
(2)編寫DAO層實現(xiàn)類方法。在其實現(xiàn)類PersonDaoImpl中實現(xiàn)該方法,其代碼如下所示。
public Person findById(String id) { return getHibernateTemplate().get(Person.class,id); }
(1)編寫Service層接口方法。在接口PersonService中,創(chuàng)建一個名稱為findById的方法,其方法如下所示:
//根據(jù)id查詢 public Person findById(String id);
(2)編寫Service層實現(xiàn)類方法。在PersonService的實現(xiàn)類PersonServiceImpl中實現(xiàn)findById()方法,其代碼如下所示:
public Person findById(String id) { save(new Person("test")); return personDao.findById(id); }
在上述方法代碼中,首先保存并創(chuàng)建了一個名稱為test的對象,然后返回PersonDao中使用findById()方法查詢的信息。
在測試類TestMerge中,創(chuàng)建一個名稱為testReadOnlyTransaction的方法,使用該方法測試只讀事務(wù)操作,其代碼如下所示:
@Test public void testReadOnlyTransaction() { PersonService ts=(PersonService)ctx.getBean("personService"); //在只讀方法中,進(jìn)行新增操作,如果事務(wù)控制成功,則新增失敗 Person p=ts.findById("2c90ab9157fee13c0157feel13cbb0000"); System.err.println("人員名稱為:"+p.getName()); }
在上述代碼中,獲取了PersonService實例后,調(diào)用了實例中的findById()方法(方法中的id值是從數(shù)據(jù)庫中獲取的),而在該方法中,故意新增了一個person對象,即執(zhí)行寫數(shù)據(jù),如果只讀事務(wù)起效,那么會報出事務(wù)異常,新增的person也將失敗。
本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員Java培訓(xùn)學(xué)院
首發(fā):https://java.itheima.com