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 天前
创建SpringWeb项目(Spring2.0)
spring·mvc·mybatis
Cc_Debugger1 天前
【饿了么plus-table】开启多选时,点击下面的单选按钮,页面显示是全选的样子,bug
bug
计算机学姐1 天前
基于SpringBoot的高校竞赛管理系统
java·spring boot·后端·spring·信息可视化·tomcat·mybatis
龙卷风卷云1 天前
【BUG】Nginx使用upstream后端接口报 400
运维·nginx·bug
小糊涂灬1 天前
Mybatis+mysql 一对多查询问题
mysql·mybatis
一定要AK1 天前
MyBatis 从入门到精通
mybatis
96771 天前
mybatis的作用+sql怎么写
java·开发语言·mybatis
那个失眠的夜2 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
空太Jun2 天前
Spring Security 角色权限&资源权限配置 学习笔记
笔记·学习·spring·mybatis·security·springsecurity
身如柳絮随风扬3 天前
MyBatis 插件原理详解:从拦截器到动态代理,手写一个分页插件
java·mybatis