之前一直在xml项目配置事务,迁移到springboot,使用事务,清爽了好多。废话不多说,直接贴代码。
第一步:在service层,类或者方法上加上@Transactional
@Transactional(propagation = Propagation.REQUIRED,readOnly=true) //属性可以为空
public void updateUser(User user){
userMapper.updateUser(user);
// int a = 3/0;
}
第二步:启动类上添加@EnableTransactionManagement,开启申明式注解
@SpringBootApplication
@MapperScan("com.pian.dao")
@EnableTransactionManagement
//@EnableScheduling
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
SpringApplication.run(App.class,args);
}
}
第三步:贴上mapper.xml,此处有个注意的地方,如果参数为空,则必须添写jdbcType=XXX类型,否则mybatis无法转换。
<update id="updateUser" parameterType="com.pian.dto.User">
update tb_user set
userid = #{userid},
user_name = #{userName},
pwd = #{pwd,jdbcType=VARCHAR},
age = #{age,jdbcType=INTEGER},
sex = #{sex},
birthday = #{birthday,jdbcType=DATE}
where userid = #{userid}
</update>
第四步:贴上测试代码,模拟测试只要打开3/0,模拟抛出异常,查看是否更新到数据库就ok了。
@Test
public void testUpdateUser(){
User user = new User();
user.setUserid(2);
user.setUserName("老虎");
user.setSex("女");
userService.updateUser(user);
}
完美!!!