当前位置:七道奇文章资讯编程技术Java编程
日期:2011-01-26 02:54:00  来源:本站整理

<b>Spring JDBC事件 传达特点</b>[Java编程]

赞助商链接



  本文“<b>Spring JDBC事件 传达特点</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Spring 和 JDBC 整合开辟:(2)

    通过JDBC模板类 处理 非常

    处理 事件的传达特点

    处理事件的断绝性

@Transactional(noRollbackFor=RuntimeException.class)
     public void save(User user) throws Exception{
         // TODO Auto-generated method stub
            this.template.update("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.update("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.update("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().update("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.update("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().update("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.update("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.SUPPORTS)
    public void save(User user){
       // TODO Auto-generated method stub
            this.getTemplate().update("insert into user values(22,'fasd')");
            System.out.println("插入成功....???????????????///");            
    }


  以上是“<b>Spring JDBC事件 传达特点</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .