1. 程式人生 > >Mybatis Generator 獲取不到欄位註釋

Mybatis Generator 獲取不到欄位註釋

前言

環境限制,暫時只提供Oracle和Mysql的解決方法,其它資料庫如果遇到同樣問題,原理是一樣的,具體就看該資料庫應當去配置哪個屬性.

解決方法

下面的配置均指的是Mybatis Generator 的配置檔案(一般是叫generatorConfig.xml)的配置:

Oracle 資料庫

<jdbcConnection driverClass="${driver}"
    connectionURL="{url}" userId="${username}" password="${password}">
    <!-- 針對oracle資料庫 -->
    <property name="remarksReporting" value="true"></property>
</jdbcConnection>

MySql 資料庫

方法1

<jdbcConnection driverClass="${driver}"
    connectionURL="{url}" userId="${username}" password="${password}">
    <!-- 針對mysql資料庫 -->
    <property name="useInformationSchema" value="true"></property>
</jdbcConnection>

方法2

mysql的connectionURL中新增 useInformationSchema=true

.大體上就是:

connectionURL="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useInformationSchema=true"

兩種方法任選其一.

詳解

MBG訪問資料庫也是通過JDBC進行,而通過JDBC連線Oracle、Mysql(其它資料庫暫不清楚)時,想獲取到表及欄位註釋是需要額外設定一些連線屬性的.一般大體上都是如下的程式碼(以Oracle為例):

Properties props =newProperties();
props.put("remarksReporting","true");//Oracle
dbConn = DriverManager.getConnection(url, props);
DatabaseMetaData dbmd = dbConn.getMetaData();

這樣通過JDBC就能獲取到表或者欄位的註釋了.

那麼在MBG中怎麼設定呢?總不能去改原始碼吧.其實MBG自身已經提供瞭解決方法.

我們先來看下MBG連線資料庫的程式碼,可以在org.mybatis.generator.internal.JDBCConnectionFactory中找到:

//以下程式碼來自Mybatis Generator 1.3.5
/**
 * This constructor is called when there is a JDBCConnectionConfiguration
 * specified in the configuration.
 * 
 * @param config
 */
public JDBCConnectionFactory(JDBCConnectionConfiguration config) {
    super();
    userId = config.getUserId();
    password = config.getPassword();
    connectionURL = config.getConnectionURL();
    driverClass = config.getDriverClass();
    otherProperties = config.getProperties();//注意此行
}

public Connection getConnection()
        throws SQLException {
    Driver driver = getDriver();

    Properties props = new Properties();

    if (stringHasValue(userId)) {
        props.setProperty("user", userId); //$NON-NLS-1$
    }

    if (stringHasValue(password)) {
        props.setProperty("password", password); //$NON-NLS-1$
    }

    props.putAll(otherProperties);//注意此行

    Connection conn = driver.connect(connectionURL, props);

    if (conn == null) {
        throw new SQLException(getString("RuntimeError.7")); //$NON-NLS-1$
    }

    return conn;
}

通過上面程式碼(尤其是我加了注意此行註釋的兩行程式碼)我們可以看到,MBG在建立連線時,是把JDBCConnectionConfiguration中的所有properties給設定進去了.那麼顯然我們只需要找到在哪配置這些properties就行了.

JDBCConnectionConfiguration對應到XML配置裡就是jdbcConnection節點.

再來看看官方的使用文件,官方文件關於jdbcConnection (點選檢視) 一節中 <property>子元素的說明:

<property> (0..N) Note: any properties specified here will be added to the properties of the JDBC driver.

那麼在配置檔案中我們如下改動即可:

<jdbcConnection driverClass="${driver}"
    connectionURL="{url}" userId="${username}" password="${password}">
    <!-- 針對oracle資料庫 -->
    <property name="remarksReporting" value="true"></property>
</jdbcConnection>

其它相關