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 ...
随机推荐
- LAMP 1.9域名301跳转
给两个域名分主次.输入次域名跳转到主域名然后进行访问. 首先打开虚拟机配置文件. vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 把这段配置添加 ...
- 【Java】Java程序员面试宝典(第三版)第5章----Java程序设计基本概念
1.static静态变量,在次级作用域也可以被修改. 2.k++ + k++.第一个自加实际上只有在与计算+k++时补增.详情P36的题目. 3.Java数据类型从低到高分为(byte short c ...
- 如何使用Hadoop的Partitioner
如何使用Hadoop的Partitioner 博客分类: Hadoop hadooppartition Hadoop里面的MapReduce编程模型,非常灵活,大部分环节我们都可以重写它的API,来灵 ...
- Java基础——java中String、StringBuffer、StringBuilder的区别
(转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...
- npm ERR! Unexpected token in JSON at position 0 while parsing near '<HTML> 解决办法
npm ERR! Unexpected token in JSON at position 0 while parsing near '<HTML> npm ERR! <!--/// ...
- rest framework 权限
一.权限示例 需求:不同的用户类型有不同的权限 普通用户:只能查看个人信息相关,序号:1 VIP 用户:只能查看个人信息相关,序号:2 SVIP 用户:查看订单相关信息,序号:3 1.新建 app/u ...
- .net core 中使用NLog
在.net standard 2.0.3 和.net core 2.1适用.其他版本的.net 应该也可以. 1.新建一个空白解决方案,再建一个类库 2.安装NLog.Config,会生成一个配置文件 ...
- Docker删除私有仓库镜像
V2 安装删除脚本 # curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/dele ...
- LeetCode 671. Second Minimum Node In a Binary Tree二叉树中第二小的节点 (C++)
题目: Given a non-empty special binary tree consisting of nodes with the non-negative value, where eac ...
- [HNOI2011]数学作业 矩阵快速幂 BZOJ 2326
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 NNN 和 MMM ,要求计算Concatenate(1..N) Concatenate (1 .. N) ...