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

Mybatis中使用表达式错误显示——记录错误

进行批量更新时,需要是布尔类型的字段,包含true/false0/1,这个会被Mybatis自动转为数据库(mysql)和java实体对象中的布尔类型

<!-- Boolean类型特殊处理 --> <when test="fieldName == 'isScrap'"> SET is_scrap = <choose> <when test="value == 'true' || value == '1'"> 1 </when> <otherwise> 0 </otherwise> </choose> </when>

堆栈跟踪:

MyBatis XML 中的 OGNL 表达式 value == '1',在 OGNL 里 单引号包裹单个字符 '1' 被解析为 char 类型,而非 String。当 value 是 "false" 时,OGNL 比较 String 与 char,会触发 compareWithConversion 尝试将两者都转为数值(double)比较,于是 Double.parseDouble("false") 抛出 NumberFormatException。

value = "false" (String) '1' = char 类型 OGNL: String == char ? → compareWithConversion() → 尝试将 "false" 转为 double → NumberFormatException (错误)
NumberFormatException: For input string: "false" at OgnlOps.doubleValue() ← OGNL 尝试把 "false" 转成数字 at OgnlOps.compareWithConversion() ← OGNL 类型转换比较 at OgnlOps.isEqual() ← == 比较 at ASTEq.getValueBody() ← value == '1' 这个节点 at ASTOr.getValueBody() ← or 运算符

【注意】

使用 单引号 情况下,当传递的是 true / false 是没有问题的,传递时会被认定为字符串,但是传递 0/1 会被认定为是 char类型,需要使用 双引号 进行包裹,但是在MyBatis的xml配置文件中,基本上会用 双引号 来包裹最外层的内容,那么在双引号里面就只能使用单引号了,这样又会出现错误,那么就需要使用转义符进行识别:&quot;

修改后的代码:

<!-- Boolean类型特殊处理 --> <when test="fieldName == 'isScrap'"> SET is_scrap = <choose> <when test="value == 'true' or value == &quot;1&quot;"> 1 </when> <otherwise> 0 </otherwise> </choose> </when>

这样无论 value 是 "true"、"false"、"1"、"0" 还是其他字符串,都是同类型(String vs String)的 equals 比较,不会再触发 NumberFormatException。

http://www.jsqmd.com/news/958770/

相关文章:

  • 2026年Q2巴中精装房改造公司排行及甄选指南:巴中精装房改造/巴中别墅装修/巴中办公室装修/巴中半包装修/巴中半山逸城装修/选择指南 - 优质品牌商家
  • 2026家居环保板材厂家评测:绵阳多层板、绵阳实木板材、绵阳实木颗粒板厂家、绵阳家具板材批发、绵阳家居板材、绵阳家居环保板材选择指南 - 优质品牌商家
  • 避坑指南:QGC地面站视频流配置失败?从拉流测试到环境变量设置的完整诊断流程
  • 数组访问、类型转换与循环翻译:龙书习题实战中的三个编译‘硬骨头’怎么啃?
  • 谁能拒绝一枚月光做成的耳机✨
  • 异辛基三乙氧基硅烷技术解析与合规供应选型指南:环氧灌浆料/硅烷浸渍剂/硅烷膏体/自密实混凝士/铝酸盐无机防腐砂浆/选择指南 - 优质品牌商家
  • PHP开放平台与OAuth认证服务
  • 语义压缩,才是提示词工程的底层心法
  • 5分钟上手BilibiliDown:免费B站视频下载器全攻略
  • 别再为官网下载发愁!CoppeliaSim/V-REP全版本安装包(Win/Mac/Linux)保姆级获取指南
  • 2026年近期济宁地区寻求高性价比食品输送带?这家制造商值得关注 - 2026年企业资讯
  • 实战应用:基于快马平台开发支持TokenP的多链资产看板管理工具
  • 标识牌设计公司推荐,哪家性价比高? - myqiye
  • 双面氧化应激:既是屏障,也是癌症转移推手
  • Hive SQL避坑指南:处理嵌套数据时,struct和named_struct到底该怎么选?
  • 3天掌握芋道源码企业级框架:从零搭建到实战开发的完整指南
  • 密码杂凑算法七大神剑之青干剑QGS设计原理详解
  • 手把手搭建 OpenClaw 智能助手,实现电脑自动化办公操作
  • 2026年GEO服务商选型必看!十大靠谱GEO源头工厂全维度评测推荐 + 科学避坑指南 - 玖叁鹿
  • 别再死记硬背Node2Vec公式了!用Python+PyTorch手搓一个随机游走节点嵌入(附完整代码)
  • PyAEDT:工程仿真智能化的革命性Python框架
  • 如何打造极致便携的Windows C/C++开发环境:w64devkit深度解析
  • HICO-Det数据集深度解析:从‘人骑自行车’到‘人喂斑马’,600种交互背后的标注逻辑与常见坑点
  • 2026年上海增量式直线位移传感器市场深度解析:如何选择优质供应商 - 2026年企业资讯
  • STM32CubeIDE实战:手把手教你配置CAN中断接收,告别轮询死等
  • Gemini会话留存率低于行业均值37%?5步动态权重调优法,72小时内拉升至81.4%(含Prometheus监控模板)
  • 单智能体(Single Agent)落地实践全指南:从 ReAct 到 Tool Use,构建真正可靠的 AI Agent
  • 免疫组织化学技术实验流程与操作规范详解
  • 海伯森3D线光谱共焦精密测量技术及产业化应用
  • 从手工到自动,不同行业的跨越难点有何异同?2026企业级AI Agent落地全指南