spring boot整合mybatis事务配置

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

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

你可能感兴趣的:(spring,boot,mybatis)