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

亲测可用,若有疑问请私信

我的使用时通过配置文件的方式使用的,这种方式看起来直观,但是不灵活,而且不能生成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-generator配置文件时,需要严格按照如下顺序定义标签,不然context报红,编译也不会通过

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值