博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Spring+MyBatis组合中使用事务
阅读量:6756 次
发布时间:2019-06-26

本文共 3080 字,大约阅读时间需要 10 分钟。

   通过Spring和MyBatis的组合,给出一个较为详细的实例

 

  代码清单:配置Spring+MyBatis测试环境

 

  代码清单:POJO类——Role.java
package com.ssm.chapter13.pojo;public class Role {    private Long id;    private String roleName;    private String note;}

 

  代码清单:搭建MyBatis的RoleMapper.xml
insert into t_role (role_name, note) values (#{roleName}, #{note})

 

  代码清单:RoleMapper接口
package com.ssm.chapter13.mapper;import com.ssm.chapter13.pojo.Role;import org.springframework.stereotype.Repository;@Repositorypublic interface RoleMapper {    public int insertRole(Role role);}

 

  代码清单:mybatis-config.xml

 

  代码清单:操作角色的两个接口
public interface RoleService {    public int insertRole(Role role);}public interface RoleListService {    public int insertRoleList(List
roleList);}

 

  代码清单:两个接口的实现类
@Servicepublic class RoleServiceImpl implements RoleService {    @Autowired    private RoleMapper roleMapper;    @Override    @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)    public int insertRole(Role role) {        return roleMapper.insertRole(role);    }}@Servicepublic class RoleListServiceImpl implements RoleListService {    Logger log = Logger.getLogger(RoleListServiceImpl.class);    @Autowired    private RoleService roleService;    @Override    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)    public int insertRoleList(List
roleList) { int count = 0; for (Role role : roleList) { try { count += roleService.insertRole(role); } catch (Exception ex) { log.info(ex); } } return count; }}

 

  代码清单:测试隔离级别和传播行为——Chapter13Main.java
public class Chapter13Main {    public static void main(String[] args) {        ApplicationContext ctx = new ClassPathXmlApplicationContext("ssm/chapter13/spring-cfg.xml");        RoleListService roleListService = ctx.getBean(RoleListService.class);        List
roleList = new ArrayList
(); for (int i = 1; i <= 2; i++) { Role role = new Role(); role.setRoleName("role_name_" + i); role.setNote("note_" + i); roleList.add(role); } int count = roleListService.insertRoleList(roleList); System.out.println(count); }}

 

  由于保存点技术并不是每一个数据库都能支持的,所以当你把传播行为设置为NESTED时,Spring会先去探测当前数据库是否能够支持保存点技术。如果数据库不予支持,它就会和REQUIRES_NEW一样创建新事务去运行代码,以达到内部方法发生异常时并不回滚当前事务的目的。
文章来源:ssm13.6 

转载于:https://www.cnblogs.com/ooo0/p/11029683.html

你可能感兴趣的文章
Java:按值传递还是按引用传递详细解说
查看>>
(转)HTML字符实体(Character Entities),转义字符串(Escape Sequence)
查看>>
去掉 Android工程中让人很不爽的“黄色警告”
查看>>
aliyun阿里云Maven仓库地址
查看>>
jdk1.8 HashMap源码分析(resize函数)
查看>>
再看static数据成员
查看>>
Pthon Matplotlib 画图
查看>>
十种排序算法实例说明总结
查看>>
Python 语言之 map/reduce
查看>>
Vue.js - Day4
查看>>
mysql之用户
查看>>
053(三十五)
查看>>
AddonSU Packages now available for LineageOS 15.1
查看>>
UVa 10970 - Big Chocolate
查看>>
C# API 如何保证使用托管对象的平台调用成功
查看>>
产品新版本发布前要做那些事呢
查看>>
hdu-1114 Piggy-Bank---完全背包
查看>>
批处理基础
查看>>
Android Disable Package/Component 跳过app安装
查看>>
2.Storm集群部署及单词统计案例
查看>>