Mybatis Generator 獲取不到欄位註釋
阿新 • • 發佈:2019-01-22
前言
環境限制,暫時只提供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>