一、簡介
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>{ }
- 結果:
數據庫沒有數據,說明已經被回滾了。