在使用mybatis时进行批删除或批添加用到的service层事务的理解

事务重新理解:在执行批添加或批删除时  如果有10条数据需要处理,关系表和主键表  ,关系表操作完毕之后,在操作主键表时报错了,就需要将关系表数据复原,需要回滚事务(callback),而在这时,一个service代表一个事务,,在框架中一般在配置文件中配置了事务

<!-- 配置当出现Exception、RuntimeException、Exception时采用对应的事务操作 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="delete*" propagation="REQUIRED"
				read-only="false" rollback-for="java.lang.Exception"
				no-rollback-for="java.lang.RuntimeException" />
			<tx:method name="insert*" propagation="REQUIRED"
				read-only="false" rollback-for="java.lang.RuntimeException" />
			<tx:method name="update*" propagation="REQUIRED"
				read-only="false" rollback-for="java.lang.Exception" />
			<tx:method name="find*" propagation="SUPPORTS" />
			<tx:method name="get*" propagation="SUPPORTS" />
			<tx:method name="select*" propagation="SUPPORTS" />
		</tx:attributes>
	</tx:advice>

在service类里以此种方式命名即为一个事务。


本人在处理以下业务时(效果好使,但是编码思路不对)

/**
	 * 条件删除 第二步:执行批量删除
	 */
	@SuppressWarnings("rawtypes")
	@RequestMapping("/deleteDispatchRuleByconditionNext")
	public String deleteByconditionNext(HttpServletRequest req,HttpServletResponse resp,Page page,WoDispatchRule dispatchRule,Model model){
		/**通过筛选条件查找出符合条件的规则**/
		page = SearchUtil.getQueryCondition(req, "deleteDispatchRuleBycondition", dispatchRule, page);
		page = dispatchRuleService.findDispatchRuleList(page);
		if(page.getData().size()>0){
			for(int i=0;i<page.getData().size();i++){
				WoDispatchRule dispatchRule2 = (WoDispatchRule)page.getResult().get(i);
				dispatchRule.setRuleId(dispatchRule2.getRuleId());
				dispatchRuleService.deleteById(dispatchRule);
			}
		}		
		model.addAttribute("message", "success");
		return "/workorder/result";
	}  

第一:查询结果集是从page中取得,但是page.data是分页后的结果,所以是不完全结果集

第二:删除没有事务  一个service方法是一个事务,因为此部分代码写在了action里


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值