Mybaties 批量插入有两种方式
1.用Java代码循环遍历集合,调取数据库
Mapper
// 添加温度值
public void addTemperature(Temperature temperature );
具体写法如下:
List<Temperature> list=new ArrayList<Temperature>();
Temperature temperature= temperature=new Temperature();
for(int i=0;i<list.size();i++) {
temperatureDataStorageMapper.addTemperature(list.get(i));
}
这种方法sql语句无需做改动,正常插入语句即可。
2.用SQL语句循环遍历集合,分批次插入
Mapper
// 添加温度值
public void addTemperature(List<Temperature> list);
这种方法SQL语句需要做一些改变
Mapper.xml
<insert id="addTemperature" parameterType="java.util.List">
insert into
nl_temperature(equipment_num,acquisition_time,temperature,public_id) values
<foreach collection="list" separator="," index="index" item="i">
(
#{i.equipmentNum},
#{i.acquisitionTime},
#{i.temperature},
#{i.publicId}
)
</foreach>
</insert>
具体方法如下:
//循环入库
int n = 0;
int m = 0;
List<Temperature> list=new ArrayList<Temperature>();
Temperature temperature= temperature=new Temperature();
//重新new 一个集合,一次性往集合里放4000条,4000这个数可调整,容易长度太长。
List<Temperature> newList = new ArrayList<>();
while(n<list.size()){
for(int h=m;h<m+4000;h++){
if(h<list.size()) {
newList.add(list.get(h));
}
}
//调用批量插入
temperatureDataStorageMapper.addTemperature(newList);
newList.clear();
n+=4000;
m+=4000;
}