mybatis批量插入插入数据、批量条件查询
ps:参考文章连接:https://www.cnblogs.com/admol/articles/4248159.html
关于个人的使用经验:先把数据放到bean中,多个的话就全放入list集合,如下代码:
/*
* 把图片信息写入taichi本地数据库
* 参数样例:
* {
"paramList": [{
"serviceOrderName": "服务单号",
"serviceOrderId": "服务单id",
"supplierId": "供应商id",
"classifyId": 5,
"imageUrlList": [
"url1",
"url2",
"url3"
]
},
{
"serviceOrderName": "服务单号2",
"serviceOrderId": "服务单id2",
"supplierId": "供应商id2",
"classifyId": 5,
"imageUrlList": [
"2url1",
"2url2",
"2url3"
]
}
]
}
*/
@RequestMapping(value = "/image/writeImageInfo", method = RequestMethod.POST)
public ResponseWrapper<Object> writeImageInfo( @RequestBody WriteImageDTO WriteImageDTO){
ResponseWrapper<Object> returnResult = new ResponseWrapper<Object>();
List<ImageInfoForWriteDataBase> paramList = WriteImageDTO.getParamList();
if(paramList == null || paramList.size() < 1){
log.info("图片信息入库参数为空");
returnResult.setSuccess(false);
returnResult.setMsg("图片信息入库参数为空");
return returnResult;
}
try{
List<ImageInfoDTO> tempParamList = new LinkedList<ImageInfoDTO>();
for (ImageInfoForWriteDataBase imageInfoForWriteDataBase : paramList) {
List<String> imageUrlList = imageInfoForWriteDataBase.getImageUrlList();
for (String stringObj : imageUrlList) {
ImageInfoDTO obj = new ImageInfoDTO();
obj.setServiceOrderName(imageInfoForWriteDataBase.getServiceOrderName());
obj.setServiceOrderId(imageInfoForWriteDataBase.getServiceOrderId());
obj.setSupplierId(imageInfoForWriteDataBase.getSupplierId());
obj.setClassifyId(imageInfoForWriteDataBase.getClassifyId());
obj.setClassifyName(ImageClassifyEnum.getNameStatic(imageInfoForWriteDataBase.getClassifyId()));
obj.setImageUrl(stringObj);
tempParamList.add(obj);
}
}
Integer result = partsService.writeImageInfo(tempParamList);//数据入库
if(result > 0){
returnResult.setSuccess(true);
return returnResult;
}else{
returnResult.setSuccess(false);
returnResult.setMsg("图片信息入库失败");
return returnResult;
}
}catch(Exception e){
log.info("图片信息入库异常,==>e.getMessage:"+e.getMessage()+",==>e.getStackTrace():"+e.getStackTrace()+",==>e:"+e);
returnResult.setSuccess(false);
returnResult.setMsg("图片信息入库异常");
}
return returnResult;
}
public Integer writeImageInfo(List<ImageInfoDTO> tempParamList){
return operateTaichiDao.writeImageInfo(tempParamList);
}
Integer writeImageInfo(List<ImageInfoDTO> tempParamList);
<insert id ="writeImageInfo" parameterType="java.util.List">
insert into imageinfo
(serviceOrderName, serviceOrderId, supplierId, classifyId,classifyName,imageUrl)
values
<foreach collection ="list" item="node" index= "index" separator =",">
(
#{node.serviceOrderName},
#{node.serviceOrderId},
#{node.supplierId},
#{node.classifyId},
#{node.classifyName},
#{node.imageUrl}
)
</foreach>
</insert >
注意:上面sql中collection = 一定要写成list,刚开始我写的是参数的名字tempParamList,会报错说站不到参数集合tempParamList,刚开始我还以为是上面文章中的作者写错了。尴尬。
另外,关于传入list数据作为查询条件的sql代码也一并放在这:
dao层代码:
List<OperateTaskCard> getServiceOrderAlreadyList(@Param("statusNumberList") List<String> statusNumberList,
@Param("newSrvWorkerId") String newSrvWorkerId);
mapper.xml中的对应的部分sql:
and new_srv_workorder.new_dealstatus in
<foreach collection="statusNumberList" index="index" item="statusNum" open="(" separator="," close=")">
#{statusNum}
</foreach>
这里可以看到:collection属性是和参数名字是一样的。
=================================2019年4月12 补充
今天又遇到这个问题了,就是xml中的sql 的collection到底是list还是和mapper中的变量名保持一致呢?今天发现是自己使用错了注解。
dao接口的mapper中
List<EntManagementinfo> selectDeatailInfoByIdList(@Param("paramIdList") List<Integer> paramIdList);
引入@Param的注解,错引入成 import org.springframework.data.repository.query.Param;
然后xml的sql中collection = paramIdList ,程序运行sql报错。把collection 改为 collection = list,即可。
或者
引入@Param的注解,使用 import org.apache.ibatis.annotations.Param;(其实应该用这个注解),
然后xml的sql中collection = paramIdList ,程序不会报错。
所以,如果有多个list的参数情况下,看collection肯定要自定义,不能全写为list的。所以,使用注解 import org.apache.ibatis.annotations.Param; 才是正解!!!
============20190419 今天发现一篇博客,讲的是同一个问题:连接: https://blog.csdn.net/qq_28379809/article/details/83342196
mybatis批量插入插入数据、批量条件查询的更多相关文章
- oracle 在xml中批量插入,批量修改及多组条件查询
最近公司用ibatis开发项目,本来可以用存储过程处理批量插入,批量修改及多组条件查询:但由于使用模块相对较小,暂时就在xml中配置,以前没有在xml做过类似处理,有必要记录一下:好了,代码如下: & ...
- sql大数据多条件查询索引优化
此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出 ...
- JQueryEasyUI-DataGrid显示数据,条件查询,排序及分页
<html><head> <title></title> <script src="/jquery-easyui-1.3.4 ...
- Mybatis plus中一个框多条件查询 SQL拼接
遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<& ...
- mysql数据库表插入单条数据/批量插入数据
1.创建表格 reate table trade( id int(4) not null primary key auto_increment, product varchar(30) null, p ...
- MyBatis(十一):Mybatis 动态SQL语句完成多条件查询
之前文章中对in的用法做过讲解:<MyBatis(四):mybatis中使用in查询时的注意事项> 实际上对于多个参数的用法也是这是注意的: 多参&if判空&List集合判 ...
- sql根据一个表查询的数据作为条件查询另一个表
代码格式如下: ) 要注意的是:in后面的查询语句必须是查询一个字段跟前面的表相对应的.比如要根据订单号orderID,OpenBills 这个表就需要查询到orderID这个字段,BillConsu ...
- MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序
一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...
- MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序
一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...
- 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】
多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...
随机推荐
- K.I.S.S 原则
KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序:编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口.这就是UNIX哲学.所有的哲学真 正的浓缩为一个 ...
- springboot 使用war包部署
ps://www.cnblogs.com/jiaoyiping/p/4251718.html
- 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
在尝试内核开发之前,需要对内核有个整体的了解. 主要内容: 获取内核源码 内核源码的结构 编译内核的方法 内核开发的特点 1. 获取内核源码 内核是开源的,所有获取源码特别方便,参照以下的网址,可以通 ...
- 理解linux服务器mcelog如何工作
What are Machine Check Exceptions (or MCE)? A machine check exception is an error dedected by your s ...
- 【linux安装软件步骤】
一.解析linux应用软件安装包: 通常Linux应用软件的安装包有三种: tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. rpm包,如sof ...
- Intel MPI 配置与基本使用
安装 Document 系统配置/含NFS 编译环境 设置 加载 mpivars.[c]sh 脚本. 创建文本文件 mpd.hosts ,其中保存有集群的节点列表,每行一个名字 (只针对开发者) 确保 ...
- ES 6.1.2集群安装
1.下载java,并设置环境变量 sudo tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/local/ sudo vim /etc/profile 在最后添 ...
- java知识点积累(一)
知识点积累 1.关于final的重要知识点: final关键字可以用于成员变量.本地变量.方法以及类: final修饰的成员变量必须在声明时被初始化,或者在构造器中初始化,否则就会报编译错误: 不能够 ...
- Gradle安装配置
1.构建工具的简单介绍在代码世界中有三大构建工具,ant.Maven和Gradle. 现在的状况是maven和gradle并存,gradle使用的越来越广泛. Maven使用基于XML的配置,Grad ...
- centos6.6上安装beef
https://rvm.io/https://rvm.io/rvm/securityhttps://www.runoob.com/ruby/ruby-installation-unix.htmlhtt ...