MyBatis批量保存数据
一 .思路
1.首先创建一个实体类(TestEntity),对应批量保存的一条数据
2.Controller获取前台传递的数据(是Map列表,即代码中的paramMapList)
3.Service对Map列表进行处理(set给实体类赋值),得到实体类列表
4.把实体类列表传给sql
总结一句话,就是把实体类列表传至mybatis,用sql语句保存。
二 .代码实现
1.实体类
public class TestEntity implements Serializable{private String column1;private String column2;private String column3;private String column4; /**set,get方法**/}
2.Service(因获取前台数据方法多样,此处省略Controller,参数是Controller传递来的Map列表)
Map列表转化为实体列表
public Object batchInsert (List<Map<String, Object>> paramMapList) throws Exception{List<TestEntity> paramObjList=new ArrayList();for(int i=0;i<paramList.size();i++) {TestEntity obj=new TestEntity();obj.setColumn1(paramMapList.get("column1").toString());obj.setColumn2(paramMapList.get("column1").toString());obj.setColumn3(paramMapList.get("column1").toString());obj.setColumn4(paramMapList.get("column1").toString()); paramObjList.add(obj);}return service.save("testBatchSaveMapper.batchSave", paramObjList);}
3.MyBatis的xml文件sql语句如下:
<!-- 批量保存sql --><select id="batchSave" parameterType="java.util.List" useCache="false">INSERT INTO test_table( column1,column2,column3,column4, ) VALUES <foreach collection="list" index="index" item="item" separator=",">( #{item.column1},#{item.column2},#{item.column3},#{item.column4}, )</foreach> </select>
注:
1)虽然是批量“插入”,但是用的标签是<select>!
2)VALUES后面利用<foreach>对传进来的List进行遍历:
①collection为“被循环或遍历的数组”,这个属性是必须且很容易出错的,一般批量保存都是“list”,除此之外还有可能是“array”,map的键名等情况
②index标志循环位置,简单地说就是这是第几次循环,注意它的值是从0开始的!
③item是当前循环的对象别名,里面出现的list中的值一定要用item.才可以,没有item则会报错,说字段不存在滴
④如果我想在插入时给插入的数据一个自增字段(当然,数据库中对该字段没有特殊要求),可以看下扩展~
三.扩展——批量插入加入固定格式的自增主键
<!-- 批量保存sql --><select id="batchSave" parameterType="java.util.List" useCache="false">INSERT INTO test_table( id, column1,column2,column3,column4, ) VALUES <foreach collection="list" index="index" item="item" separator=",">( (SELECT RIGHT(CONCAT('0000',(IFNULL(max(id),0)+1)),4) FROM test_table AS id),#{item.column1},#{item.column2},#{item.column3},#{item.column4}, )</foreach> </select>
较之前的代码,区别就是#{item.column1}前面加上一句
insert加了id,value多加了以下:
(SELECT RIGHT(CONCAT('0000',(IFNULL(max(id),0)+1)),4) FROM testTable AS id)
注意这里我们存到数据库的格式就是0001,0002,.....9999这样的。注意当前列在数据库中如果用int类型是0001会变成1,如果用varchar(4)类型但是仅靠max(id)而没有RIGHT(STR,4)这样的操作则超过10会出错,因为字符串比对从第一位开始,如果9和10比,第一位分别是9和1,则取出的值就是9了~
MyBatis批量保存数据相关推荐
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- Jquery Easy UI Datagrid 上下移动批量保存数据
DataGrid with 上下移动批量保存数据 通过前端变量保存修改数据集合,一次性提交后台执行 本想结合easyui 自带的$('#dg').datagrid('getChanges'); 方法来 ...
- Mybatis批量更新数据
Mybatis批量更新数据 第一种方式 [html] view plaincopy print? <update id="updateBatch" parameterType ...
- oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA
[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...
- mybatis批量更新数据三种方法效率对比
探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数 &allowMultiQuer ...
- mybatis批量更新数据三种方法
具体的可以参考下面链接: mybatis批量更新数据三种方法效率对比_PreciousLife的博客-CSDN博客_mybatis 批量更新 此处说明下,若是使用for循环遍历方式,来生成 ...
- list mybatis批量保存_mybatis 批量将list数据插入到数据库的实现
随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...
- list mybatis批量保存_如何实现mybatis批量将list数据插入到数据库
如何实现mybatis批量将list数据插入到数据库 发布时间:2020-07-06 14:27:59 来源:亿速云 阅读:66 作者:清晨 小编给大家分享一下如何实现mybatis批量将list数据 ...
- Mybatis批量插入数据的两种方式
总体描述 软件开发过程中需要批量插入数据的场景有几种: 从离线文件(excel, csv等)导入大批量数据到系统. 从其它系统定时或者人工同步大批量数据到系统. 程序自身的某些算法执行时会生成大批量数 ...
最新文章
- ajax对服务器路径请求
- 从源码理解Redux和Koa2的中间件机制
- LinkdedList
- 清除WIN7桌面背景历史记录
- php 百家姓,最新“百家姓”排名
- JVM内存设置参数分析
- linux禅道在线迁移,禅道从windows迁移到linux
- 2021年安全员-C证(陕西省)考试总结及安全员-C证(陕西省)模拟考试系统
- 建立自己的手写笔画图案
- Latex 数学符号--双括号
- 切切切词!新词发现算法TopWORDS的原理及实现|实在智能AI+RPA学院
- 【opencv初学者】2、视频的读取
- 毕设-基于Javaweb药品销售管理系统
- 计算机网可靠性,计算机网络可靠性分析
- 计算机网络笔试牛客网,招银笔试
- CI 9.7-叠罗汉
- AUTOSAR (JASPAR)FVM Introduction
- 2023年特斯拉新能源汽车核心部件解密
- HTTP代理IP的含义 HTTP代理IP如何使用?
- Codeforces 1479 D Odd Mineral Resource