@SpringBootApplication
@EnableTransactionManagement
public class MybatistestApplication {
public static void main(String[] args) {
SpringApplication.run(MybatistestApplication.class, args);
}
}
創建實體類(數據庫創建對應表)
public class User {
private Long id;
private String name;
public Long getId() { return id; }
public String getName() { return name; }
public void setId(Long id) { this.id = id; }
public void setName(String name) { this.name = name; }
}
添加 dao 層,使用註解方式
@Mapper
@Repository
public interface UserDao {
@Select("select * from user where id=#{id}")
public User getNameById(@Param("id") long id);
@Options(useGeneratedKeys = true, keyProperty = "iid")
@Insert("insert into user(name) values(#{name})")
public int insert(User user);
}
添加 service 層,並在該層進行事務管理
@Service
public class UserService {
@Autowired UserDao userDao;
// 只讀取數據,不修改數據,提高效率
@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)
public User getImageById(long id) {
return userDao.getNameById(id);
}
// 需要開啓事務,修改數據
@Transactional(propagation = Propagation.REQUIRED)
public int insert() {
User user = new User();
user.setName("insert");
return userDao.insert(user);
}
// 測試異常回滾,一有異常,所有操作都回滾
@Transactional(propagation = Propagation.REQUIRED)
public int rollback3() {
User user = new User();
user.setName("rollback3");
userDao.insert(user);
int i = 1 / 0; // 異常,回滾修改
user.setName("rollback33");
return userDao.insert(user);
}
}