Linux认证:SpringJDBC事务传播特性Java认证考试

文章作者 100test 发表时间 2009:04:10 00:46:01
来源 100Test.Com百考试题网


  Spring 和 JDBC 整合开发:(2)
  通过JDBC模板类 处理 异常
  处理 事务的传播特性
  处理事务的隔离性
  @Transactional(noRollbackFor=RuntimeException.class)
  public void save(User user) throws Exception{
  // TODO Auto-generated method stub
  this.template.0update("insert into user values(?,?)",
  new Object[]{new Integer(user.getId()),user.getName()},
  new int[]{java.sql.Types.INTEGER,java.sql.Types.VARCHAR}).
  System.out.println("插入成功....").
  throw new RuntimeException().
  }
  我们制定了参数:noRollbackFor 所以 即使 遇到了运行期异常(nocheck异常)的时候 仍然不会回滚
  Spring默认的是 只是 运行期异常才会回滚但是 我们这里可以认为的指定哪些类 需要回滚事务
  @Transactional(rollbackFor=Exception.class)
  public void save(User user) throws Exception{
  // TODO Auto-generated method stub
  this.template.0update("insert into user values(?,?)",
  new Object[]{new Integer(user.getId()),user.getName()},
  new int[]{java.sql.Types.INTEGER,java.sql.Types.VARCHAR}).
  System.out.println("插入成功....").
  throw new Exception().
  }
  此时 我们指定Exception异常要回滚 所以 执行结果是事务回滚了
  下面是 事务传播特性的 第一个例子:Required nerver给出代码:
  @Transactional(propagation=Propagation.REQUIRED)
  public void save(User user) {
  // TODO Auto-generated method stub
  this.template.0update("insert into user values(?,?)",
  new Object[]{new Integer(user.getId()),user.getName()},
  new int[]{java.sql.Types.INTEGER,java.sql.Types.VARCHAR}).
  System.out.println("插入成功....").
  userdao_1.save(null).
  }
  代码二:
  @Transactional(propagation=Propagation.NEVER)
  public void save(User user){
  // TODO Auto-generated method stub
  this.getTemplate().0update("insert into user values(21,fasd)").
  System.out.println("插入成功....???????????????///").
  }
  代码一 需要事务 当执行到dao层是 检测到没有事务 所以 就 给分配了事务:但是 嵌套了一个方法,代码二中的方法不需要事务PROPAGATION.NEVER但是 它运行在了事务环境中 所以 抛出异常
  因为 代码二:运行在代码一的事务环境中,出现了异常(此异常是RuntimeExcpetion的一个子类) 所以 全部回滚 一条数据 都没有插入进;
  强制:代码一:
  @Transactional(propagation=Propagation.NEVER)
  public void save(User user) {
  // TODO Auto-generated method stub
  this.template.0update("insert into user values(?,?)",
  new Object[]{new Integer(user.getId()),user.getName()},
  new int[]{java.sql.Types.INTEGER,java.sql.Types.VARCHAR}).
  System.out.println("插入成功....").
  userdao_1.save(null).
  }
  代码二:
  @Transactional(propagation=Propagation.MANDATORY)
  public void save(User user){
  // TODO Auto-generated method stub
  this.getTemplate().0update("insert into user values(21,fasd)").
  System.out.println("插入成功....???????????????///").
  }
  运行结果抛出异常:但是 代码一不需要事务 运行完SQL 就对数据库 修改了,但是代码二需要事务 但是运行在没有事务的环境下所以跑出了异常
  支持:
  @Test
  public void save() throws Exception {
  BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml").
  UserDAO dao =(UserDAO) bf.getBean("userdao").
  User user = new User().
  user.setId(11).
  user.setName("刘强").
  dao.save(user).
  }
  代码一:
  @Transactional(propagation=Propagation.NEVER)
  public void save(User user) {
  // TODO Auto-generated method stub
  this.template.0update("insert into user values(?,?)",
  new Object[]{new Integer(user.getId()),user.getName()},
  new int[]{java.sql.Types.INTEGER,java.sql.Types.VARCHAR}).
  System.out.println("插入成功....").
  userdao_1.save(null).
  }

相关文章


JAVA资格认证:hibernate的性能优化Java认证考试
java认证辅导:Java新手进阶(细说引用类型)Java认证考试
在JDK5.0中使用灵活的线程锁定机制Java认证考试
基础入门:怎样建立最基本的Java开发环境?Java认证考试
Linux认证:SpringJDBC事务传播特性Java认证考试
JAVA认证:如何更合理的利用Java中的异常抛出Java认证考试
JAVA资格认证:JSP中Action属性的功能浅析Java认证考试
应用服务器:用Java实现简单web服务器Java认证考试
JAVA基础入门:tomcat里设置session过期时间Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛