我在MySQL中有一个表,其中一些列(MD5,FLAGCONFIRMED,FLAGCHANGEPASSWORD)定义为“char(1)”,其中唯一可能的值为0和1.我希望jOOQ在代码生成中将这些列转换为布尔值。
我创建了一个转换器:
public class BooleanConverter implements org.jooq.Converter<String, Boolean>{
private static final long serialVersionUID = -4785961538634851898L;
@Override
public Boolean from(String arg0) {
if (arg0 == null) {
return null;
}
return arg0.equals("1");
}
@Override
public Class<String> fromType() {
return String.class;
}
@Override
public String to(Boolean arg0) {
if (arg0 == null) {
return null;
}
return arg0.booleanValue() ? "1" : "0";
}
@Override
public Class<Boolean> toType() {
return Boolean.class;
}
}
然后我在我的pom中配置了转换器(我正在使用maven生成源代码)。
<customTypes>
<customType>
<name>java.lang.Boolean</name>
<converter>org.test.converter.BooleanConverter</converter>
</customType>
</customTypes>
<forcedTypes>
<forcedType>
<name>java.lang.Boolean</name>
<expressions>.*\.FLAGCHANGEPASSWORD,.*\.FLAGCONFIRMED,.*\.MD5.*</expressions>
</forcedType>
</forcedTypes>
代码已成功生成但类型未转换,其类型仍为String。
/**
* The table column <code>mmw.enduser.MD5</code>
*/
public final org.jooq.TableField<de.kybeidos.mmw.data.tables.records.EnduserRecord, java.lang.String> MD5 = createField("MD5", org.jooq.impl.SQLDataType.CHAR, this);
如何让它发挥作用?
编辑:我正在使用jOOQ 2.6.1
答案 0 :(得分:4)
这似乎是jOOQ-codegen中的一个错误。虽然文档明确指出可以提供几个正则表达式......
<forcedTypes>
<forcedType>
<!-- Specify again he fully-qualified class name of your custom type -->
<name>java.util.GregorianCalendar</name>
<!-- Add a list of comma-separated regular expressions matching columns -->
<expressions>.*\.DATE_OF_.*</expressions>
</forcedType>
</forcedTypes>
取自
http://www.jooq.org/doc/2.6/manual/code-generation/custom-data-types/
...源代码实际上将<expressions/>
内容解释为单个正则表达式。请尝试以下操作,而不是通过管道替换逗号:
<expressions>.*\.FLAGCHANGEPASSWORD|.*\.FLAGCONFIRMED|.*\.MD5.*</expressions>
实际上,逗号不应该用于分隔正则表达式,因为逗号可以具有{a, b}
中的正则表达式语义或用户输入语义。我在jOOQ 2.7,3.0
注意,您不必为布尔值编写自定义转换器。您可以将BOOLEAN
JDBC类型强制添加到列中,如下所示:
<forcedTypes>
<forcedType>
<name>BOOLEAN</name>
<expressions>.*\.FLAGCHANGEPASSWORD|.*\.FLAGCONFIRMED|.*\.MD5.*</expressions>
</forcedType>
</forcedTypes>