MyBatisGenerator生成Oracle数据库对应实体类时无法获取注释问题
最近在利用mybatis generator生成Oracle数据库对应的实体类时发现一个问题,特此记录下。
因为项目使用到了swagger2,所以想在生成实体类时通过表注释和字段注释生成对应的@ApiMode和@ApiModelProperty等注解。但是发现没有效果,经过查看源码发现OracleDatabaseMetaData类会判断remarksReporting属性的值是否为true,当为ture时才会获取注释。故只用在jdbcConnection配置中多加一条属性
<property name="remarksReporting" value="true"/>
即可。
源码如下:
package org.mybatis.generator.api;public class MyBatisGenerator {
public void generate(ProgressCallback callback, Set<String> contextIds,
Set<String> fullyQualifiedTableNames, boolean writeFiles) throws SQLException,
IOException, InterruptedException {
// 只关注关键代码,前面代码没有复制进来
for (Context context : contextsToRun) {
// 重要的是该方法
context.introspectTables(callback, warnings,
fullyQualifiedTableNames);
}
// 后面的方法逻辑忽略
}
}
package org.mybatis.generator.config;public class Context extends PropertyHolder {
public void introspectTables(ProgressCallback callback,
List<String> warnings, Set<String> fullyQualifiedTableNames)
throws SQLException, InterruptedException {
// 前面的方法逻辑忽略 重要的是databaseIntrospector.introspectTables方法
List<IntrospectedTable> tables = databaseIntrospector.
.introspectTables(tc);
if (tables != null) {
introspectedTables.addAll(tables);
}
}
}
package org.mybatis.generator.internal.db;public class DatabaseIntrospector {
public List<IntrospectedTable> introspectTables(TableConfiguration tc) {
// 前面的方法逻辑忽略 重要的是 calculateIntrospectedTables方法
List<IntrospectedTable> introspectedTables = calculateIntrospectedTables(
tc, columns);
}
private List<IntrospectedTable> calculateIntrospectedTables(
TableConfiguration tc,
Map<ActualTableName, List<IntrospectedColumn>> columns) {
// 前面的方法逻辑忽略 重要的是 enhanceIntrospectedTable方法
enhanceIntrospectedTable(introspectedTable);
}
private void enhanceIntrospectedTable(IntrospectedTable introspectedTable) {
// 前面的方法逻辑忽略 重要的是 databaseMetaData.getTables方法
ResultSet rs = databaseMetaData.getTables(fqt.getIntrospectedCatalog(), fqt.getIntrospectedSchema(),
}
}
package oracle.jdbc;public class OracleDatabaseMetaData implements AdditionalDatabaseMetaData {
// 此处没有找到oralce的源码
public synchronized ResultSet getTables(String var1, String var2, String var3, String[] var4) throws SQLException {
String var6 = " c.comments AS remarks
";
String var7 = " NULL AS remarks
";
// 可以看到此处会判断remarksReporting的值是否为true,为true才有查原注释,否则会把null值当成注释
if (this.connection.getRemarksReporting()) {
var22 = var22 + var6 + var8;
} else {
var22 = var22 + var7 + var9;
}
}
}
以上是 MyBatisGenerator生成Oracle数据库对应实体类时无法获取注释问题 的全部内容, 来源链接: utcz.com/z/511818.html