Mybatis批量更新

批量操作就不进行赘述了。减少服务器与数据库之间的交互。网上有很多关于批量插入还有批量删除的帖子。但是批量更新却没有详细的解决方案。

实现目标

这里主要讲的是1张table中。根据不同的id值,来update不同的property。

数据表:1张。Tblsupertitleresult。错题结果统计。

表结构:

表中每一条数据必须通过两个字段来确定:userHhCode+titleId

需要批量更新的字段是:correctDate,result,checkState。

1批量更新的sql语句

我用的数据库是mysql。其他数据库的sql语句也都大同小异。

用mybatis的mapper-xml进行组装sql之前需要写出批量操作的sql语句。

Sql:

update tblsupertitleresult set result =case

when (userHhCode=2001 and titleId=1)then  90

when (userHhCode=2001 and titleId=2)then  70

end

,checkState = case

when (userHhCode=2001 and titleId=1)then  80

when (userHhCode=2001 andtitleId=2)then  120

end

where (userHhCode=2001 and titleId=1) or(userHhCode=2001 and titleId=2)

关于这个批量更新的sql语句做一个简单的解释。

要更新userHhCode=2001,titleId=1和userHhCode=2001 ,titleId=2的两条数据。

当userHhCode=2001,titleId=1时,将result设置为90,checkState设置为80

当userHhCode=2001,titleId=2时,将result设置为80,checkState设置为120.

这是mysql语句。运行没有问题。接下来就是mybatis的mapper-xml

Mybatis中mapper-xml

这里,首先介绍实体类。

public classWrongTitle {//manipulatetable of tblsupertitleresultprivate String titleId;private String titleIdNew;private String result;private String checkState;private String isCollect;private String times;private String wrongDate;private String wrongNum;private String collectDate;private String userHhCode;private String correctDate;private String tid;// teacher who will review this wrong titleprivate String paperTitleId;

getter和set方法省略。

好了现在开始介绍mybatis里面的几个标签。由于一些原因,mybatis的技术文档和用户指南所介绍得并不详细。

<foreach>标签:foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,

index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔符,

close表示以什么结束,

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list;

2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array;

3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key;

关于以上三种collection的用法。百度上有很多帖子。这里不进行赘述。

<trim>标签:有四个属性:

Prefix:       指的是<trim></trim>所包含的部分(body)以什么开头。

prefixOverrides:指<trim>中如果有内容时可忽略(body)前的匹配字符。

suffix:             指的是<trim></trim>所包含的部分(body)以什么结尾。

suffixOverrides:指<trim>中如果有内容时可忽略(body)后的匹配字符。

接下来直接上:

Mapper-xml

 <update id="batchUpdate">update tblsupertitleresult<trim prefix="set" suffixOverrides=","><trim prefix="checkState =case" suffix="end,"><foreach collection="list"item="i" index="index"><if test="i.checkState!=null">when (userHhCode=#{i.userHhCode} and titleId=#{i.titleId}) then #{i.checkState}</if></foreach></trim><trim prefix=" correctDate =case" suffix="end,"><foreach collection="list"item="i" index="index"><if test="i.correctDate!=null">when (userHhCode=#{i.userHhCode} and titleId=#{i.titleId}) then #{i.correctDate}</if></foreach></trim><trim prefix="result =case" suffix="end," ><foreach collection="list"item="i" index="index"><if test="i.result!=null">when (userHhCode=#{i.userHhCode} and titleId=#{i.titleId}) then #{i.result}</if></foreach></trim></trim>where<foreach collection="list" separator="or" item="i" index="index">(userHhCode =#{i.userHhCode} andtitleId=#{i.titleId})</foreach></update>

接下来就是dao:

public interface DatacenterDAO{

// batch update super title_result_view

public intbatchUpdate(List<WrongTitle> list );

Test类

public classTestBatch {

/**

@param args

*/

public static voidmain(String[] args) {

ApplicationContext  context = newClassPathXmlApplicationContext("applicationContext.xml");

DatacenterDAO dao = context.getBean(DatacenterDAO.class);

ArrayList<WrongTitle> list = newArrayList<WrongTitle>();

WrongTitle t1=new WrongTitle();

WrongTitle t2=new WrongTitle();

WrongTitle t3=new WrongTitle();

WrongTitle t4=new WrongTitle();

t1.setTitleId(3+"");

t2.setTitleId(4+"");

t3.setTitleId(5+"");

t4.setTitleId(6+"");

t1.setUserHhCode(2001+"");

t2.setUserHhCode(2001+"");

t3.setUserHhCode(2001+"");

t4.setUserHhCode(2001+"");

t1.setCheckState(5+"");

t2.setCheckState(6+"");

t3.setCheckState(7+"");

t4.setCheckState(8+"");

t1.setResult(10+"");

t2.setResult(12+"");

t3.setResult(14+"");

t4.setResult(16+"");

list.add(t1);

list.add(t2);

list.add(t3);

list.add(t4);

int i=dao.batchUpdate(list);

System.out.println("操作了"+i+"行数据");

}

运行结果截图:

希望能帮助到大家~。~

================

亲测可用,但是不知道效率到底如何。

Mybatis批量更新转相关推荐

  1. Mybatis批量更新数据

    Mybatis批量更新数据 第一种方式 [html] view plaincopy print? <update id="updateBatch" parameterType ...

  2. mybatis批量更新及其效率问题

    mybatis批量更新及其效率问题 一:背景 注意: 第一种: 第二种: 二:批量更新的方式总结: 第一种: 第二种: 三:总结: 最近,负责公司一些旧数据的批量整理和清洗工作,在网上寻找了两种myb ...

  3. mybatis批量更新 mysql 报错,Mybatis批量更新报错问题

    下面给大家介绍mybatis批量更新报错问题, allowMultiQueries=true 后来发现是jdbc链接没有加允许批量更新操作的参数引起的,不加会报badsql,mysql版的mybati ...

  4. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  5. java mybatis 批量更新数据_Mybatis批量更新详解

    转:http://www.cnblogs.com/winkey4986/p/3915151.html Mybatis批量更新 批量操作就不进行赘述了.减少服务器与数据库之间的交互.网上有很多关于批量插 ...

  6. Mybatis批量更新出错问题

    Mybatis批量更新出错问题 我们经常会遇到这样的需求,那就是利用Mybatis批量更新或者批量插入,但是,实际上即使Mybatis完美支持你的sql,你也得看看你说操作的数据库是否支持,而阿三,最 ...

  7. Mybatis批量更新报错

    Mybatis批量更新报错 1. 问题描述 2. 问题分析 3. 解决方案 1. 问题描述 使用批量更新,一直报语法错误,多次检查Mapper文件发现语法没啥问题,就是每次执行都是语法错误,花了好一会 ...

  8. mybatis批量更新数据三种方法

    具体的可以参考下面链接: ​​​​​​mybatis批量更新数据三种方法效率对比_PreciousLife的博客-CSDN博客_mybatis 批量更新 此处说明下,若是使用for循环遍历方式,来生成 ...

  9. mybatis批量更新

    最开始的时候,想着写一系列并列的更新语句就可以了 <update id="updateBatch" parameterType="java.util.List&qu ...

最新文章

  1. 解压缩工具 WinRAR 5.71 + x64 Final 中文汉化版
  2. 多节锂电串联保护板ic_BMS电池管理系统与锂电池保护板的区别
  3. LSMW批处理使用方法(07)_步骤6、7
  4. torch版ResNet50(带有多输出)转c++ tensorrt
  5. 【AI视野·今日NLP 自然语言处理论文速览 第二十期】Thu, 8 Jul 2021
  6. Android学习之简单地使用碎片
  7. 在单用户模式下启动SQL Server的不同方法
  8. 背景建模与前景检测之二(Background Generation And Foreground Detection Phase 2)
  9. LeetCode:Anagrams
  10. 电大课程考核计算机应用基础,计算机应用基础课程考核说明-保定广播电视大学.doc...
  11. 浅谈Java新手入门书籍选择
  12. html的锚标记,HTML验证锚标记
  13. 解决EZP_XPro无法烧录
  14. jenkins安装了中文插件发现界面还有英文的解决方法
  15. 01:高斯噪声和椒盐噪声
  16. c语言键盘驱动程序,c语言键盘扫描程序
  17. ch1_2 二分查找 C++
  18. Eigen介绍及简单使用
  19. 重装Win7系统步骤【系统天地】
  20. 易云维®智慧工业云平台让ChatGPT重新认识一下中国制造业信息化水平

热门文章

  1. 第1课:接口测试和jmeter总结
  2. 新浪微博授权认证过程
  3. 自定义ProgressBar(圆)
  4. Gradle实战:发布aar包到maven仓库
  5. LAMP部署脚本--安装篇
  6. oracle 时间转化函数及常见函数 .
  7. 服务器内存型号与频率,一张图看懂如何选择DDR4内存的频率和容量
  8. maven中pom.xml中的scope讲解
  9. 从服务器上的数据库备份到本地
  10. jQuery Pagination Ajax分页插件中文详解