前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis配置事务管理器

Mybatis配置事务管理器

原创
作者头像
爱撒谎的男孩
发布2018-05-10 18:37:31
1.2K1
发布2018-05-10 18:37:31
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

Mybatis配置事务管理器

  • 本人独立博客https://chenjiabing666.github.io
  • 数据库中的事务可以保证在连续执行的多条写操作(增删改)时,这多条操作要么成功,要么全部失败,以保证数据和逻辑的完整及严谨
  • 在使用mybatis时,无需考虑事务如何创建,如何提交等,只需要配置好事务管理器

配置事务管理器(DataSourceTransactionManager)

  • 在spring的配置文件中配置即可
代码语言:javascript
复制
<!-- 加载db.properties -->
    <util:properties id="dbConfig"
        location="classpath:db.properties" />
    
    <!-- 配置数据源 -->
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url" 
            value="#{dbConfig.url}" />
        <property name="driverClassName" 
            value="#{dbConfig.driver}" />
        <property name="username" 
            value="#{dbConfig.user}" />
        <property name="password" 
            value="#{dbConfig.password}" />
        <property name="initialSize" 
            value="#{dbConfig.initSize}" />
        <property name="maxActive" 
            value="#{dbConfig.maxSize}" />
    </bean>
​
    <!-- 配置MapperScannerConfigurer,自动扫描整个包,并且spring会自动创建UserMapper接口对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 配置接口文件所在的包 -->
        <property name="basePackage"
            value="cn.tedu.spring.mapper" />
    </bean>
    
    <!-- 配置SqlSessionFactoryBean -->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 配置数据源:如何连接数据库等 -->
        <property name="dataSource"
            ref="dataSource" />
        <!-- 配置XML文件的位置 -->
        <property name="mapperLocations"
            value="classpath:mappers/UserMapper.xml" />
    </bean>
    
<!--配置事务管理器,需要用到前面配置的数据源datasource-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

开启事务注解

  • 直接在spring配置文件中配置即可
代码语言:javascript
复制
    <!-- 开启事务注解 ,transaction-manager指定的是上面配置的事务管理器的id-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

在需要使用事务的方法上添加@Transactional注解(或者是Service类上)

  • 如果添加在类上,那么类中的全部方法都会被事务管理器管理
  • 如果添加在方法上,那么只有这个方法会被管理
  • 事务只发生在service
  • 在方法上添加注解
代码语言:javascript
复制
    @Transactional
    public void ChangePasssword(Integer id, String oldPassword,
            String newPassword) throws UserNotFoundException, PasswordNotMatchException{
        User user=this.findUserById(id);  //获取用户信息
        if (user==null) {   //如果用户信息不存在
                throw new UserNotFoundException("操作失败,用户信息不存在");
        }else { //用户存在,则判断原密码
            if (user.getPassword().equals(oldPassword)) {//如果密码匹配
                User user1=new User();
                user1.setPassword(newPassword);
                userMapper.update(user1);
            }else {   //原密码不匹配
                    throw new PasswordNotMatchException("操作失败,原密码不正确");
            }
        }
    }
  • service类上添加@Transactional注解,那么类中的整个方法都会被管理
代码语言:javascript
复制
@Service  
@Transactional   //配置事务管理
public class UserServiceImpl implements IUserService {
    
    @Resource
    private UserMapper userMapper;
}

开启组件扫描

  • spring-service.xml中开启组件扫描service即可
代码语言:javascript
复制
    <!-- 组件扫描 -->
    <context:component-scan base-package="cn.tedu.spring.service" />    

事务如何处理

  • 在spring处理事务时,如果遇到RuntimeException就会自动回滚

完整的spring配置文件

代码语言:javascript
复制
<!-- 加载db.properties -->
    <util:properties id="dbConfig"
        location="classpath:db.properties" />
    
    <!-- 数据源 -->
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url" 
            value="#{dbConfig.url}" />
        <property name="driverClassName" 
            value="#{dbConfig.driver}" />
        <property name="username" 
            value="#{dbConfig.user}" />
        <property name="password" 
            value="#{dbConfig.password}" />
        <property name="initialSize" 
            value="#{dbConfig.initSize}" />
        <property name="maxActive" 
            value="#{dbConfig.maxSize}" />
    </bean>
​
    <!-- 配置MapperScannerConfigurer,自动扫描整个包,并且spring会自动创建UserMapper接口对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 配置接口文件所在的包 -->
        <property name="basePackage"
            value="cn.tedu.spring.mapper" />
    </bean>
    
    <!-- 配置SqlSessionFactoryBean -->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 配置数据源:如何连接数据库等 -->
        <property name="dataSource"
            ref="dataSource" />
        <!-- 配置XML文件的位置,其中的值是一个数组 -->
        <property name="mapperLocations">
                <array>
                    <value>classpath:mappers/UserMapper.xml</value>
                    <value>classpath:mappers/DormitoryMapper.xml</value>
                </array>
            </property>
    </bean>
    
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 配置数据源 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 开启事务注解 ,transaction-manager指定的是上面配置的事务管理器的id-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis配置事务管理器
    • 配置事务管理器(DataSourceTransactionManager)
      • 开启事务注解
        • 在需要使用事务的方法上添加@Transactional注解(或者是Service类上)
          • 开启组件扫描
            • 事务如何处理
              • 完整的spring配置文件
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档