Spring整合Mybatis相关代码(依赖、JdbcConfig、MybatisConfig、SpringConfig)省略。
package com.zhang.dao;import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;public interface AccountDao {@Update("update tb_account set money = money + #{money} where name = #{name}")void inMoney(@Param("name") String name, @Param("money") Double money);@Update("update tb_account set money = money - #{money} where name = #{name}")void outMoney(@Param("name") String name, @Param("money") Double money);
}
========================================================================================================
package com.zhang.service;import org.springframework.transaction.annotation.Transactional;import java.io.IOException;public interface AccountService {/*** 转账操作* @param out 传出方* @param in 转入方* @param money 金额*/@Transactionalpublic void transfer(String out,String in ,Double money);
}=========================================================================================================
@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao accountDao;public void transfer(String out,String in ,Double money) {accountDao.outMoney(out,money);int i = 1/0;accountDao.inMoney(in,money);}
}
/*** spring配置类*/
@Configuration
@ComponentScan("com.zhang")
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
@EnableTransactionManagement//开启注解式事务驱动
public class SpringConfig {
}
说明:可以在JdbcConfig中配置事务管理器
@Bean//配置事务管理器,mybatis使用的是jdbc事务public PlatformTransactionManager platformTransactionManager(DataSource dataSource){DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource);return dataSourceTransactionManager;}
注意事项
public interface AccountService {//配置当前接口方法具有事务@Transactionalpublic void transfer(String out,String in ,Double money) ;
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class SpringTest {@Autowiredprivate AccountService accountService;@Testpublic void test() throws IOException {accountService.transfer("zhangsan", "李四", 50d);}
}
说明:对于RuntimeException类型异常或者Error错误,Spring事务能够进行回滚操作。但是对于编译器异常,Spring事务是不进行回滚的,所以需要使用rollbackFor来设置要回滚的异常
下一篇:C语言必背18个经典程序