Java 代码里写 SQL 太痛苦了?JOOQ 类型安全查询——编译期就能发现 SQL 错误
引言 线上事故复盘: OrderMapper.xml 中有一行 SQL: SELECT * FROM order WHERE user_id = #{userId} 半夜上线后报错:You have an error in your SQL syntax 原因:`order` 是 MySQL 关键字,应该加反引号 `order` 这种错误你大概率遇到过。MyBatis 把 SQL 写在 XML 里,本质上还是字符串拼接——表名错了、字段名错了、参数类型错了,只有运行时才暴露。 有没有办法在写代码时就发现这些错误?有——用 jOOQ。 jOOQ(Java Object Oriented Querying)把数据库表映射成 Java 类,用 DSL(领域特定语言)写 SQL,编译期就能检查表名、字段名、类型。IDE 自动补全,重构跟着改,错字段直接红线。 本文对比 MyBatis 和 jOOQ,从代码生成到实战 CRUD、复杂联表、动态条件、事务,最后附 Spring Boot 集成配置和常见坑。 一、MyBatis 的痛点:SQL 是字符串 1.1 字符串拼接的代价 <!-- ....