此文已由作者夏昀授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

Model类如下:package com.xy.model

1 package com.xy.model;
 2 
 3 /**
 4  * Created by helloworld on 2015/1/30.
 5  */
 6 public class NameQa {
 7     private long id;
 8     private String nameQa;
 9 
10     public long getId() {
11         return id;
12     }
13 
14     public void setId(long id) {
15         this.id = id;
16     }
17 
18     public String getNameQa() {
19         return nameQa;
20     }
21 
22     public void setNameQa(String nameQa) {
23         this.nameQa = nameQa;
24     }
25 }
1 package com.xy.model;
 2 
 3 /**
 4  * Created by helloworld on 2015/1/30.
 5  */
 6 public class NameDev {
 7     private long id;
 8     private String nameDev;
 9 
10     public long getId() {
11         return id;
12     }
13 
14     public void setId(long id) {
15         this.id = id;
16     }
17 
18     public String getNameDev() {
19         return nameDev;
20     }
21 
22     public void setNameDev(String nameDev) {
23         this.nameDev = nameDev;
24     }
25 }

qa数据源的mybatis mapper接口 package com.xy.dao

1 package com.xy.dao;
 2 
 3 import com.xy.model.NameQa;
 4 
 5 /**
 6  * Created by helloworld on 2015/1/30.
 7  */
 8 public interface NameQaMapper {
 9     int insert(NameQa nameQa);
10 }

dev数据源的mybatis mapper接口 package com.xy.devdao

1 package com.xy.daodev;
 2 
 3 import com.xy.model.NameDev;
 4 
 5 /**
 6  * Created by helloworld on 2015/1/30.
 7  */
 8 public interface NameDevMapper {
 9     int insert(NameDev nameDev);
10 }

处理事务的service

1 package com.xy.service;
 2 
 3 import com.xy.dao.NameQaMapper;
 4 import com.xy.daodev.NameDevMapper;
 5 import com.xy.model.NameDev;
 6 import com.xy.model.NameQa;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Service;
 9 import org.springframework.transaction.annotation.Transactional;10 
11 /**
12  * Created by helloworld on 2015/1/30.
13  */
14 @Service
15 public class NameService {
16     @Autowired
17     NameQaMapper nameQaMapper;
18     @Autowired
19     NameDevMapper nameDevMapper;
20 
21     @Transactional(rollbackFor = Exception.class)
22     public void addQaAndDev(boolean hasException) throws Exception {
23         NameQa nameQa = new NameQa();
24         nameQa.setNameQa("qa");
25         nameQaMapper.insert(nameQa);
26 
27         NameDev nameDev = new NameDev();
28         nameDev.setNameDev("dev");
29         nameDevMapper.insert(nameDev);
30 
31         if(hasException) {
32             throw new Exception();
33         }
34     }
35 
36 
37 }

controller代码

1 package com.xy.controller;
 2 
 3 import com.xy.service.NameService;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.stereotype.Controller;
 6 import org.springframework.ui.ModelMap;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.RequestMethod;
 9 import org.springframework.web.bind.annotation.RequestParam;
10 
11 /**
12  * Created by helloworld on 2014/11/22.
13  */
14 @Controller
15 public class mybatisController {
16 
17     @Autowired
18     NameService nameService;
19 
20     @RequestMapping(value = "/addName", method = RequestMethod.POST)
21     ModelMap addName(@RequestParam("hasException") boolean hasException) {
22         try {
23             nameService.addQaAndDev(hasException);
24         } catch (Exception e) {
25             e.printStackTrace();
26             return new ModelMap("false");
27         }
28         return new ModelMap("true");
29     }
30 
31 
32 }

将项目打成war包,命名为mybatis.war部署在tomcat上。

测试:

request parameters: hasException=false

返回:true 数据添加成功

request parameters: hasException=true

返回:false 两个数据库数据都未添加

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 在一台服务器上搭建相对高可用HiveServer实践
【推荐】 接口测试之Kotlin篇(下)
【推荐】 测试角度的并发和幂等问题总结

最新文章

  1. Js实现string.format
  2. Windows Phone 8弹窗
  3. 如何站在使用者的角度来设计SDK-微信公众号开发SDK(消息处理)设计之抛砖引玉
  4. java 构造方法
  5. Hekaton是如何影响你数据库的目标恢复时间(RTO)的
  6. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
  7. 使用oss批量上传图片
  8. JBoss EAP6/AS7/WildFly: How to Use Properties Files Outside Your Archive--reference
  9. Java format 简单应用
  10. newlisp 注释生成文档
  11. css实现多行文本溢出显示省略号(…)全攻略
  12. JavaScript的DOM编程--12--innerHTML属性
  13. 导出和导入Docker容器
  14. leetcode — minimum-path-sum
  15. HTTP Health Checks
  16. vim必备
  17. MySQL中基于mysqldump和二进制日志log-bin进行逻辑备份以及基于时间点的还原
  18. AngularJS中的transclusion案例
  19. Dubbo/jupiterSPI 扩展引用
  20. Disruptor并发框架简介

热门文章

  1. vlan之间Hybrid端口配置
  2. Mac上制作Centos7系统U盘安装盘
  3. Dockerfile 部署应用执行脚本文件
  4. bootstrap-table 父子表入门篇
  5. Oracle 闪回归档(Flashback Database)
  6. demo1 spark streaming 接收 kafka 数据java代码WordCount示例
  7. jenkins基础知识
  8. ajax补充FormData
  9. 12-15winform--窗体
  10. chrome开发者工具的使用