Spring 中jdbcTemplate 实现执行多条sql语句示例

 更新时间:2017年01月14日 14:58:47   作者:菜鸟宝宝  
本篇文章主要介绍了Spring 中jdbcTemplate 实现执行多条sql语句示例,可以对多个表执行多个sql语句,有兴趣的可以了解一下。

说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行:

很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里减去订单所需的钱数,即需要更新银行账户的表,同时需要更新淘宝订单的表将订单状态改为“已付款”,这就需要先后执行多个sql(仅仅用于表达执行多的SQL的举例说明,具体淘宝如何实现并不是很清楚~~~~~); 但如果这中间出现电脑断网断电等问题,仅将我们银行账户的钱扣掉了,订单状态并没有改,那我们是不是很惨,但实际上我们并没有遇到这种情况对吧,下面我就来讲一下如何使用Spring 中jdbcTemplate 实现执行多条sql语句,而不出现这种情况

@Test  
public void 权限分配(){
    //1.客户端复选框传递过来一个数组1,2 菜单的ID
    Integer[] menus =new Integer[]{1,2};
    //2.声明sql数组
    String [] sql =new String [menus.length+1];
    //3.通过Role_id 200 删除表中数据
    sql[0] = "delete from role_link_menu where fk_role_id=200";
    //4新数据添加到中间表
    for (int i=0;i<menus.length;i++) {
      sql[i+1]="insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+"',200,             "+menus[i]+")";
    }
    jdbcTemplate.batchUpdate(sql);
  }

前提我们已经连接好数据库

这样我们一共执行了3条SQL语句

1.delete from role_link_menu where fk_role_id=200

2.insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+"',200,1")";

3.insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+"',200,2")";

这期间任一条SQL语句出现问题都会回滚[**]会所有语句没有执行前的最初状态^_^

对比下面一组代码,我们就可以发现其中不同

@Test
  public void 权限分配单个处理() throws Exception{
    //1.通过Role_id 200 删除表中数据
    String sql = "delect from role_link_menu where fk_role_id=200";
    jdbcTemplate.update(sql);
    //2.客户端复选框传递过来一个数组1,2 菜单的id
    Integer[] menus =new Integer[]{1,2};
    //3.新数据添加到中间表
    for (int i=0;i<menus.length;i++) {
      String menu_sql="insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+           "',200,"+menus[i]+")";
      if(i==1){
        throw new Exception("=====");
      }
      jdbcTemplate.update(menu_sql);
    }
  }

这里当i=1会出现异常程序终止,共执行了2条语句

1.delect from role_link_menu where fk_role_id=200

2.insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+ "',200,1)";

下面一句不会执行,但之前这两条执行完毕,就相当于本来我们要买啤酒喝炸鸡,账户钱扣了,结果就只给了你一罐啤酒,是不是郁闷捏,啊哈,反正我不会开心

滴~~~ 

**注:

回滚:事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。

例如,在将资金从一个帐户转移到另一个帐户的银行应用中,一个帐户将一定的金额贷记到一个数据库表中,同时另一个帐户将相同的金额借记到另一个数据库表中。由于计算机可能会因停电、网络中断等而出现故障,因此有可能更新了一个表中的行,但没有更新另一个表中的行。

如果数据库支持事务,则可以将数据库操作组成一个事务,以防止因这些事件而使数据库出现不一致。如果事务中的某个点发生故障,则所有更新都可以回滚到事务开始之前的状态。如果没有发生故障,则通过以完成状态提交事务来完成更新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java中的字节,字符输出流与字节和字符输入流的简单理解

    Java中的字节,字符输出流与字节和字符输入流的简单理解

    这篇文章主要介绍了java 字节流和字符流的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • Java中父类强制转换子类问题解决

    Java中父类强制转换子类问题解决

    在Java编程中继承是基础,但父类转换为子类时需谨慎,正确的转换要求父类引用实际指向子类对象,错误转换可能引发ClassCastException,解决方案包括使用instanceof关键字检查、利用泛型避免转换、以及通过多态性避免直接转换,感兴趣的可以了解一下
    2024-11-11
  • Spring如何处理注解的深入理解

    Spring如何处理注解的深入理解

    这篇文章主要给大家介绍了关于Spring如何处理注解的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java中的注解具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Java 本地方法Native Method详细介绍

    Java 本地方法Native Method详细介绍

    这篇文章主要介绍了 Java 本地方法Native Method详细介绍的相关资料,需要的朋友可以参考下
    2017-02-02
  • 如何构建可重复读取inputStream的request

    如何构建可重复读取inputStream的request

    这篇文章主要介绍了如何构建可重复读取inputStream的request,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot JWT实现token登录刷新功能

    SpringBoot JWT实现token登录刷新功能

    JWT本身是无状态的,这点有别于传统的session,不在服务端存储凭证。这种特性使其在分布式场景,更便于扩展使用。接下来通过本文给大家分享SpringBoot JWT实现token登录刷新功能,感兴趣的朋友一起看看吧
    2021-09-09
  • SpringBoot 2.7.18 集成 Mybatis Plus + Druid的实例详解

    SpringBoot 2.7.18 集成 Mybatis Plus + Druid的实例详解

    Mybatis和MybatisPlus都是流行的持久层框架,MybatisPlus在Mybatis基础上增加了更多便捷的功能,如自动CRUD、分页插件等,文章还提到了Entity、Mapper、Service、Controller等组件的基本使用方法,为开发者提供了一套完整的集成方案
    2024-10-10
  • Springmvc异常映射2种实现方法

    Springmvc异常映射2种实现方法

    这篇文章主要介绍了Springmvc异常映射2种实现方法以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。,需要的朋友可以参考下
    2020-05-05
  • Java计算两个字符相似度的几种常用方法

    Java计算两个字符相似度的几种常用方法

    这篇文章主要给大家介绍了关于Java计算两个字符相似度的几种常用方法,这是一个很实用的功能,该方法需要传入两个字符串,经过计算会返回两个字符串的相似度,需要的朋友可以参考下
    2023-10-10
  • java数组基础详解

    java数组基础详解

    这篇文章主要介绍了Java数组基础详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论