您的位置:首页 > 编程语言 > Java开发

spring boot整合mybatis事务配置

2018-05-21 09:49 447 查看
版权声明:原创文章,转载注明出处 https://blog.csdn.net/u010816545/article/details/80388334

spring boot整合mybatis事务配置

接着上一篇文章,spring boot整合mybatis,需要配置事务。
只需要修改两个地方

一,service

事务主要是配置在处理业务逻辑的service层。在设计service层的时候,应该合理的抽象出方法包含的内容。然后将方法用@Trasactional注解注释,默认的话在抛出Exception.class异常的时候,就会触发方法中所有数据库操作回滚,当然这指的是增、删、改。
当然,@Transational方法是可以带参数的,具体的参数解释如下:

属性 类型 描述
value String 可选的限定描述符,指定使用的事务管理器
propagation enum: Propagation 可选的事务传播行为设置
isolation enum: Isolation 可选的事务隔离级别设置
readOnly boolean 读写或只读事务,默认读写
timeout int (in seconds granularity) 事务超时时间设置
rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组
rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组
noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

示例代码

@Service
public class TSUserServiceImpl implements TSUserService{
@Autowired
private TSUserDao tSUserDao;

@Transactional
public int insertTSUser(TSUser value){
return tSUserDao.insertTSUser(value);
}
@Transactional
public int insertNonEmptyTSUser(TSUser value){
return tSUserDao.insertNonEmptyTSUser(value);
}
@Transactional
public int insertTSUserByBatch(List<TSUser> value){
return tSUserDao.insertTSUserByBatch(value);
}
@Transactional
public int deleteTSUserById(String id){
return tSUserDao.deleteTSUserById(id);
}
@Transactional
public int deleteTSUser(Assist assist){
return tSUserDao.deleteTSUser(assist);
}
@Transactional
public int updateTSUserById(TSUser enti){
return tSUserDao.updateTSUserById(enti);
}

}

二,启动类

开启事务

最后你要在Application类中开启事务管理,开启事务管理很简单,只需要@EnableTransactionManagement注解就行

@SpringBootApplication
@EnableTransactionManagement
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

三,事务传播行为

关于propagation属性的7个传播行为
REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执行的事务环境,如果当前没有事务,就新建一个事务。这是默认值。
SUPPORTS:指定当前方法加入当前事务环境,如果当前没有事务,就以非事务方式执行。
MANDATORY:指定当前方法必须加入当前事务环境,如果当前没有事务,就抛出异常。
REQUIRES_NEW:指定当前方法总是会为自己发起一个新的事务,如果发现当前方法已运行在一个事务中,则原有事务被挂起,自己创建一个属于自己的事务,
一直我自己这个方法commit结束,原先的事务才会恢复执行。
NOT_SUPPORTED:指定当前方法以非事务方式执行操作,如果当前存在事务,就把当前事务挂起,等我以非事务的状态运行完,再继续原来的事务。
NEVER:指定当前方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常,只有没关联到事务,才正常执行。
NESTED:指定当前方法执行时, 如果已经有一个事务存在,则运行在这个嵌套的事务中.如果当前环境没有运行的事务,就新建一个事务,
并与父事务相互独立,这个事务拥有多个可以回滚的保证点。就是指我自己内部事务回滚不会对外部事务造成影响,只对DataSourceTransactionManager事务管理器起效。
REQUIRED是默认值,示例代码中就没有写,也就是说service实现类话可以这样写

@Service
public class TSUserServiceImpl implements TSUserService{
@Autowired
private TSUserDao tSUserDao;

@Transactional
public int insertTSUser(TSUser value){
return tSUserDao.insertTSUser(value);
}
@Transactional(propagation = Propagation.REQUIRED)
public int insertNonEmptyTSUser(TSUser value){
return tSUserDao.insertNonEmptyTSUser(value);
}
@Transactional(propagation = Propagation.REQUIRED)
public int insertTSUserByBatch(List<TSUser> value){
return tSUserDao.insertTSUserByBatch(value);
}
@Transactional(propagation = Propagation.REQUIRED)
public int deleteTSUserById(String id){
return tSUserDao.deleteTSUserById(id);
}
@Transactional(propagation = Propagation.REQUIRED)
public int deleteTSUser(Assist assist){
return tSUserDao.deleteTSUser(assist);
}
@Transactional(propagation = Propagation.REQUIRED)
public int updateTSUserById(TSUser enti){
return tSUserDao.updateTSUserById(enti);
}
}

具体情况视需求而定,源代码下载

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: