Eclipse 使用mybatis generator插件自动生成代码

下载mybatis generator插件

下载地址:https://github.com/mybatis/generator/releases

1565185307368

下载完成后,解压,将features和plugins文件夹的内容复制到eclipse的相应文件夹中,重启eclipse即可。

Eclipse插件包指南

下载 Oracle JDBC

官方下载: https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

Maven仓库 ojdbc6:https://mvnrepository.com/artifact/oracle/ojdbc6

官方:Oracle JDBC 常见问题解答

各种支持的 Oracle 数据库版本、符合 JDBC 的版本与支持的 JDK 版本?

使用插件

创建一个 Maven 项目

1
2
<groupId>com.luckyoo</groupId>
<artifactId>mbg</artifactId>

普通的 Java Project 也可以,个人习惯。

添加resources文件夹

右键项目 new —> source folder,Folder Name:src/main/resources

生成 generatorConfig.xml

在项目任意目录下生成 generatorConfig.xml 文件都可以,例如 src/main/resources

右键项目 new —> other

1565187053867

就会生成 generatorConfig.xml 文件

1565187094574

编辑 generatorConfig.xml 文件

注意:targetProject=”mbg/src/main/java”,mbg是项目名称。

参考资料:MyBatis Generator 详解

精简配置

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
28
<?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="D:\ojdbc6-11.2.0.3.0.jar"/>
<context id="DBTables" defaultModelType="flat" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection
driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@192.168.3.206:1521:orcl"
userId="ydfwpt"
password="ydfwpt">
</jdbcConnection>
<javaModelGenerator targetPackage="com.luckyoo.mbg.entity" targetProject="mbg/src/main/java"/>

<sqlMapGenerator targetPackage="mapper" targetProject="mbg/src/main/resources"/>

<javaClientGenerator targetPackage="com.luckyoo.mbg.mapper" targetProject="mbg/src/main/java" type="XMLMAPPER"/>

<table schema="ydfwpt" tableName="LUCKYOO_HELLO" domainObjectName="HelloEntity" mapperName="HelloMapper"
selectByExampleQueryId="false" enableCountByExample="false"
enableSelectByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false">
</table>
</context>
</generatorConfiguration>

配置详解

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?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>
<!-- 引入配置文件 -->
<!-- <properties resource="application.yml"/> -->
<!-- 数据库的JDBC驱动 -->
<classPathEntry location="D:\ojdbc6-11.2.0.3.0.jar"/>
<!-- 一个数据库一个context。targetRuntime:MyBatis3/MyBatis3Simple -->
<context id="DBTables" defaultModelType="flat" targetRuntime="MyBatis3">
<!-- 注释 -->
<commentGenerator>
<!-- 是否取消注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- jdbc连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@192.168.3.206:1521:orcl"
userId="ydfwpt"
password="ydfwpt">
</jdbcConnection>
<!-- java类型处理器,用于处理DB中字段的类型到Java中Entity中的类型,默认使用JavaTypeResolverDefaultImpl -->
<javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
<!--
false:默认
scale>0;length>18:使用BigDecimal;
scale=0;length[10,18]:使用Long;
scale=0;length[5,9]:使用Integer;
scale=0;length<5:使用Short;
true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
-->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Java 模型生成器 -->
<javaModelGenerator targetPackage="com.luckyoo.mbg.entity" targetProject="mbg/src/main/java">
<!-- 默认false。如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性 -->
<property name="enableSubPackages" value="true"/>

<!-- 创建一个构造方法,包含所有的field -->
<!-- <property name="constructorBased" value="true"/> -->
<!-- 创建一个没有setter方法的类,但是会创建一个构造方法,包含所有的field,constructorBased="true" -->
<!-- <property name="immutable" value="true"/> -->

<!-- 设置是否在setter方法中,对String类型字段调用trim()方法,清理前后空格 -->
<property name="trimStrings" value="true"/>
<!-- 继承一个父类,如果此类中已拥有某个属性及其getter、setter方法,BG就不会重新生成改属性了 -->
<!-- <property name="rootClass" value="com.luckyoo.mbg.entity.BaseEntity"/> -->
</javaModelGenerator>

<!-- Mapper XML生成器 -->
<sqlMapGenerator targetPackage="mapper" targetProject="mbg/src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!-- Mapper 接口生成器
type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下)
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML
2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中
3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML
注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
-->
<javaClientGenerator targetPackage="com.luckyoo.mbg.mapper" targetProject="mbg/src/main/java" type="XMLMAPPER" >
<property name="enableSubPackages" value="true"/>
<!-- 继承一个父接口,但是MBG只负责生成,不负责检查 -->
<!-- <property name="rootInterface" value="父接口全路径名"/> -->
</javaClientGenerator>

<!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素
1、schema:用户名
2、tableName:对应的数据库表
3、alias:为数据表设置的别名。如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_columnName
4、domainObjectName:生成的domain类的名字。如果不设置,使用表名作为domain类的名字。可以设置为package.domainName,那么会自动把domainName类再放到package包里面;
5、mapperName:Mapper接口和XML的名字
6、enable...ByExample:是否生成example类,false就可以了
-->
<table schema="ydfwpt" tableName="LUCKYOO_HELLO" domainObjectName="HelloEntity" mapperName="HelloMapper"
alias="hello"
enableInsert="true"
selectByPrimaryKeyQueryId="true"
enableSelectByPrimaryKey="true"
enableUpdateByPrimaryKey="true"
enableDeleteByPrimaryKey="true"
selectByExampleQueryId="false"
enableCountByExample="false"
enableSelectByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
>
<!-- 默认false,是否只生成domain类。如果还配置了sqlMapGenerator,那么在Mapper XML文件中,只生成resultMap元素 -->
<property name="modelOnly" value="true"/>
<!-- 默认false,生成的domain类,使用实际列名,而不使用驼峰命名方法。比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
<property name="useActualColumnNames" value="false"/>

<!-- 参考 javaModelGenerator 的 constructorBased属性-->
<!-- <property name="constructorBased" value="false"/> -->
<!-- 参考 javaModelGenerator 的 immutable 属性 -->
<!-- <property name="immutable" value="false"/> -->
<!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; -->
<!-- <property name="ignoreQualifiersAtRuntime" value="false"/> -->

<!-- 参考 javaModelGenerator 的 rootClass 属性 -->
<!-- <property name="rootClass" value=""/> -->
<!-- 参考javaClientGenerator 的 rootInterface 属性 -->
<!-- <property name="rootInterface" value=""/> -->

<!-- 如果设置了runtimeCatalog,那么在生成的SQL中,使用该指定的catalog,而不是table元素上的catalog -->
<!-- <property name="runtimeCatalog" value=""/> -->
<!-- 如果设置了runtimeSchema,那么在生成的SQL中,使用该指定的schema,而不是table元素上的schema -->
<!-- <property name="runtimeSchema" value=""/> -->
<!-- 如果设置了runtimeTableName,那么在生成的SQL中,使用该指定的tablename,而不是table元素上的tablename -->
<!-- <property name="runtimeTableName" value=""/> -->
<!-- 注意,该属性只针对MyBatis3Simple有用。如果选择的runtime是MyBatis3Simple,那么会生成一个SelectAll方法,如果指定了selectAllOrderByClause,那么会在该SQL中添加指定的这个order条件 -->
<!-- <property name="selectAllOrderByClause" value="age desc,username asc"/> -->

<!-- generatedKey 用于生成生成主键的方法,如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素,该元素可选
column:主键的列名
sqlStatement:要生成的selectKey语句,有以下可选项:
Cloudscape:相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()
DB2 :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()
DB2_MF :相当于selectKey的SQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL()
HSQLDB :相当于selectKey的SQL为:CALL IDENTITY()
Informix :相当于selectKey的SQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1
MySql :相当于selectKey的SQL为:SELECT LAST_INSERT_ID()
SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY()
SYBASE :相当于selectKey的SQL为:SELECT @@IDENTITY
JDBC :相当于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty属性
-->
<!-- <generatedKey column="" sqlStatement=""/> -->

<!-- 重命名列名 -->
<!-- <columnRenamingRule searchString="" replaceString=""/> -->

<!-- 重新设置表中某个列在Entity和XML中对应的属性,包括Entity中的类型(javaType)和名称(property),Mapper XML中<result/>标签的jdbcType和typeHandler,等等...
column:要重新设置的列名
一个table元素中可以有多个columnOverride元素
-->
<!-- <columnOverride column="update_time" property="changeDate" javaType="String" jdbcType="VARCHAR" typeHandler="" isGeneratedAlways="" delimitedColumnName="">
使用property属性来指定列要生成的属性名称
<property name="property" value="userName"/>
javaType用于指定生成的domain的属性类型,使用类型的全限定名
<property name="javaType" value=""/>
jdbcType用于指定该列的JDBC类型
<property name="jdbcType" value=""/>
typeHandler 用于指定该列使用到的TypeHandler,如果要指定,配置类型处理器的全限定名
<property name="typeHandler" value="aaaa"/>
参考table元素的delimitAllColumns配置,默认为false
<property name="delimitedColumnName" value="false"/>
</columnOverride> -->

<!-- 忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现 -->
<!-- <ignoreColumn column="update_time" delimitedColumnName="false"/> -->
</table>

</context>
</generatorConfiguration>

生成代码

在generatorConfig.xml上右键—》Run As—》Run Mybatis Generator,生成后的项目结构

1565438724552

表结构

1565434054802

1565426222194

自定义…

自定义Entity字段注释

参考:https://segmentfault.com/a/1190000016525887

默认的字段注释,不同数据库配置可能不同