Mybatis批量更新转

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+"行数据");

}

运行结果截图:

 

希望能帮助到大家~。~

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

45组超炫数学动图,原来当年我如此牛!

全世界只有3.14 % 的人关注了爆炸吧知识想当年我们在数学的海洋里如饥似渴的遨游&#xff0c;什么公式、字母和图形&#xff0c;接招拆招、扫平了无数数学难题&#xff0c;八面威风&#xff0c;牛的不行不行的&#xff01;&#xff01;&#xff01;下面的45组数学动图&#xff…

这样的书值得你读

本文来自豆瓣网网友评论 1.我正在做一个情报分析系统&#xff0c;是一个决策交易系统的基础。里面的很多东西正是我需要的。我觉得很好 我自己想的话 浪费时间。 2.一位垂直搜索开发人员来信说到&#xff1a;我非常有幸买了你们出的《自己动手写搜索引擎》&#xff0c;谢谢你们…

.NET生态现状:超一半 .NET开发者使用C# 8、.NET Framework使用量减少

文 | 局长出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;JetBrains 上个月发布了 2021 年开发者生态的调查报告&#xff0c;这份报告详细介绍了开发领域的最新趋势&#xff0c;以及有关工具、技术、编程语言和编程世界的其他信息。本文会重点介绍这份报…

MFC中使用SDL播放音频没有声音的解决方法

2019独角兽企业重金招聘Python工程师标准>>> 本文所说的音频是指的纯音频&#xff0c;不包含视频的那种。 在控制台中使用SDL播放音频&#xff0c;一般情况下不会有问题。 但是在MFC中使用SDL播放音频的时候&#xff0c;会出现没有声音的情况。经过长时间探索&#…

为啥非要用Python?Excel不香吗?

近日&#xff0c;PYPL发布了2月编程语言指数榜&#xff01;在这场排行较量当中&#xff0c;Python牢牢占据榜首位置&#xff0c;并与排名第二的Java拉开高达10%的距离&#xff01;PYPL 是非常流行的参考指标&#xff0c;其榜单数据的排名均是根据榜单对象在 Google 上相关的搜索…

使用 C# 下载文件的十八般武艺

文件下载是一个软件开发中的常见需求。本文从最简单的下载方式开始步步递进&#xff0c;讲述了文件下载过程中的常见问题并给出了解决方案。并展示了如何使用多线程提升 HTTP 的下载速度以及调用 aria2 实现非 HTTP 协议的文件下载。简单下载在 .NET 程序中下载文件最简单的方式…

mysql 查询空字符串 设置默认值_MySQL默认值选型是空,还是 NULL-爱可生

如果对一个字段没有过多要求&#xff0c;是使用“”还是使用 NULL&#xff0c;一直是个让人困惑的问题。即使有前人留下的开发规范&#xff0c;但是能说清原因的也没有几个。NULL 是“”吗&#xff1f;在辨别 NULL 是不是空的这个问题上&#xff0c;感觉就像是在证明 1 1 是不…

.NET程序加壳的基本原理和方式浅析

.NET程序加壳的基本原理和方式浅析加壳程序是一种常用的保护应用程序的办法&#xff0c;确切的说是一种加密办法。取名为壳&#xff0c;意思是说这种对程序的保护办法就像植物种子的外壳&#xff0c;咱们运用一段程序将咱们的主程序包裹在其间&#xff0c;不能轻易被其他人看见…

如何开发一个学生成绩管理糸统(9)

这一节&#xff0c;我要说明的是在数据集中添加事务&#xff0c; 在这里说明一下事务的必要性&#xff1a; 大多数基于 web 的电子邮件客户端都使用一个网格列出每条消息&#xff0c;除了包含邮件的信息&#xff08;主题、发送者等等&#xff09;外&#xff0c;还包括一个复选框…

见识决定眼界,关注这些让你变得博学且有趣

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

ELK太重?试试KFC日志采集

写在前面ELK三剑客&#xff08;ElasticSearch&#xff0c;Logstash&#xff0c;Kibana&#xff09;基本上可以满足日志采集、信息处理、统计分析、可视化报表等一些日志分析的工作&#xff0c;但是对我们来说……太重了&#xff0c;并且技术栈不是一路的。我们的场景是需要采集…

linux引导时输入特殊信息的含义

linux引导时输入特殊信息的含义&#xff1a;通常只有在缺省模式失败&#xff08;屏幕一片混乱或者安装到某个阶段无法进行下去&#xff09;的情况下会尝试这些模式。 对于一些支持的其他模式&#xff0c;参考文件/usr/share/doc/anaconda*/command-line.txt&#xff08;如果安装…

ActionContext和ActionSupport的学习

2019独角兽企业重金招聘Python工程师标准>>> ActionContext和ActionSupport的学习 1.ActionContext中有众多的定义好的常量&#xff0c;就像是Constant类中定义的常量&#xff1b;诸如&#xff1a;session、Application、actionInvocation、Container等&#xff1b;…

中求和符号上下标_涨电脑知识:如何在word中编写复杂的公式,写论文必备技能...

我们在用word写资料时&#xff0c;比如论文、数据分析、报告等&#xff0c;经常需要插入一些公式&#xff0c;这些公式会含有一些特殊符号&#xff0c;比如根号、分式、求和等&#xff0c;这些特殊符号是不能直接用输入法来完成的&#xff0c;需要借助于word扩展的功能来帮助我…

菲尔兹奖第一华人!从抓虾仔到哈佛终身教授,他年少成名,获奖无数,造福我国数学教育数十年...

全世界只有3.14 % 的人关注了爆炸吧知识在数学界有这么一个人&#xff0c;他有着“数学天才”、“科学大师”、数学王国的“凯撒大帝”等一众称号。就连国际数学大师、阿贝尔奖获得者辛格都这样评价他说&#xff1a;“即使在哈佛&#xff0c;他一个人就是一个数学系&#xff01…

为什么我们总是忍不住要刷微信?

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

22、多进程和多线程

 Android进程简介 Android会启动一个LINUX进程和一个主线程。默认的情况下,所 有该程序的组件都将在该进程中运行。当启动应用程序时,Linux会为每 一个程序单独分配一个进程,该进程默认只拥有一个主线程。 组件可以运行在当前进程中,也可以运行在其他进程中。组件运行在 哪个…

Docker小白到实战之常用命令演示,通俗易懂

前言上一篇大概认识了Docker&#xff0c;主要是从概念、架构、优点及流程方面进行阐述&#xff0c;并进行安装和体验&#xff1b;接下来就开始进行实操学习&#xff0c;在演示过程中会针对关键的知识点进行归纳和总结&#xff0c;这里先从常用命令说起&#xff0c;来吧&#xf…

今天这个日子,大多数人都不知道…

全世界只有3.14 % 的人关注了爆炸吧知识我是蝙蝠&#xff0c;身体虽小五毒俱全你确定要尝吗&#xff1f;我是果子狸&#xff0c;人们一度“谈我色变”但如今又被端上餐桌&#xff01;我是野兔&#xff0c;人们说我很可爱我的肉却变成“野味”毛发变成皮草……今天&#xff0c;世…

Python办公自动化Day2-openpyxl

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;常规操作添加数据遍历所有单元格数据合并/取消合并单元格添加/删除行与列移动指定范围单元格 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 Python办公自动化自学笔记知识…