ssh ssm都有事务管理service层经过applicationContext.xml配置,全部service方法都加上事务操做;java
用来保证一致性,即service方法里的多个dao操做,要么同时成功,要么同时失败;web
springboot下的话,在service方法上加上@Transactional便可spring
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"; } }
package com.shyroke.service; import com.shyroke.entity.UserBean; public interface UserService { void save(UserBean user1); }
在下面的代码中,咱们对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(); } } }
package com.shyroke.dao; import org.springframework.data.jpa.repository.JpaRepository; import com.shyroke.entity.UserBean; public interface UserMapper extends JpaRepository<UserBean, Integer>{ }
数据库没有数据,说明已经被回滚了。springboot