Spring 注解学习手札(五) 业务层事务处理
控制器层、持久层都有了一些介绍,剩下的就是业务层了!
业务层中的关键问题在于事务控制!Spring的注解式事务处理其实很简单!
相关参考:
Spring 注解学习手札(一) 构建简单Web应用
Spring 注解学习手札(二) 控制层梳理
Spring 注解学习手札(三) 表单页面处理
Spring 注解学习手札(四) 持久层浅析
Spring 注解学习手札(五) 业务层事务处理
Spring 注解学习手札(六) 测试
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
Spring 注解学习手札(八) 补遗——@ExceptionHandler
这里将用到以下几个包:
细化一下AccountService接口方法
AccountService.java
@Transactional(readOnly = true)只读属性
@Transactional(readOnly = false, rollbackFor = DataAccessException.class)只读关闭,遇到DataAccessException异常回滚!如果不对异常进行处理,该异常将一直向上层抛出,直至抛出到页面!
如果你的Eclipse集成了SpringIDE,你可以观察一下这时的xml配置文件和AccoutServiceImpl.java的变化!


这次,来个用户注册功能演示,故意在某个位置制造一个异常,看看是否正常回滚!
先看注册控制器
RegisterController.java
@InitBinder用于表单自定义属性绑定。这里我们要求输入一个日期格式的生日。
@RequestMapping(method = RequestMethod.GET)用于初始化页面。
@RequestMapping(method = RequestMethod.POST)用于提交页面。
再看注册页面
register.jsp
这里我用了一个JavaScript日期控制标签:
使用起来就像是这样:
非常好用!!!当然,你完全可以使用JE上的那个JS控件!
接下来稍微调整一下AccountService接口及其实现AccountServiceImpl
AccountService.java
的确有点雷人~
从架构考虑,这是符合业务要求的实现!如果用iBatis或者Hibernate,这个问题就有数据库一次IO处理完成了!![]()
再看看AccountDao接口及其实现AccountDaoImpl
AccountDao.java
注册:
信息展示:
来制造一起事故!![]()
先看看数据库目前的状况!
在AccountDaoImpl中来个破坏!![]()
来个注册试试!
点击提交看看返回的异常!![]()
异常回滚生效!![]()
数据库中当然是什么都没有,我就不废话了!![]()
相关实现见附件!![]()
相关参考:
Spring 注解学习手札(一) 构建简单Web应用
Spring 注解学习手札(二) 控制层梳理
Spring 注解学习手札(三) 表单页面处理
Spring 注解学习手札(四) 持久层浅析
Spring 注解学习手札(五) 业务层事务处理
Spring 注解学习手札(六) 测试
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
Spring 注解学习手札(八) 补遗——@ExceptionHandler
I can got the page source, but blank page.
why?
I can got the page source, but blank page.
why?
看一下附件中的源码,这个是个日历JS控件~ 3 楼 远去的渡口 2011-10-31 下载了你的工程,好象缺少一个方法,还缺了许多文件 ,实在没有看明白。
现在遇到一个棘手的问题,Spring通过注解的方式配置的事务没有起作用,还请多多指点。
问题链接是http://juliana-only.iteye.com/admin/blogs/1224916,有详细的描述,望赐教。

当然,你完全可以使用JE上的那个JS控件!



