【Java踩坑笔记】44_数据库字段用保留字,MyBatis生成的SQL直接报错
44 | 数据库字段用保留字MyBatis 生成的 SQL 直接报错摘要字段名叫order、status、select这些保留字不转义直接拼 SQL 会报错。MySQL 用反引号转义但很多人忘了写。一、问题现象-- 字段名叫 order保留字没转义CREATETABLEorders(idBIGINTPRIMARYKEY,orderVARCHAR(100)-- ❌ 保留字报语法错误);正确写法CREATETABLEorders(idBIGINTPRIMARYKEY,orderVARCHAR(100)-- ✅ 反引号转义);但 MyBatis 里如果直接写字段名生成的 SQL 没反引号依然报错。二、踩坑现场场景实体字段名和保留字一样// ❌ 实体字段名是 orderMyBatis 生成的 SQL 没反引号classOrder{privateStringorder;// 字段名 保留字}MyBatis 生成 SQLINSERTINTOorders(order)VALUES(...);-- ❌ 报错三、正确写法3.1 数据库层字段名避开保留字最推荐-- ✅ 不要叫 order叫 order_nameCREATETABLEorders(idBIGINTPRIMARYKEY,order_nameVARCHAR(100)-- ✅ 不是保留字);3.2 MyBatis 里转义字段名!-- ✅ 用反引号包裹字段名MySQL --insertidinsertINSERT INTO orders (order) VALUES (#{order})/insert3.3 用Column指定字段名JPA 注解// ✅ JPA 注解方式classOrder{Column(nameorder)// 反引号包裹privateStringorder;}3.4 全局配置 MyBatis 自动加反引号# ✅ MyBatis-Plus 配置3.4.0mybatis-plus:global-config:db-config:column-format:%s# 所有字段名自动加反引号四、常见保留字清单保留字说明替代名order排序关键字order_name、sort_orderselect查询关键字selected、choicestatus部分数据库保留state、order_statusdesc降序关键字description、desc_textgroup分组关键字group_name、team五、最佳实践✅ 数据库字段命名的 3 条铁律字段名避开所有保留字设计表时就注意如果必须用保留字用反引号MySQL或双引号PostgreSQL转义MyBatis-Plus 开启column-format自动加反引号 如何快速发现保留字字段-- MySQL查看保留字清单SELECT*FROMinformation_schema.KEYWORDSWHEREreserved1;六、小结字段名叫保留字order、select…SQL 直接报语法错误MySQL 用反引号转义order最推荐设计表时避开保留字不要给自己找麻烦MyBatis-Plus 用column-format全局自动加反引号第六辑完。—— 下一篇进入第七辑日常开发技巧篇首篇toString里打印对象小心无限递归栈溢出本篇第26篇已讲换一篇。注第26篇已讲过toString()递归问题第七辑首篇改为日志打印对象用toString生产环境可能引发雪崩。更多资料一线大厂Java面试题合集