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

Mybatis配置事务管理器

作者头像
爱撒谎的男孩
发布2019-12-31 15:01:55
1.7K0
发布2019-12-31 15:01:55
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

文章目录

  1. 1. Mybatis配置事务管理器
    1. 1.1. 配置事务管理器(DataSourceTransactionManager)
    2. 1.2. 开启事务注解
    3. 1.3. 在需要使用事务的方法上添加@Transactional注解(或者是Service类上)
    4. 1.4. 开启组件扫描
    5. 1.5. 事务如何处理
    6. 1.6. 完整的spring配置文件

Mybatis配置事务管理器

  • 数据库中的事务可以保证在连续执行的多条写操作(增删改)时,这多条操作要么成功,要么全部失败,以保证数据和逻辑的完整及严谨
  • 在使用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"/>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis配置事务管理器
    • 配置事务管理器(DataSourceTransactionManager)
      • 开启事务注解
        • 在需要使用事务的方法上添加@Transactional注解(或者是Service类上)
          • 开启组件扫描
            • 事务如何处理
              • 完整的spring配置文件
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档