MyBatis拼接批量SQL语句执行报错怎么解决
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"MyBatis拼接批量SQL语句执行报错怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MyBatis拼接批量SQL语句执行
千家信息网最后更新 2026年11月01日MyBatis拼接批量SQL语句执行报错怎么解决
这篇文章主要讲解了"MyBatis拼接批量SQL语句执行报错怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MyBatis拼接批量SQL语句执行报错怎么解决"吧!
下载服务器基础业务数据进行本地批量插入操作,因项目中使用mybatis进行持久化操作,故直接考虑使用mybatis的批量插入功能。
1.以下是Mapper接口的部分代码
public interface PrintMapper{@InsertProvider(type = PrintMapperProvider.class,method = "insertAllLotWithVehicleCode4H2") void insertAllLotWithVehicleCode(List lotWithVehicleCodes);} 2.对应MapperProvider中函数片段
public String insertAllLotWithVehicleCode4H2(Map> map){List lotWithVehicleCodeBOs = map.get("list");StringBuilder sb = new StringBuilder("INSERT INTO MTC_LOT_WITH_VEHICLE_CODE (LOT_CODE,PRODUCT_VEHICLE_CODE) VALUES ");MessageFormat messageFormat = new MessageFormat("(" +"#'{'list[{0}].lotCode }," +"#'{'list[{0}].productVehicleCode }" +")"); int size = lotWithVehicleCodeBOs.size(); for (int i = 0; i < size; i++){sb.append(messageFormat.format(new Object[]{i})); if (i < size - 1) sb.append(",");} return sb.toString();}
3.service层
@Transactionalpublic void synchLotWithVehicleCodeToLocalDB(ListlotWithVehicleCodeBOs){ if(null != lotWithVehicleCodeBOs && lotWithVehicleCodeBOs.size()>0){printMapper.insertAllLotWithVehicleCode(lotWithVehicleCodeBOs);}}
程序上线的时候没有发生问题,在业务量猛增的时候,大约同时执行500条以上的时候程序就开始报错:
Caused by: org.apache.ibatis.builder.BuilderException: Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:89)at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:43)at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:25)at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:24)at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:57)... 61 more异常已指明SQL语句构建问题,DEBUG进去:
问题根源:
MessageFormat messageFormat = new MessageFormat("(" +"#'{'list[{0}].lotCode }," +"#'{'list[{0}].productVehicleCode }," +")");int size = lotWithVehicleCodeBOs.size();for (int i = 0; i < size; i++){ sb.append(messageFormat.format(new Object[]{i})); if (i当size达到3位数以上时构建出的message为:
(#{list[1,000].lotCode },#{list[1,000].productVehicleCode })解决办法:messageFormat.format(new Object[]{i+""}
感谢各位的阅读,以上就是"MyBatis拼接批量SQL语句执行报错怎么解决"的内容了,经过本文的学习后,相信大家对MyBatis拼接批量SQL语句执行报错怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
语句
问题
时候
学习
业务
内容
程序
业务量
代码
位数
函数
办法
功能
同时
基础
就是
思路
情况
接口
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
精品咖啡豆
什么是科技互联网
科技与互联网
世界互联网领先科技成果
远拓互联网科技
腾讯科技 互联网女皇
丰台科技园 互联网
镁科技互联网资讯平台
广州优美互联网科技
阿里巴巴算科技企业还是互联网
互联网软件和科技
成都互联网科技公司工作好不好
民营互联网公司国防科技
阿里互联网科技企业
工业互联网等科技实现智能化赋能
雨阳互联网卡科技有限公司
互联网科技股为什么大涨
云南互联网科技学费
互联网科技职业技能培训学校
亚光科技低轨卫星互联网
苏州找大状互联网科技有限公司
远拓互联网科技
深圳天众互联网科技公司
中盈科技互联网信息有限公司
高科技互联网发展前景如何
互联网科技公司营业执照怎么办理
互联网科技圈年度人物
互联网高科技行业有哪些企业
陕西彩京云互联网科技有限公司
互联网领先科技成果宣传视频