Java Spring事务使用及验证过程详解
事务,只要是为了保证数据的原子性。避免出现脏数据。
下面来讲解下spring是如何使用事务的。
1.配置事务。这里采用的是注解的模式
2.配置就基本搞定了,然后就是在service或者service的方法上使用@Transactional定义是否需要是否管理就行了。
@Transactional @Override publicStringuserInfoData(Stringid){ //TODOAuto-generatedmethodstub System.out.print("调用dao层方法"); UserInfoarr=loginDao.getUser(1); System.out.println("arrid="+arr.getId()); System.out.println("arrUsername="+arr.getUsername()); MoneyInfomoney=moneyDao.getmoney(1); moneyDao.InsertMony(500); loginDao.InsertUser(3,"Tigger"); System.out.println("money="+money.getMoney()); System.out.println("money+="+money.getMoney()); Loggerlog=Logger.getLogger(UserServiceImpl.class); log.info("执行了m01..."); //1.mybatis的自己调用方法 /*try{ mybatisTest(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }*/ //2.spring+mybatis整合后的调用 returnnull; }
以上就基本可以搞定了,验证配置是否成功的话,可以在不加注解的时候插入两条数据,后面一条数据是会报错的。
如果不使用事务的话,会发现第一条插入成功到DB里去了,然后在插入第二条的时候,程序报错。
如果这里使用@Transactional开启事务,那么会发现两条数据都插入不了,直接报错了,这里事务就成功的启用了起来。
@Transactional
(1)这里说明一下,有的把这个注解放在类名称上面了,这样你配置的这个@Transactional对这个类中的所有public方法都起作用.
(2)@Transactional方法方法名上,只对这个方法有作用,同样必须是public的方法
(3) 数据库引擎要支持事务,如果是MySQL,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。