1.4.2.3 批量修改

  支持单个动态更新、批量动态更新

<update id="updateCONSULT_SCHEDULEDynamic" parameterClass="map">
UPDATE CONSULT_SCHEDULE
<dynamic prepend="set">
<isNotEmpty prepend="," property="ORG_CODE">
ORG_CODE = #ORG_CODE#
</isNotEmpty>
<isNotEmpty prepend="," property="DEPENT_ID">
DEPENT_ID = #DEPENT_ID#
</isNotEmpty>
<isNotEmpty prepend="," property="DEPENT_NAME">
DEPENT_NAME = #DEPENT_NAME#
</isNotEmpty>
<isNotEmpty prepend="," property="DOCTOR_ID">
DOCTOR_ID = #DOCTOR_ID#
</isNotEmpty>
<isNotEmpty prepend="," property="DOCTOR_NAME">
DOCTOR_NAME = #DOCTOR_NAME#
</isNotEmpty>
<isNotEmpty prepend="," property="DOCTOR_PHONE">
DOCTOR_PHONE = #DOCTOR_PHONE#
</isNotEmpty>
<isNotEmpty prepend="," property="SCHEDULE_DATE">
SCHEDULE_DATE = TO_DATE(#SCHEDULE_DATE#,'YYYY-MM-DD')
</isNotEmpty>
<isNotEmpty prepend="," property="WEEK_TXT">
WEEK_TXT = #WEEK_TXT#
</isNotEmpty>
<isNotEmpty prepend="," property="WB_TYPE">
WB_TYPE = #WB_TYPE#
</isNotEmpty>
<isNotEmpty prepend="," property="CLOSE_TZ">
CLOSE_TZ = #CLOSE_TZ#
</isNotEmpty>
<isNotEmpty prepend="," property="REPLACE_TZ">
REPLACE_TZ = #REPLACE_TZ#
</isNotEmpty>
<isNotEmpty prepend="," property="DOCTOR_ID_TZ">
DOCTOR_ID_TZ = #DOCTOR_ID_TZ#
</isNotEmpty>
<isNotEmpty prepend="," property="DOCTOR_NAME_TZ">
DOCTOR_NAME_TZ = #DOCTOR_NAME_TZ#
</isNotEmpty>
<isNotNull prepend="," property="REMARK">
REMARK = #REMARK#
</isNotNull>
</dynamic>
WHERE CONSULT_SCHEDULE_ID IN ($CONSULT_SCHEDULE_ID$)
</update>

      注意:

        a.这种批量更新,只能统一更改某(几)个表字段的值(状态);

        b.批量操作时,iBATIS通过使用in()函数来实现,in()函数里面的内容只能通过"$变量$"来实现,不能通过"#变量#"实现;

        c.根据id进行修改,如果id是字符串,前台传参时,需手动拼接上字符串。

      举例:

        以id是字符串为例,讲解前台如何获取页面的值,并传至后台及iBATIS如何映射传递的值

        第一部分:js取值

          见文章:复选框-checkbox

        第二部分:Dao调取SQL

/**
* 动态修改排班表表记录
*
* @param paramMap 排班表表map对象集合
* @return 返回操作影响的行数
* @throws DaoException
*/
public int updateCONSULT_SCHEDULEDynamic(Map paramMap) throws DaoException {
try {
return sqlMapClient.update("telemedicine.service.bo.remoteCons.schedule.updateCONSULT_SCHEDULEDynamic", paramMap);
} catch (SQLException e) {
String err = "修改排班表表出错->出错原因:" + e.getMessage();
log.error(err, e);
throw new DaoException(err, e);
}
}

      第三部分:SQL,见上面

    说明:

      a.使用 in(#CONSULT_SCHEDULE_ID#),则解析出来的结果是:in('id1,id2');(错误)

      b.使用 in($CONSULT_SCHEDULE_ID$),解析出来的结果是:in('id1','id2');(正确)

错误用法

  情景描述

  virtual_card表中有两个唯一的字段:virtual_id和index_id,想根据其中一个字段进行更新;

  但是,传参可能是0个,1个或2个,考虑到能匹配不到的情况,所以使用了1=1

  动态sql

update virtual_card set
index_id=#index_id#
where 1=1
<isNotEmpty prepend="and" property="virtual_id">
virtual_id=#virtual_id#
</isNotEmpty>
<isNotEmpty prepend="and" property="index_id">
index_id=#index_id#
</isNotEmpty>

  当传递的参数匹配不到的时候,执行的结果是:

  说明:

  where 1=1条件相当于没用,与下面的sql起到的效果一致

update virtual_card set index_id=?

  将该表中该字段的值全部更新成了?,所以一定不能使用这个动态sql。

 

ibatis 批量更新(一)的更多相关文章

  1. ibatis 批量更新(二)

      1.情景展示 oracle数据库中,需要根据指定字段内容调用加密程序后,根据主键id进行更新其对应的字段mindex_id的值: 加密通过Java实现,然后通过Java对其进行更新: Java使用 ...

  2. mybatis批量更新update-设置多个字段值 报错 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

    mybatis批量更新update-设置多个字段值 2016年08月01日 12:49:26 姚一号 阅读数:29539 标签: mysql mybatis批量更新批量更新allowMultiQuer ...

  3. Mybatis批量更新报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

    批量更新数据,非常简单的一段代码,硬是报错,插入的数据也能显示出来 List<User> userlist = new ArrayList<User>(); userlist. ...

  4. oracle 批量更新表字段

      (一) 将数字替换成汉字 第一步,去重查询 使用distinct关键字先对该字段值进行去重查询,看共有几种情况 --查询指定区间内表停诊字段的值 SELECT DISTINCT T.CLOSE_T ...

  5. mybatis批量更新报错 org.mybatis.spring.MyBatisSystemException

    具体报错信息: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bin ...

  6. mybatis批量更新update-设置多个字段值allowMultiQueries=true

    mybatis由于简单易用性得到大家的认可和使用 但是在批量更新操作中,网上介绍的貌似不全,正好今天做个记录,大家一起进步 在实际项目开发过程中,常有这样的需求:根据ids更新表的某一个字段值,这时的 ...

  7. SQL批量更新 关系表更新

    很多人在做数据的批量更新时..如果更新的内容是从其他表查出来的..很容易这么写.. UPDATE TABLE1 SET COLUMN1=(SELECT SUM(SOMETHING) FROM TABL ...

  8. SQL 将2张不相关的表拼接成2列,批量更新至另一张表

    update SO_Master set LotteryNo=t2.LotteryNo,UpdateTime=GETDATE() --select sm.LotteryNo,sm.SysNo,t2.L ...

  9. [PDO绑定参数]使用PHP的PDO扩展进行批量更新操作

    最近有一个批量更新数据库表中某几个字段的需求,在做这个需求的时候,使用了PDO做参数绑定,其中遇到了一个坑. 方案选择 笔者已知的做批量更新有以下几种方案: 1.逐条更新 这种是最简单的方案,但无疑也 ...

随机推荐

  1. Redhat Enterprise Linux 7.4/CentOS 7.4 安装后初始化配置

    由于我是最小化安装,需要在安装后进行一些配置 1. 设定启动级别 [root@home ~]# systemctl set-default multi-user.target 2. 设定网络 [roo ...

  2. “System.InvalidOperationException”类型的未经处理的异常在 ESRI.ArcGIS.AxControls.dll 中发生

    问题描述: 新手们进行ArcGIS ArcObject开发时经常会遇到各种十分古怪的问题,比如下面的这个问题: “System.InvalidOperationException”类型的未经处理的异常 ...

  3. Excel向上取整

    CEILING函数语法:CEILING(number,significance)

  4. Strings of Power

    B. Strings of Power Volodya likes listening to heavy metal and (occasionally) reading. No wonder Vol ...

  5. IIS HTTP 错误 404.17 - Not Found 解决方法

    错误提示如下图: 出现这种情况的原因通常是因为先安装了Framework,后安装的IIS: 运行cmd,输入:   C:\Windows\Microsoft.NET\Framework\V4.0.30 ...

  6. utf-8-validation

    https://leetcode.com/problems/utf-8-validation/ public class Solution { public boolean validUtf8(int ...

  7. IOS Xib使用——Xib表示局部界面

    Xib文件是一个轻量级的用来描述局部界面的文件,在之前的文章讲解了为控制器添加Xib文件,本节主要讲解一下通过xib文件表示局部界面. <一> 创建Xib文件 Xib文件创建的时候是选择U ...

  8. Volley框架的介绍使用

    Volley是在2013年的Google I/O 2013大会上发布的,是我们的网络通信更快,更简单,更方便.对于初学者来讲是一个很好的框架. 简单来说,它提供了如下的便利功能: JSON,图像等的异 ...

  9. BZOJ 3732 Network Link-Cut-Tree (我是认真的!!

    题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 LCT的裸题! 首先维护一个动态的最小生成树,然后每次增加边时删除两点间路径上权值最大的边.最后询问时直接求x到y ...

  10. IPC$ 测试与防范

    物理机系统:Win7 虚拟机系统:Win2003 Netstat –an 查看本机端口 Netstat –ano 查看本机端口+PID 通过本机上操作(比如登录网站),然后命令,查看对方IP以及端口 ...