Mybatis语法bug

select *

from appointment

where status = 'ACCEPTED'

and expire_time< now()

idea显示now()这里一直报错:

应为标记名称

应为=
Deepseek:

根据您的代码和报错信息分析,这是一个 MyBatis XML 文件中的 SQL 语法问题。具体原因及解决方案如下:

  1. XML 特殊字符问题
    < now() 中的小于号 < 是 XML 保留字符,必须转义为 &lt;,建议将条件改为:

    xml 复制代码
    expire_time &lt; now()
  2. 数据库函数兼容性建议

    若使用 MySQL 数据库,推荐改用 CURRENT_TIMESTAMP 替代 now()(功能相同但更符合 SQL 标准):

    xml 复制代码
    expire_time &lt; CURRENT_TIMESTAMP
  3. CDATA 区块方案

    对于含特殊字符的 SQL 片段,可用 CDATA 包裹避免转义:

    xml 复制代码
    <![CDATA[
    expire_time < CURRENT_TIMESTAMP
    ]]>
  4. 完整修正示例

    xml 复制代码
    <select id="getTimeoutAppointments" resultType="cn.edu.hactcm.vitallink.entity.user.Appointment">
        SELECT * 
        FROM appointment 
        WHERE status = 'ACCEPTED' 
        AND expire_time &lt; CURRENT_TIMESTAMP
    </select>

补充说明:若使用 Oracle 数据库需改用 SYSDATE,PostgreSQL 建议使用 CURRENT_TIMESTAMP。建议检查数据库类型并统一时间函数的使用规范。

相关推荐
代码什么用1 小时前
在WEB中的应用
mybatis
轩轶子2 小时前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
鬼手点金2 小时前
Claude Code示范案例-修复 Bug 工作流
java·服务器·前端·javascript·bug·openclaw
牧瀬クリスだ2 小时前
Mybatis-Plus:让CRUD快如闪电
java·spring boot·spring·tomcat·mybatis·yml
九皇叔叔15 小时前
【09】SpringBoot4 MyBatisPlus 增删改查(CRUD)
java·mybatis·mybatisplus
景熙552317 小时前
JDBC 详解:从原理到实战(含完整可运行 Demo)
java·spring·tomcat·mybatis·jdbc
程序猿乐锅17 小时前
一文讲透缓存穿透、击穿和雪崩
java·redis·spring·缓存·mybatis
程序猿乐锅20 小时前
【黑马点评 | 第九篇】秒杀优化-异步实现
java·spring boot·redis·后端·spring·中间件·mybatis
大漠孤烟s1 天前
7.mybatisplus学习-条件构造器、插件、通用枚举、多数据源环境、MybatisX
mybatis
ee又momo1 天前
MyBatis-Plus 用了就回不去,这些功能真香
mybatis