当前位置: 首页 > article >正文

mybatis 参数绑定错误示范(1)

采用xml形式的mybatis

错误示例:

server伪代码为:

            Map<String, Object> findMapNew = MapUtil.<String, Object>builder().put("applyUnit", appUnit).put("planYear", year  != null ? year : -1).put("code", code).build();List<YearPlan> planList= planDao.checkByMap(findMapNew);

xml

selectt.*from plan_year t<where>t.del_flag = 0 and t.status = #{status}<if test="applyUnit != null and applyUnit != '' ">and t.apply_unit = #{applyUnit}</if>            <if test="planYear != null ">and t.plan_Year = #{planYear}</if><if test="code != null and code != '' ">and t.code = #{code}</if>    </where>         

此时,映射的最终sql如下:

selectt.*from plan_year twheret.del_flag = 0 and t.status = '111111222222'  ## 单位idand t.apply_unit = 2025	## 年份and t.plan_Year = 'AABBCCDD'	## CODE

最终报错类型错误

解决方案:
修改xml:
xml

selectt.*from plan_year t<where>t.del_flag = 0 <if test="status != null ">and t.status = #{status}</if>           <if test="applyUnit != null and applyUnit != '' ">and t.apply_unit = #{applyUnit}</if>            <if test="planYear != null ">and t.plan_Year = #{planYear}</if><if test="code != null and code != '' ">and t.code = #{code}</if></where>           

最终执行正确的sql如下:

selectt.*from plan_year twheret.del_flag = 0 and t.apply_unit = '111111222222'  ## 单位idand t.plan_Year = 2025	## 年份and t.CODE = 'AABBCCDD'	## CODE

原因分析

由于第一次没有对status参数进行判空,导致mybatis在替换参数时用了顺序执行的原则,导致错误产生。
后面修修改了这个错误,进行所有参数进行了判空,正确替换了在server层定义的参数。最终sql按照预期执行。

http://www.lryc.cn/news/2399466.html

相关文章:

  • 每天掌握一个Linux命令 - rpm
  • 常见的MySQL索引类型
  • 01串(二进制串)与集合之间存在天然的对应关系 ← bitset
  • 153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划
  • [特殊字符] 革命性AI提示词优化平台正式开源!
  • 我的概要设计模板(以图书管理系统为例)
  • 【使用】【经验】docker 清理未使用的镜像的命令
  • DrissionPage爬虫包实战分享
  • iptables实战案例
  • 机器学习与深度学习07-随机森林01
  • 回归分析-非线性回归及岭回归.docx
  • Google AI 模式下的SEO革命:生成式搜索优化(GEO)与未来营销策略
  • docker创建postgreSql带多个init的sql
  • 掌握 MotionLayout:交互动画开发
  • SpringBoot中缓存@Cacheable出错
  • iOS UIActivityViewController 组头处理
  • 分布式电源接入配电网的自适应电流保护系统设计与实现
  • 鸿蒙版Taro 搭建开发环境
  • 论对生产力决定生产关系的批判:突破决定论的桎梏
  • ESOP交易系统搭建全景指南:从合规基石到价值跃迁
  • GICv3电源管理
  • 《TCP/IP 详解 卷1:协议》第3章:链路层
  • centos 9/ubuntu 一次性的定时关机
  • Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程(二)
  • Java自动类型转换的妙用
  • 数据库管理-第333期 Oracle 23ai:RAC打补丁完全不用停机(20250604)
  • 【DAY39】图像数据与显存
  • AI代码库问答引擎Folda-Scan
  • Kafka深度技术解析:架构、原理与最佳实践
  • 基于cnn的通用图像分类项目