简单的说,就是不增加代码,来处理异常。
一个使用 MyBatis-Spring 的其中一个主要原因是它允许 MyBatis 参与到 Spring 的事务管理中。而不是给 MyBatis 创建一个新的专用事务管理器,MyBatis-Spring 借助了 Spring 中的 DataSourceTransactionManager 来实现事务管理。
一旦配置好了 Spring 的事务管理器,你就可以在 Spring 中按你平时的方式来配置事务。并且支持 @Transactional 注解和 AOP 风格的配置。在事务处理期间,一个单独的 SqlSession 对象将会被创建和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。
事务配置好了以后,MyBatis-Spring 将会透明地管理事务。这样在你的 DAO 类中就不需要额外的代码了。
Spring给了一个约定(AOP开发也给了我们一个约定),如果使用的是声明式事务,那么当你的业务方法不发生异常(或者发生异常,但该异常也被配置信息允许提交事务)时,Spring就会让事务管理器提交事务,而发生异常(并且该异常不被你的配置信息所允许提交事务)时,则让事务管理器回滚事务。
问题://接口类
package com.feng.Mapper;
import com.feng.user.User;
import java.util.List;
public interface UserMapper {
public List selectUser();
public int addUser(User user);
public int delete(int id);
}
//实现类
package com.feng.Mapper;
import com.feng.user.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
public List selectUser() {
User user = new User(7,"张三","200121313");
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
mapper.addUser(user);
mapper.delete(7);
return mapper.selectUser();
}
public int addUser(User user) {
return getSqlSession().getMapper(UserMapper.class).addUser(user);
}
public int delete(int id) {
return getSqlSession().getMapper(UserMapper.class).delete(id);
}
}
//实体类
package com.feng.user;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
public int id;
public String name;
public String pwd;
}
总的配置类
测试
//测试类
import com.feng.Mapper.UserMapper;
import com.feng.user.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserMapper mapper = context.getBean("userMapper", UserMapper.class);
List users = mapper.selectUser();
for (User user : users) {
System.out.println(user);
}
}
}
错误:可以看到上面我们的delete写错了,所以会报错
但是我们发现,张三这个法外狂徒还是进去了
咋办捏?我们终于想起来,开篇的事务处理。
这样就好了,把上面的配置写进去,重测
查出来了。



