MyBatis拼接批量SQL语句执行报错怎么解决
发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,这篇文章主要讲解了"MyBatis拼接批量SQL语句执行报错怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MyBatis拼接批量SQL语句执行
千家信息网最后更新 2024年11月15日MyBatis拼接批量SQL语句执行报错怎么解决
这篇文章主要讲解了"MyBatis拼接批量SQL语句执行报错怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MyBatis拼接批量SQL语句执行报错怎么解决"吧!
下载服务器基础业务数据进行本地批量插入操作,因项目中使用mybatis进行持久化操作,故直接考虑使用mybatis的批量插入功能。
1.以下是Mapper接口的部分代码
public interface PrintMapper{@InsertProvider(type = PrintMapperProvider.class,method = "insertAllLotWithVehicleCode4H2") void insertAllLotWithVehicleCode(ListlotWithVehicleCodes);}
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安全错误
数据库的锁怎样保障安全
国家网络安全应急预案执行情况
ASP从数据库读取图片滚动
使用文献检索数据库的应用心得
服务器是美人区的游戏
网络安全和开发哪个累
通过数据库检索某一个学位论文
4p服务器指什么意思
银川景区软件开发价格
nginx图片服务器上传
小班网络安全宣传口号
凌志软件开发中心
海淀区信息化软件开发怎么样
软件开发程序员去外企
零梦服务器
贵州服务器中心内部云空间
数据库表的创建与查询步骤
可可软件开发平台
软件开发可以用哪些编程语言
远控软件开发教程
sit软件开发
火币数据库服务
四川嵌入式软件开发公司
河南企业软件开发有用吗
四川惠普服务器维修虚拟主机
3牛网络技术
嘉定区正规数据库服务销售
流媒体服务器如何加入小区监控中
慧亚互联网科技有限公司员工点评
背光修图软件开发
软件开发属于哪个税目