首页常见问题正文

SSH框架整合:测试事务只读方法

更新时间:2024-02-20 来源:黑马程序员 浏览量:

IT培训班

  在Spring的事务管理配置信息中,只有find*方法是只读的,因此要验证事务的只读方法是否生效,可以在Dao和Service中编写一个findById()方法,并在Service中增加保存Person对象的操作。如果事务控制成功,则保存操作会失败。下面就按照此种方式测试事务的只读操作。

  1.实现Dao

  (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);
}

  2.实现Service

  (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()方法查询的信息。

  3.编写测试方法并查看运行结果

  在测试类TestMerge中,创建一个名称为testReadOnlyTransaction的方法,使用该方法测试只读事务操作,其代码如下所示:

@Test
public void testReadOnlyTransaction() {
    PersonService ts=(PersonService)ctx.getBean("personService");
    //在只读方法中,进行新增操作,如果事务控制成功,则新增失败
    Person p=ts.findById("2c90ab9157feel3c0157feel3cbb0000");
    System.err.println("人员名称为:"+p.getName());
}

  在上述代码中,获取了PersonService实例后,调用了实例中的findById()方法(方法中的id值是从数据库中获取的),而在该方法中,故意新增了一个person对象,即执行写数据,如果只读事务起效,那么会报出事务异常,新增的person也将失败。

  本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!

  作者:黑马程序员Java培训学院

  首发:https://java.itheima.com

分享到:
在线咨询 我要报名
和我们在线交谈!