前言
环境限制,暂时只提供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>
其它相关
- 关于如何生成自定义注释,参见 mybatis-generator自定义注释生成
原始实例
1 目录
2 generate.bat
java -jar mybatis-generator-core-1.3.7.jar -configfile generator_oracle.xml -overwrite
3 generator_oracle.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<!-- 在项目中会自动找到 -->
<classPathEntry location="ojdbc14-10.2.0.4.0.jar" />
<!--
<properties resource="D:\\workspace-demo\\mybatis-generator-core\\bin\\config_oracle.properties" />
-->
<context id="context1">
<!--oracle.jdbc.driver.OracleDriver or com.mysql.jdbc.Driver -->
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@192.168.5.11:1521:ORCL"
userId="USER" password="PASS">
</jdbcConnection>
<!-- model -->
<javaModelGenerator targetPackage="com.spinach.business.test.entity" targetProject=".">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- mapper -->
<sqlMapGenerator targetPackage="com.spinach.business.test.dao" targetProject=".">
<property name="enableSubPackages" value="true" />
<property name="methodNameCalculator" value="extended" />
</sqlMapGenerator>
<!-- dao -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.spinach.business.test.dao" targetProject=".">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- schema="dbname" 网络上说:schema是数据名,加了反而不能生成。 -->
<table tableName="t_blxx_tbl" enableCountByExample="false" enableUpdateByExample="false" enableUpdateByPrimaryKey="false"
enableDeleteByExample="false" enableDeleteByPrimaryKey="false" enableSelectByPrimaryKey="false" enableSelectByExample="false" selectByExampleQueryId="false"
enableInsert="true"
>
<property name="rootClass" value="com.spinach.support.spring.mybatis.entity.MybatisEntity" />
</table>
</context>
</generatorConfiguration>
来源:oschina
链接:https://my.oschina.net/u/3565362/blog/1648401