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

回到顶部