TDengine实现多表批量插入
有问题欢迎一起讨论
Mapper类
@Mapper
public interface WavePixelMapper {
int addSpo2MapBatch(@Param("spo2List") List<WavePixelDataDo> spo2List,
@Param("respList") List<WavePixelDataDo> respList,
@Param("co2pList") List<WavePixelDataDo> co2pList,
@Param("ecgList") List<WavePixelDataDo> ecgList);
}
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wisonic.monitor.infrastructure.mapper.WavePixelMapper">
<insert id="addSpo2MapBatch" parameterType="java.util.List">
insert into
k1506010900000001_spo2 (ts,pixel) values
<foreach separator=" " collection="spo2List" item="wavePixelDataDo" >
('${wavePixelDataDo.ts}','${wavePixelDataDo.pixel}')
</foreach>
k1506010900000001_resp (ts,pixel) values
<foreach separator=" " collection="respList" item="wavePixelDataDo" >
('${wavePixelDataDo.ts}','${wavePixelDataDo.pixel}')
</foreach>
k1506010900000001_co2(ts,pixel) values
<foreach separator=" " collection="co2pList" item="wavePixelDataDo" >
('${wavePixelDataDo.ts}','${wavePixelDataDo.pixel}')
</foreach>
k1506010900000001_ecg(ts,pixel) values
<foreach separator=" " collection="ecgList" item="wavePixelDataDo" >
('${wavePixelDataDo.ts}','${wavePixelDataDo.pixel}')
</foreach>
</insert>
</mapper>
编写测试接口
@Slf4j
@Controller
public class TestController {
@Autowired
private WavePixelMapper wavePixelMapper;
@ResponseBody
@RequestMapping("test2")
public String batchInsertPixelTest(){
List<WavePixelDataDo> wavePixelDataDos = new ArrayList<>();
long start = System.currentTimeMillis();
for (int i = 0; i < 65; i++) {
WavePixelData wavePixelData = new WavePixelData(30, 15);
wavePixelDataDos.add(new WavePixelDataDo(new Timestamp(System.currentTimeMillis()+i), JSONObject.toJSONString(wavePixelData)));
}
wavePixelMapper.addSpo2MapBatch(wavePixelDataDos,wavePixelDataDos,wavePixelDataDos,wavePixelDataDos);
byte[] bytes = wavePixelDataDos.get(0).getPixel().getBytes();
log.info(String.valueOf(bytes.length));
long end = System.currentTimeMillis();
log.info(end-start+"毫秒");
return end-start+"毫秒"+"-----"+String.valueOf(bytes.length);
}
}
测试结果:
