ssm的事物回滚实现
来源:互联网 发布:java可以做网站吗 编辑:程序博客网 时间:2024/05/22 05:08
ssm的事物回滚实现
案例
事物回滚操作对于现在的我来讲,真是很少用到,但它的确是一个很实用的办法,特别是一次性要处理某一个用户的多条数据时;
最近我就接触过一个这样的操作:
业务是设置隐私保护,默认是无隐私保护的,用户在隐私设置页面不勾选的就会将用户数据保护起来,只能通过扫码验证才能访问;
实现改操作使用事物回滚的原因:
用户隐私保护设置数据并不是全部数据,仅仅只是未选中的,也就是说:数据库保存的只是用户设置有保护的数据;
用户点击保存的时候,传过去的数据根据id去查有没有这条数据的记录,之后有的就保存(不做修改),没有的就删除,但这样太繁琐;
所以我选择先根据用户id清空用户以前的数据,再根据用这次保存的数据进行插入操作,重新创建改用户的隐私保护设置;
这样删除和新增就绑在了一起,要他们同时成功才算书屋成功,若有一个发生错误,则要执行回滚操作.
配置文件开启事物控制
我这就不展示全部配置,只搞出个重点!
controller代码
这里直接将json数据变成了对象集合,实现的操作可以看我上一篇笔记:
http://blog.csdn.net/java_trainee/article/details/74479737
// 保存用户隐私设置 @RequestMapping ("/savaUserGenPrivacySet") @ResponseBody public String savaUserGenPrivacySet (HttpServletResponse response, HttpServletRequest request) { try { request.setCharacterEncoding ("utf-8"); response.setCharacterEncoding ("utf-8"); } catch (UnsupportedEncodingException e) { _logger.error (e.getMessage ()); } // 返回数据的容器 Map <String, Object> resultMap = new HashMap <String, Object> (); Long userid = Long.parseLong (request.getParameter ("userid")); try { UserGenPrivacy userGenPrivacy = new UserGenPrivacy (); userGenPrivacy.setUserid (userid); String jsonArrStr = request.getParameter ("JSONArrStr"); JSONArray arr = JSONArray.fromObject (jsonArrStr); List <UserGenPrivacy> userGenPrivacys = JSONArray.toList (arr, new UserGenPrivacy (), new JsonConfig ()); boolean isOk = _privacyProtectService.savaUserGenPrivacySet (userGenPrivacy, userGenPrivacys); String msg = ""; if (isOk) { msg = "设置保存成功!"; } else { msg = "设置保存失败!"; } resultMap.put ("result", msg); } catch (Exception e) { _logger.error ("用户通用隐私设置保存失败", e); } JsonConfig config = new JsonConfig (); config.registerJsonValueProcessor (Date.class, new JsonDateValueProcessor ("yyyy-MM-dd")); return JSONObject.fromObject (resultMap, config).toString (); }
service
这里的注解@Transactional (propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)很重要,
现在只要该方法出现了异常就会发生回滚
/** * * 保存(新增)用户隐私设置(通用隐私设置) * * @param userGenPrivacy[提供userid,List <UserGenPrivacy>实体对象(实际保存数据)] * @return boolean(true:成功;false:失败) */ @Transactional (propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) public boolean savaUserGenPrivacySet (UserGenPrivacy userGenPrivacy, List <UserGenPrivacy> userGenPrivacys) { // 清空用户隐私设置的数据 _logger.info ("清空用户隐私设置数据:"); try { _userGenPrivacyMapper.cleanUserGenPrivacySet (userGenPrivacy); } catch (Exception e) { _logger.error ("清空用户隐私设置数据异常:", e); return false; } _logger.info ("保存用户隐私设置数据:"); try { for (UserGenPrivacy userGenPriSet : userGenPrivacys) { _userGenPrivacyMapper.savaUserGenPrivacySet (userGenPriSet); } } catch (Exception e) { _logger.error ("保存用户隐私设置数据异常:", e); return false; } return true; }
阅读全文
0 0
- ssm的事物回滚实现
- spring实现事物的回滚
- 事物的手动回滚
- jfinal事物回滚实现方式
- spring事物的提交与回滚
- SQL事物--回滚
- Mysql事物回滚
- spring事物回滚
- 事物回滚例子
- Spring事物回滚
- pdo事物回滚
- pdo事物回滚
- thinkphp 事物回滚
- PHP 如何在Redis中实现事物(事物提交和事物回滚)
- PHP CI框架中实现事物回滚
- PHP CI框架中实现事物回滚
- 提交与回滚事物
- Spring事物回滚详解
- matplotlib(学习三----全部命令行)
- Android Gson详解(二)
- 3155: Preprefix sum
- JS禁止页面中的一些操作事件
- python中如何判断路径是否存在
- ssm的事物回滚实现
- python爬虫-->验证码处理
- Python爬虫实践笔记(三)
- 28&29day-UIWebView
- USACO 2.3 Money Systems 题解
- L
- composer 国内镜像配置
- 如何有效预防晕机?
- Java泛型中擦除的问题