更新时间:2024-01-05 来源:黑马程序员 浏览量:
在Spring的事务管理配置信息中,只有find*方法是只读的,因此要验证事务的只读方法是否生效,可以在Dao和Service中编写一个findByld()方法,并在Service中增加保存Person对象的操作。如果事务控制成功,则保存操作会失败。下面就按照此种方式测试事务的只读操作。
(1)编写Dao层接口方法。在PersonDao接口中,增加一个根据id查询数据的方法findById(),其方法代码如下所示:
//根据id查询 public Person findById(String id);
(2)编写DAO层实现类方法。在其实现类PersonDaoImpl中实现该方法,其代码如下所示。
public Person findById(String id) { return getHibernateTemplate().get(Person.class,id); }
(1)编写Service层接口方法。在接口PersonService中,创建一个名称为findById的方法,其方法如下所示:
//根据id查询 public Person findById(String id);
(2)编写Service层实现类方法。在PersonService的实现类PersonServiceImpl中实现findById()方法,其代码如下所示:
public Person findById(String id) { save(new Person("test")); return personDao.findById(id); }
在上述方法代码中,首先保存并创建了一个名称为test的对象,然后返回PersonDao中使用findById()方法查询的信息。
在测试类TestMerge中,创建一个名称为testReadOnlyTransaction的方法,使用该方法测试只读事务操作,其代码如下所示:
@Test public void testReadOnlyTransaction() { PersonService ts=(PersonService)ctx.getBean("personService"); //在只读方法中,进行新增操作,如果事务控制成功,则新增失败 Person p=ts.findById("2c90ab9157fee13c0157feel13cbb0000"); System.err.println("人员名称为:"+p.getName()); }
在上述代码中,获取了PersonService实例后,调用了实例中的findById()方法(方法中的id值是从数据库中获取的),而在该方法中,故意新增了一个person对象,即执行写数据,如果只读事务起效,那么会报出事务异常,新增的person也将失败。
本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:黑马程序员Java培训学院