在导入xls文件和获取json数据批量插入或者更新数据时看到以前的代码竟然是for循环一次插入一条。。。
几千条数据竟然要跑半个小时,其实只要改动一下这么多数据几秒钟就能跑完。
弄个例子方便以后参考
Mapper类
/**
* 获取企业列表信息
*
* @param gplist 企业列表信息
* @return 结果
*/
public int insertGpLists(@Param("gplist")List<GpList> gplist);
service类
/**
* 获取企业列表信息
*
* @param gpList 企业列表信息
* @return 结果
*/
public int insertGpLists(List<GpList> gplist);
service.impl类
/**
* 企业列表信息
*
* @param gpList 企业列表信息
* @return 结果
*/
@Override
public int insertGpLists(List<GpList> gplist)
{
return gpListMapper.insertGpLists(gplist);
}
mapper类
<insert id="insertGpLists" parameterType="java.util.List">
insert into gp_list (jys,mc,dm,qycontent)
VALUES
<foreach collection="gplist" item="gp" index="index" separator=",">
(#{gp.jys},#{gp.mc},#{gp.dm},#{gp.qycontent})
</foreach>
</insert>
Controller类
@GetMapping("/getgpList")
@ResponseBody
public AjaxResult getgpList()
{
String gplistStr = getIG507("base/gplist");
JSONArray json = JSONArray.parseArray(gplistStr);
List<GpList> list = new ArrayList<GpList>();
for(int i = 0;i <json.size();i++){
GpList gp = new GpList();
JSONObject jobj = json.getJSONObject(i);
gp.setDm(jobj.getString("dm").toString());
gp.setMc(jobj.getString("mc").toString());
gp.setJys(jobj.getString("jys").toString());
gp.setQycontent("");
list.add(gp);
}
int i = gpListService.insertGpLists(list);
return toAjax(i);
}
将获取的json循环添加到list内然后执行一次sql就可以了