我当前的 jooq-codegen-maven 配置将所有 tinyint(1) 字段映射到 java 的 boolean 值:
<forcedTypes>
<forcedType>
<name>BOOLEAN</name>
<types>(?i:TINYINT)</types>
</forcedType>
</forcedTypes>
问题是,在某些情况下,数据库包含标记为 tinyint(3) 的列,不应将其视为 boolean 值,而应将其视为一些实数。不幸的是我找不到任何例子,文档有一些东西但它对我来说并没有真正起作用:
<forcedType>
<name>BOOLEAN</name>
<types>TINYINT\(1\)</types>
</forcedType>
最佳答案
从 jOOQ 3.12 开始
我们实现了对读取数字 display width 的支持来自代码生成器中的 MySQL。您可以使用以下方式匹配它:
<forcedType>
<name>BOOLEAN</name>
<includeTypes>
(?i:(TINY|SMALL|MEDIUM|BIG)?INT(UNSIGNED)?\(1\))
</includeTypes>
</forcedType>
这篇博文中记录了这一点: https://blog.jooq.org/2019/09/27/how-to-map-mysqls-tinyint1-to-boolean-in-jooq/
这是通过以下方式实现的:https://github.com/jOOQ/jOOQ/issues/7719
直到 jOOQ 3.11
在 jOOQ 3.12 之前,jOOQ 代码生成器没有考虑 display width像 TINYINT
这样的类型对于 <types/>
正则表达式,仅仅因为它只读取 INFORMATION_SCHEMA.DATA_TYPE
(不包含此信息),而不是 INFORMATION_SCHEMA.COLUMN_TYPE
(确实如此)。
如果无法升级到 3.12,您可以:
- 在
<forcedType/>
中枚举所有 boolean 类型规范 - 写一个programmatic code generator configuration你在哪里查询
INFORMATION_SCHEMA.COLUMN_TYPE
生成需要强制键入的列集BOOLEAN
关于java - JOOQ:根据其长度将 tinyint 映射到 boolean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51694152/