mybatis中不经意遇到的坑!!!

本文记录了一个在使用MyBatis时遇到的小坑:if标签内的判断条件拼接时,不能使用大写的AND关键字。文章详细描述了错误信息及修改前后的代码示例,提醒开发者注意MyBatis中OGNL表达式的语法细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天记录一点
if 标签里判断条件拼接时 不能用大写字母
今天遇到的小坑,在测试接口中时,报告异常

// 报错信息
org.apache.ibatis.builder.BuilderException: Error evaluating expression 'item.warehouseId != null AND item.materialsId != null'. Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression: item.warehouseId != null AND item.materialsId != null [org.apache.ibatis.ognl.ParseException: Encountered " <IDENT> "AND "" at line 1, column 26.
Was expecting one of:
    <EOF> 
    "," ...
    "=" ...
    "?" ...
    "||" ...
    "or" ...
    "&&" ...
    "and" ...
    "|" ...
    "bor" ...
    "^" ...
    "xor" ...
    "&" ...
    "band" ...
    "==" ...
    "eq" ...
    "!=" ...
    "neq" ...
    "<" ...
    "lt" ...
    ">" ...
    "gt" ...
    "<=" ...
    "lte" ...
    ">=" ...
    "gte" ...
    "in" ...
    "not" ...
    "<<" ...
    "shl" ...
    ">>" ...
    "shr" ...
    ">>>" ...
    "ushr" ...
    "+" ...
    "-" ...
    "*" ...
    "/" ...
    "%" ...
    "instanceof" ...
    "." ...
    "(" ...
    "[" ...
    <DYNAMIC_SUBSCRIPT> ...
    ]

发现原来是代码中if标签中连接条件时使用了大写的AND

//代码
<if test="item.warehouseId != null AND item.materialsId != null">
     WHEN warehouse_materials.warehouse_id = #{item.warehouseId}
     AND warehouse_materials.materials_id = #{item.materialsId}
     THEN 1
</if>

改成小写就好了,应该用上报错信息中提示的关键字就好了

//代码
<if test="item.warehouseId != null and item.materialsId != null">
     WHEN warehouse_materials.warehouse_id = #{item.warehouseId}
     AND warehouse_materials.materials_id = #{item.materialsId}
     THEN 1
</if>

特此记录一下小坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值