我的使用时通过配置文件的方式使用的,这种方式看起来直观,但是不灵活,而且不能生成service和controller层代码,想要生成service和controller层还是写代码自定义模板生成。

mybatis-generator的官方地址:MyBatis Generator Core – Introduction to MyBatis Generator

具体的使用方式,常用标签标注出来了,具体的查阅文档

使用步骤:

pom中添加插件,设置数据库驱动

<build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

            <!--mybatis的代码生成器插件-->

            <plugin>

                <groupId>org.mybatis.generator</groupId>

                <artifactId>mybatis-generator-maven-plugin</artifactId>

                <version>1.4.0</version>

                <executions>

                    <execution>

                        <id>Generate MyBatis Artifacts</id>

                        <goals>

                            <goal>generate</goal>

                        </goals>

                    </execution>

                </executions>

                <configuration>

                    <!-- 输出详细信息 -->

                    <verbose>true</verbose>

                    <!-- 覆盖生成文件 -->

                    <overwrite>true</overwrite>

                    <!-- 定义配置文件 -->

                    <configurationFile>${basedir}/src/main/resources/generator-configuration.xml</configurationFile>

                </configuration>

                <dependencies>

                    <dependency>

                        <groupId>mysql</groupId>

                        <artifactId>mysql-connector-java</artifactId>

                        <scope>runtime</scope>

                        <version>8.0.22</version>

                    </dependency>

                </dependencies>

            </plugin>

        </plugins>

    </build>

编写代码生成器的具体配置如下:

generator-configuration.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>

 

    <!--

        context标签:最重要的配置项 对应编码类org.mybatis.generator.config.Context

            id:Context示例的唯一ID,用于输出错误信息时候作为唯一标记

            targetRuntime:代码的生成模式

                MyBatis3    提供基本的基于动态SQL的CRUD方法和XXXByExample方法,会生成XML映射文件

                MyBatis3Simple    提供基本的基于动态SQL的CRUD方法,会生成XML映射文件

                MyBatis3DynamicSql    默认值,兼容JDK8+和MyBatis 3.4.2+,不会生成XML映射文件,忽略<sqlMapGenerator>的配置项,也就是Mapper全部注解化,依赖于MyBatis Dynamic SQL类库

            defaultModelType:实体的生成行为,默认conditional,targetRuntime为MyBatis3DynamicSql或者MyBatis3Kotlin时忽略此配置

    -->

    <context id="mysqlGenerator" targetRuntime="MyBatis3">

        <!--

            零个或者多个property,对应属性如下,一般用不到

            <property name="" value=""/>

                autoDelimitKeywords    是否使用分隔符号括住数据库关键字    false    例如MySQL中会使用反引号括住关键字

                beginningDelimiter    分隔符号的开始符号    "

                endingDelimiter    分隔符号的结束号    "

                javaFileEncoding    文件的编码    系统默认值    来源于java.nio.charset.Charset

                javaFormatter    类名和文件格式化器    DefaultJavaFormatter    见JavaFormatter和DefaultJavaFormatter

                targetJava8    是否JDK8和启动其特性    true

                kotlinFileEncoding    Kotlin文件编码    系统默认值    来源于java.nio.charset.Charset

                kotlinFormatter    Kotlin类名和文件格式化器    DefaultKotlinFormatter    见KotlinFormatter和DefaultKotlinFormatter

                xmlFormatter    XML文件格式化器    DefaultXmlFormatter    见XmlFormatter和DefaultXmlFormatter

        -->

 

        <!--

            plugin:用于引入一些插件对代码生成的一些特性进行扩展

                例如:引入org.mybatis.generator.plugins.SerializablePlugin插件会让生成的实体类

                     自动实现java.io.Serializable接口并且添加serialVersionUID属性。

              可选插件地址:http://mybatis.org/generator/reference/plugins.html

        -->

        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>

 

        <!--

            commentGenerator:标签是可选的,用于控制生成的实体的注释内容

            有四个属性:

                suppressAllComments    是否生成注释    false

                suppressDate    是否在注释中添加生成的时间戳    false

                dateFormat    配合suppressDate使用,指定输出时间戳的格式    java.util.Date#toString()

                addRemarkComments    是否输出表和列的Comment信息    false

        -->

        <commentGenerator>

            <property name="suppressAllComments" value="true" />

        </commentGenerator>

        <!-- 数据库链接URL、用户名、密码 对应编码类JDBCConnectionConfiguration-->

        <jdbcConnection

                driverClass="com.mysql.jdbc.Driver"

                connectionURL="jdbc:mysql://localhost:3306/springcloud?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"

                userId="root"

                password="123456"/>

        <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa"/>-->

 

        <!--

            javaTypeResolver:用于解析和计算数据库列类型和Java类型的映射关系,可以不配置

            有两个属性:

                forceBigDecimals  是否强制把所有的数字类型强制使用java.math.BigDecimal类型表示    false

                useJSR310Types    是否支持JSR310,主要是JSR310的新日期类型    false

                    数据库(JDBC)类型            Java类型

                        DATE                java.time.LocalDate

                         TIME                java.time.LocalTime

                       TIMESTAMP            java.time.LocalDateTime

                      TIME_WITH_TIMEZONE    java.time.OffsetTime

                  TIMESTAMP_WITH_TIMEZONE    java.time.OffsetDateTime

        -->

        <!--<javaTypeResolver>

            <property name="forceBigDecimals" value="false" />

        </javaTypeResolver>-->

 

        <!--

            javaModelGenerator:主要用于控制实体(Model)类的代码生成行为

                targetPackage:生成的实体类的包名

                targetProject:生成的实体类文件相对于项目(根目录)的位置

                可配置属性:

                    constructorBased:是否生成一个带有所有字段属性的构造函数,默认false,MyBatis3Kotlin模式下忽略此属性配置

                    enableSubPackages:是否允许通过Schema生成子包,默认false,如果为true,

                        例如包名为club.throwable,如果Schema为xyz,那么实体类文件最终会生成在club.throwable.xyz目录,不存在创建

                    exampleTargetPackage:生成的伴随实体类的Example类的包名

                    exampleTargetProject:生成的伴随实体类的Example类文件相对于项目(根目录)的位置

                    immutable:是否不可变    false,如果为true,则不会生成Setter方法,所有字段都使用final修饰,提供一个带有所有字段属性的构造函数

                    rootClass:为生成的实体类添加父类,通过value指定父类的全类名即可

                    trimStrings:Setter方法是否对字符串类型进行一次trim操作,默认false

        -->

        <javaModelGenerator targetPackage="com.wangzewei.mybatisgenerator.entity" targetProject="src/main/java">

            <property name="enableSubPackages" value="true" />

            <property name="trimStrings" value="true" />

            <property name="constructorBased" value="true" />

        </javaModelGenerator>

 

        <!--

            sqlMapGenerator:主要用于控制XML映射文件的代码生成行为

                targetPackage    生成的XML映射文件的包名

                targetProject    生成的XML映射文件相对于项目(根目录)的位置

              如下配置,相当于在resources目录下创建mapper目录存放生成的*.xml文件

            enableSubPackages:创建子包

        -->

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

            <property name="enableSubPackages" value="true" />

        </sqlMapGenerator>

 

        <!--

            javaClientGenerator:主要用于控制Mapper接口的代码生成行为

            三个属性:

                type:Mapper接口生成策略

                    ANNOTATEDMAPPER:Mapper接口生成的时候依赖于注解和SqlProviders(也就是纯注解实现),不会生成XML映射文件。

                    XMLMAPPER:Mapper接口生成接口方法,对应的实现代码生成在XML映射文件中(也就是纯映射文件实现)。

                    MIXEDMAPPER:Mapper接口生成的时候复杂的方法实现生成在XML映射文件中,

                                 而简单的实现通过注解和SqlProviders实现(也就是注解和映射文件混合实现)

                targetPackage:生成的Mapper接口的包名

                targetProject:生成的Mapper接口文件相对于项目(根目录)的位置    Y    例如src/main/java

             注意:

                <context>标签的targetRuntime属性指定为MyBatis3Simple的时候,type只能选用ANNOTATEDMAPPER或者XMLMAPPER。

                <context>标签的targetRuntime属性指定为MyBatis3的时候,type可以选用ANNOTATEDMAPPER、XMLMAPPER或者MIXEDMAPPER。

            property:

                enableSubPackages:是否允许通过Schema生成子包,默认false,自动创建不存在的包

                useLegacyBuilder:是否通过SQL Builder生成动态SQL,默认false

                rootInterface    为生成的Mapper接口添加父接口

        -->

        <javaClientGenerator type="XMLMAPPER"

                             targetPackage="com.wangzewei.mybatisgenerator.mapper"

                             targetProject="src/main/java">

            <property name="enableSubPackages" value="true" />

            <property name="useLegacyBuilder" value="true" />

        </javaClientGenerator>

 

 

        <!--

            table:要生成的目标表

                常用属性:

                tableName:数据库表名称

                alias:表别名,如果指定了此值,则查询列的时候结果格式为【别名+列名】

                domainObjectName:表对应的实体类名称,可以通过.指定包路径,如果指定了bar.User,则包名为bar,实体类名称为User

                mapperName:表对应的Mapper接口类名称,可以通过.指定包路径,如果指定了bar.UserMapper,则包名为bar,Mapper接口类名称为UserMapper

                delimitAllColumns:是否所有的列都添加分隔符,默认值为false,如果设置为true,所有列名会添加起始和结束分隔符

                还有一些默认属性,生成方法true的不配置了

                表的property

                    constructorBased,是否为实体类生成一个带有所有字段的构造函数,默认false

                    ignoreQualifiersAtRuntime:是否在运行时忽略别名

                    useActualColumnNames:是否使用列名作为实体类的属性名

        -->

        <table tableName="sys_user"

               enableCountByExample="false"

               enableUpdateByExample="false"

               enableDeleteByExample="false"

               enableSelectByExample="false"

               selectByExampleQueryId="false" />

        <!-- <table tableName="course_info" domainObjectName="CourseInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />

        <table tableName="course_user_info" domainObjectName="CourseUserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" /> -->

    </context>

</generatorConfiguration>

运行就是通过maven,

【mybatis代码生成器】mybatis-generator的xml方式使用_maven

 右击运行,即可生成

【mybatis代码生成器】mybatis-generator的xml方式使用_java_02

示例: 

【mybatis代码生成器】mybatis-generator的xml方式使用_java_03

 

注意事项:定义mybatis-generator配置文件时,需要严格按照如下顺序定义标签,不然context报红,编译也不会通过

property*>plugin*>commentGenerator>(connectionFactory|jdbcConnection)>javaTypeResolver>javaModelGenerator>sqlMapGenerator>javaClientGenerator>table