解决使用MyBatis Generator 生成SQL时字段与关键字冲突

最近在使用MySQL数据库和MyBatis Generator生成XML时发现生成的SQL语句中列名与MySQL保留关键词冲突
具体代码如下:

1
2
3
4
5
6
7
8
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Sep 17 21:15:33 CST 2016.
-->
id, key, value, order, type
</sql>

其中 key,value,order,type 都是MySQL保留关键字

解决方案

修改generatorConfig.xml文件
添加配置属性autoDelimitKeywords、beginningDelimiter、endingDelimiter代码如下

1
2
3
4
5
6
<!--分割SQL关键字 默认为false-->
<property name="autoDelimitKeywords" value="true" />
<!--分割关键字的前符号-->
<property name="beginningDelimiter" value="`" />
<!--分割关键字的后符号-->
<property name="endingDelimiter" value="`" />

新的完整generatorConfig.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<generatorConfiguration>
<!--获取application中配置-->
<properties resource = "application.properties" />
<context id="LocationMySQL" targetRuntime="MyBatis3">
<property name="autoDelimitKeywords" value="true" />
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>
<javaModelGenerator targetPackage="com.zackwoo.domain" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
</sqlMapGenerator>
<javaClientGenerator targetPackage="com.zackwoo.mapper"
targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="database_config"></table>
<table tableName="sys_dictionary"></table>
</context>
</generatorConfiguration>