你学废了Mybatis实现动态批量修改吗?

大家节日快乐!听音乐会的时候,我想起一首歌:人只有学会爱,才能学会以死为家。
业务需求如下:1、将documentId和List对象传递给前台。
2.根据List中的documentId和UpdateDocumentAnswer.id对修改document_answer表中的数据。
简单来说,就是根据不同的条件,使用update语句来改变多条数据。
最初的想法是将请求拆分为多个更新语句,并使用for循环来执行它们。
这种想法虽然可行,但效果不佳,不推荐。
搜索答案:通过搜索引擎找到SQL语句,使用CASEWHEN结构一次性修改多条数据。
实现方法:调整映射层接口参数,实现SQL语句,利用CASEWHEN结构根据条件修改多条数据。
显示结果:SQL日志显示更新操作成功,更新的记录数等于传递的List集合数,每条记录对应一个一一对应的ID。
结论:周日写的,很惭愧自己还没有学会这个技能。
期待与大家共同进步。
我是博主宁在春。
欢迎在知乎、简书、CSDN、掘金、博客园讨论问题,共同发展。

ios怎样搭建php服务器

将名为“config.sample.inc.php”的文件粘贴到当前目录并将其重命名为“config.inc.php”。
(7)使用文本编辑器打开“config.inc.php”,将

$cfg['Servers'][$i]['host']='localhost';

修改为:

$cfg['Servers'][$i]['host']='127.0.0.1';

保存后进入浏览器浏览

http://localhost/phpmyadmin/

 进入phpAdmin登录界面,输入用户名root和密码(如(4)中设置新密码)。
导入后就可以使用phpAdmin正常操作MySQL了。

作者:三创iOS和PHP开发链接:https://www.jianshu.com/p/c3f53ed7e184来源:版权归简书所有。
如有商业用途转载,请联系作者获得许可。
非商业转载请注明出处。

sqlexist和in的区别及查询效率比较

分析SQL查询中exists和exists的区别

select*fromAwhereidin(selectidfromB);select*fromAwhereexists(select1fromBwhereA.id=B.id);

本例以上两个为查询数据库需要内存中的遍历和比较,因此B表比数据量大时效率更高。

1.IN()语句

IN()查找B表中的所有id字段并存储它们。
然后,检查A表中的id与B表中的id是否相同。
如果它们是相同的,添加到结果集中,直到表A中的所有记录都交叉为止。
其查询过程类似于以下过程:

ListresultSet={};

ArrayA=(select*fromA);

ArrayB=(selectidfromB);for(inti=0;i

{

for(intj=0;j

If(A[i].id==B[j].id){resultSet.add(A[i]);break;}}}returnresultSet;

查看B表就可以看出。
当数据较大时,不宜使用in(),因此会将B表中的所有数据都遍历一次。

示例1:表A有10000条记录,表B可以走一遍多达1,000,000条记录。
10,000*1,000,000次效率非常差。

例2:A表有10000条记录,B表有100条记录,最多可以遍历10000*100次。

结论:IN()适用于表A小于A的情况

2EXISTS()语句

exists()返回A。
将执行length次;它不缓存exists()结果集;因为exists()结果集的内容很重要,所以结果集也很重要。
如果里面的查询语句为空或者非空。
如果不为空,则返回false回来了。
其查询过程类似于以下过程:

ListresultSet={};

ArrayA=(select*fromA);

for(inti=0;i

{if(exists(A[i].id){//执行select1fromBwhereB.id=A.id

resultSet.add(A[i]);}}returnresultSet;

用在B表上比较好,因为不包含多遍,所以只需要查询一次:A表10000条记录,B表有1000000条记录,()10000判断B表是否匹配ID会运行很多次。
)仍然运行10,000次,因为表B中的数据更多。
越适合其效果。
表A有10,000条记录,表B有10,000条记录。
()之后仍然执行10000次,最好传递10000*100。
in()是在内存中传递和比较的,所以我们需要查询数据库,我们都知道查询数据库消耗的性能更高,内存也更快。

当BATB中的数据比表中的数据大时

3中数据较大时的使用分析

几乎和数据大时一样高效A表很大

在插入一条记录之前,记录功能只有在没有这样的事情的情况下才能做到这一点。
使用EXISTS条件语句插入重复记录

insertintoA(name,age)selectname。
,agefromB

wherenotexists(select1fromAwhereA.id=B.id);

存在一个关于使用EXISTS和IN的效率问题。
通常比以往任何时候都更有效率;由于IN不使用索引,但这取决于实际情况。
>

IN适用于外表面大而内表小的情况。

EXISTS是外表面小而内表大的情况

4。
关于EXISTS:

EXISTS不返回任何数据,但返回true或false来检查EXISTS是否至少返回一行数据。

EXISTS指定一个查询来确定类是否存在。

语法:EXISTSsubquery

参数:子查询是受限制的SELECT语句(不允许使用COMPUTE子句和INTO关键字)。

结果类型:Boolean如果子查询包含行,则返回TRUE;否则返回TRUE。
否则,返回FLASE。

结论:

select*fromAwhereexists(select1fromBwhereA.id=B.id)

EXISTS(包括NOTEXISTS)子句的返回值是一个布尔值。
EXISTS内部有一个嵌套语句(SELECT...FROM...),我将其称为EXIST的内部查询。
其中的查询语句将返回一个结果集,EXISTS子句根据其中的查询语句的结果集是空还是非空返回一个布尔值。

理解这一点的一种流行方法是:如果内查询的结果不为空,则将外查询表的每一行作为测试进行测试。
替换为EXISTS子句。
TRUE且该行可以用作外部查询的结果行;否则,不能将其用作结果。

当解析器检测到第一个单词是SELECT关键字时;它会跳转到FROM关键字,通过FROM关键字搜索表名。
并将该表放入内存中。
下一步是如果未找到WHERE关键字。
这将返回到SELECT来查找范围分析。
分析领域。
最后,创建虚拟表。

WHERE关键字后面是条件语句。
计算出条件表达式后,将有一个非零或0的返回值。
非零表示true,0表示false。
相似地,WHERE返回值后的条件决定是否执行下一次SELECT。
包含真或假。

解析器首先寻找关键字SELECT;然后跳转到FROM关键字将student表加载到内存中,通过指针找到第一条记录,然后查找WHERE关键字计算其条件表达式。
如果有的话该记录被加载到虚拟表中,并且指针指向下一条记录。
如果说错了,指针