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批量插入插入数据、批量条件查询的更多相关文章

  1. oracle 在xml中批量插入,批量修改及多组条件查询

    最近公司用ibatis开发项目,本来可以用存储过程处理批量插入,批量修改及多组条件查询:但由于使用模块相对较小,暂时就在xml中配置,以前没有在xml做过类似处理,有必要记录一下:好了,代码如下: & ...

  2. sql大数据多条件查询索引优化

    此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出 ...

  3. JQueryEasyUI-DataGrid显示数据,条件查询,排序及分页

    <html><head>    <title></title>    <script src="/jquery-easyui-1.3.4 ...

  4. Mybatis plus中一个框多条件查询 SQL拼接

    遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<& ...

  5. mysql数据库表插入单条数据/批量插入数据

    1.创建表格 reate table trade( id int(4) not null primary key auto_increment, product varchar(30) null, p ...

  6. MyBatis(十一):Mybatis 动态SQL语句完成多条件查询

    之前文章中对in的用法做过讲解:<MyBatis(四):mybatis中使用in查询时的注意事项> 实际上对于多个参数的用法也是这是注意的: 多参&if判空&List集合判 ...

  7. sql根据一个表查询的数据作为条件查询另一个表

    代码格式如下: ) 要注意的是:in后面的查询语句必须是查询一个字段跟前面的表相对应的.比如要根据订单号orderID,OpenBills 这个表就需要查询到orderID这个字段,BillConsu ...

  8. MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序

    一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...

  9. MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序

    一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...

  10. 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】

    多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...

随机推荐

  1. 关于Windows文件读写_暗涌_新浪博客

    关于Windows文件读写_暗涌_新浪博客     这几天在研究怎么才能加快windows文件读写速度,搜了很多文章,MSDN也看了不少.稍微给大家分享一下.     限制windows文件读写速度的 ...

  2. 快速实现CentOS7安装python-pip

    1.首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# pip -V -bash: pip: command not foun ...

  3. adroid 分辨率适配

    (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854) (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x ...

  4. Http协议以及模拟http请求发送数据

    1 为什么要使用http协议 假设我现在有两个客户端浏览器,一个是google,一个是IE浏览器:我现在有两个服务器,一个是tomcat,一个是JBoss;在最初的情况下是:如果google要往tom ...

  5. BLAST在Windows系统中本地化

    简介 NCBI除了提供在线的Web BLAST序列比对服务外,还提供FTP方式下载序列比对工具.这允许在本地平台上针对从NCBI下载或本地创建的数据库执行BLAST搜索.这些实用程序没有图形用户界面, ...

  6. Windows上python + selenium + Firefox浏览器的环境配置

    1.python安装 我的电脑是32位的,安装了Python 3.5.4版本其它安装版本 2.python环境变量配置 将”C:\Program Files\Python35",”C:\Pr ...

  7. Coding 如何使用 Coding 开发 Coding

    Coding Anytime Anywhere Coding 团队有 70 多人,分布在全国各地(深圳,北京,上海,成都),我们使用 Coding 作为云端办公室,以云端协作的方式管理事务,文件等,我 ...

  8. Session和cookie有什么区别?

    cookie是保存在客户端的信息,它只能保存String类型的,没有session安全,如果客户端禁用了cookie就不能够使用了 Cookie是客户端技术,程序把每个用户的数据以cookie的形式写 ...

  9. 5.SSRF服务器端请求伪造

    SSRF(服务端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞. 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正是因为它是由服务端发起的,所以它能够请求到与它相连而与 ...

  10. 【linux安装软件步骤】

    一.解析linux应用软件安装包: 通常Linux应用软件的安装包有三种: tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. rpm包,如sof ...