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。建议检查数据库类型并统一时间函数的使用规范。

相关推荐
前端炒粉12 小时前
马克思主义基本原理在MyBatis框架中的指导作用探析
mybatis·马克思主义
.Hypocritical.13 小时前
MyBatis-Plus笔记
mybatis·mybatisplus
折哥的程序人生 · 物流技术专研20 小时前
Java面试通关⑩:MyBatis核心源码全集
mybatis·校招·java面试·orm框架·源码解析·数据库交互·社招
SeeYa-J2 天前
MyBatis(数据持久层,❗ “接口 = SQL执行器”)
mybatis
骑士雄师2 天前
java面试题:jvm ,mybatis
java·jvm·mybatis
风中芦苇啊2 天前
Java MyBatis 实战:如何通过 SQL 查询返回 List<Map> 数据格式
java·sql·mybatis
脑子运行超载2 天前
Jackson处理和mybatis的xml转换问题
xml·jackson·mybatis·javatype
杨运交3 天前
[042][数据模块]Mybatis Plus 数据库级租户:基于多数据源路由的动态隔离实现
数据库·oracle·mybatis
考虑考虑5 天前
Mybatis实现批量插入
java·后端·mybatis