ssm的事物回滚实现

2 篇文章 0 订阅
1 篇文章 0 订阅

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



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值