一、简介
ssh ssm都有事务管理service层通过applicationContext.xml配置,所有service方法都加上事务操作;
用来保证一致性,即service方法里的多个dao操作,要么同时成功,要么同时失败;
springboot下的话,在service方法上加上@Transactional即可
二、案例
2.1 controller
package com.shyroke.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.shyroke.dao.UserMapper; import com.shyroke.entity.UserBean; import com.shyroke.service.UserService; @Controller @RequestMapping(value = "/") public class IndexController { @Autowired private UserService userService; @ResponseBody @RequestMapping(value="/save") public String list() { UserBean user1=new UserBean(); user1.setUserName("user1"); user1.setPassWord("123"); userService.save(user1); return "index"; } }
-
service
package com.shyroke.service; import com.shyroke.entity.UserBean; public interface UserService { void save(UserBean user1); }
-
service实现类
在下面的代码中,我们对save方法加上了@Transactional注解,表示使用事务,当有异常抛出时,就会自动回滚。
package com.shyroke.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.shyroke.dao.UserMapper; import com.shyroke.entity.UserBean; import com.shyroke.service.UserService; @Service public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; @Override @Transactional public void save(UserBean user1) { userMapper.save(user1); boolean flag = true; if (flag) { throw new RuntimeException(); } } }
-
mapper
package com.shyroke.dao; import org.springframework.data.jpa.repository.JpaRepository; import com.shyroke.entity.UserBean; public interface UserMapper extends JpaRepository<UserBean, Integer>{ }
- 结果:
数据库没有数据,说明已经被回滚了。