Home MyBatis Generator配置详解
Post
Cancel

MyBatis Generator配置详解

一、添加MyBatis和数据库驱动依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

二、引入MyBatis Generator插件

1
2
3
4
5
6
7
8
9
10
11
12
<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>${mybatis-generator-core-version}</version>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>1.3.7</version>
        </dependency>
    </dependencies>
</plugin>

三、配置MyBatis Generator插件

3.1 配置MyBatis Generator config文件路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <!--mybatis的代码生成器的配置文件-->
                <configurationFile>
                    src/main/resources/mybatis-generator-config.xml
                </configurationFile>
            </configuration>
        </plugin>
    <plugins>    
</build>

注意,这个路径是配置文件相对于该pom文件的路径

3.2 允许覆盖生成的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <!--mybatis的代码生成器的配置文件-->
                <configurationFile>
                    src/main/resources/mybatis-generator-config.xml
                </configurationFile>
                <!--允许覆盖生成的文件-->
                <overwrite>true</overwrite>
            </configuration>
        </plugin>
    <plugins>    
</build>

3.3 添加数据库驱动依赖

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
<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <!--mybatis的代码生成器的配置文件-->
                <configurationFile>
                    src/main/resources/mybatis-generator-config.xml
                </configurationFile>
                <!--允许覆盖生成的文件-->
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <!-- mysql的JDBC驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.17</version>
                </dependency>
            </dependencies>
        </plugin>
    <plugins>    
</build>

大部分情况下,我们的项目中已经配置过了对应数据库的JDBC驱动,现在在插件中又配置一次,感觉有些冗余,Maven提供了includeCompileDependencies属性,让我们在插件中引用dependencies的依赖,这样就不需要重复配置了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <!--mybatis的代码生成器的配置文件-->
                <configurationFile>
                    src/main/resources/mybatis-generator-config.xml
                </configurationFile>
                <!--允许覆盖生成的文件-->
                <overwrite>true</overwrite>
                <!--将当前pom的依赖项添加到生成器的类路径中-->
                <includeCompileDependencies>true</includeCompileDependencies>
            </configuration>
        </plugin>
    <plugins>    
</build>

3.4 配置MyBatis Generator Config

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
<?xml version="1.0" encoding="UTF-8" ?>
<!--mybatis的代码生成器相关配置-->
<!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-dev.properties"/>
 
    <!-- 一个数据库一个context,context的子元素必须按照以下给出的个数、顺序配置
        (MyBatis Generator对配置的循序还有要求)
        property (0..N)
        plugin (0..N)
        commentGenerator (0 or 1)
        jdbcConnection (需要connectionFactory 或 jdbcConnection)
        javaTypeResolver (0 or 1)
        javaModelGenerator (至少1个)
        sqlMapGenerator (0 or 1)
        javaClientGenerator (0 or 1)
        table (1..N)
    -->
    <!-- id: 随便填,保证多个context id不重复就行
         defaultModelType: 可以不填,默认值conditional,flat表示一张表对应一个po
         targetRuntime:可以不填,默认值MyBatis3,常用的还有MyBatis3Simple
                        这个配置会影响生成的dao和mapper.xml的内容 
                        targetRuntime = MyBatis3Simple,生成的接口会少很多,只包含最最常用的
    -->
    <context id="myContext" targetRuntime="MyBatis3" defaultModelType="flat">
 
        <!-- 这个插件给生成的Java模型对象增加了equals和hashCode方法 -->
        <!-- <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/> -->
 
        <!-- 用来配置生成的注释。默认是生成注释的,并且会生成时间戳 -->
        <commentGenerator>
            <!-- 是否不生成注释 -->
            <property name="suppressAllComments" value="true"/>
            <!-- 不希望生成的注释中包含时间戳 -->
            <!-- <property name="suppressDate" value="true"/> -->
            <!-- 添加db表中字段的注释,只有suppressAllComments为false时才生效 -->
            <!-- <property name="addRemarkComments" value="true"/> -->
        </commentGenerator>
 
        <!-- JDBC连接 -->
        <jdbcConnection driverClass="${spring.datasource.driverClassName}"
                        connectionURL="${spring.datasource.url}"
                        userId="${spring.datasource.username}"
                        password="${spring.datasource.password}">
            <!-- 高版本的mysql-connector-java需要设置nullCatalogMeansCurrent=true -->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
 
        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal,默认false。
                 false,把JDBC DECIMAL和NUMERIC类型解析为Integer
                 true,把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal
            -->
            <property name="forceBigDecimals" value="true"/>
            <!-- 默认false
                 false,将所有JDBC的时间类型解析为java.util.Date
                 true,将JDBC的时间类型按如下规则解析
                    DATE                    -> java.time.LocalDate
                    TIME                    -> java.time.LocalTime
                    TIMESTAMP               -> java.time.LocalDateTime
                    TIME_WITH_TIMEZONE      -> java.time.OffsetTime
                    TIMESTAMP_WITH_TIMEZONE -> java.time.OffsetDateTime
            -->
            <!-- <property name="useJSR310Types" value="false"/> -->
        </javaTypeResolver>
 
        <!-- 配置po生成的包路径和项目路径 -->
        <javaModelGenerator targetPackage="com.wqlm.boot.user.po" 
                targetProject="src/main/java">
            <!-- 是否让 schema 作为包的后缀,默认为false -->
            <!-- <property name="enableSubPackages" value="false"/> -->
            <!-- 是否针对string类型的字段在set方法中进行修剪,默认false -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
 
        <!-- 生成Mapper.xml文件 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <!-- <property name="enableSubPackages" value="false"/> -->
        </sqlMapGenerator>
 
        <!-- 生成XxxMapper.java接口 
             type="XMLMAPPER"会将接口的实现放在mapper.xml中,推荐这样配置
             type="ANNOTATEDMAPPER",接口的实现通过注解写在接口上面
             如果采用这种方式,不会生成mapper.xml也不用配置<sqlMapGenerator>,
             但是采用注解来实现接口应对简单查询还好,如果是复杂查询并不如xml方便
             所以还是建议将type配置成XMLMAPPER
        -->
        <javaClientGenerator targetPackage="com.wqlm.boot.user.dao" 
                targetProject="src/main/java" type="XMLMAPPER">
            <!-- <property name="enableSubPackages" value="false"/> -->
        </javaClientGenerator>
 
        <!-- 一个table对应一张表,如果想同时生成多张表,需要配置多个table
             schema为数据库名,Oracle需要配置,MySQL不需要配置。
             tableName为对应的数据库表名
             domainObjectName是要生成的实体类名(可以不指定,默认按帕斯卡命名法将表名转换成类名)
             enableXXXByExample默认为true, 为true会生成一个对应Example帮助类,
             帮助你进行条件查询,不想要可以设为false
        -->
        <table schema="" tableName="user" domainObjectName="User"
               enableCountByExample="false" enableDeleteByExample="false" 
               enableSelectByExample="false"
               enableUpdateByExample="false" selectByExampleQueryId="false">
            <!-- 是否使用实际列名,默认为false -->
            <!-- <property name="useActualColumnNames" value="false" /> -->
        </table>
    </context>
</generatorConfiguration>

四、使用MyBatis Generator

配置好后,双击Maven中的MyBatis Generator运行

参考:MyBatis Generator 超详细配置

This post is licensed under CC BY 4.0 by the author.