mybatis代码自动生成工具-MyBatis Generator

我们使用mybatis的时候,通常需要去手写与数据库中表对应的POJO对象、mapper接口以及与数据库做映射的xxxMapper.xml文件,如果表数量比较少无所谓,如果表的数量比较多并且表中字段也比较多,就比较麻烦,并且有时可能会写错,这时mybatis为我们提供的代码自动生成工具-MyBatis Generator,就可以大显身手了,下文MyBatis Generator简称MBG。

下面看看怎么样通过MBG实现代码自动生成。

首先肯定要创建一个mybatis项目,我们可以通过idea直接创建一个SpringBoot的项目,这个就不说了,直接说重点,往下看。

SpringBoot项目创建完成后,在SpringBoot项目的src/main/resources目录下创建generatorConfiguration.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>

    <!--properties标签包含两个属性,分别是resource和url,只能使用其中一个属性来指定,同时出现会报错,resource属性指定classpath下的属性文件,url属性指定文件系统上的特定位置-->
    <!--<properties resource=""/>-->
    <!--<properties url="">-->

    <!--classPathEntry:通过属性location执行数据库的JDBC驱动路径,此处换成你自己的驱动位置,属于可选,可以不配置 -->
    <classPathEntry location="D:\java\maven-repository\mysql\mysql-connector-java\8.0.22\mysql-connector-java-8.0.22.jar"/>

    <!--context标签用于指定生成1组对象的环境,,例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。context标签只有一个必选属性id,用来唯一确定该标签-->
    <context id="MySQLTables" targetRuntime="MyBatis3" defaultModelType="flat">

        <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
        <property name="autoDelimitKeywords" value="true"/>

        <!-- 生成的Java文件的编码 -->
        <property name="javaFileEncoding" value="utf-8"/>

        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- 格式化java代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>

        <!-- 格式化XML代码 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <!-- 注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="false"/> <!-- 是否生成注释代时间戳-->
        </commentGenerator>

        <!-- jdbc连接-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://192.168.x.xxx:3306/mybatis_test?serverTimezone=UTC&amp;setUnicode=true&amp;characterEncoding=utf8" userId="xxxx"
                        password="xxxx">
            <!-- 防止生成其它库的表 -->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成实体类地址 -->
        <javaModelGenerator targetPackage="com.example.tkmybatis.model" targetProject="src/main/java">
            <!-- 是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值去掉前后空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成mapper.xml文件存放地址 -->
        <sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 生成接口mapper -->
        <javaClientGenerator targetPackage="com.example.tkmybatis.mapper" targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
            <property name="nullCatalogMeansCurrent" value="true"/>
        </javaClientGenerator>

        <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 enableSelectByPrimaryKey相应的配置表示是否生成相应的接口 -->
        <table tableName="t_%"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"
               enableSelectByPrimaryKey="true"
               enableUpdateByPrimaryKey="true"
               enableDeleteByPrimaryKey="true"
        >
            <!-- 设置为false,MBG会尝试将返回的名称转化为驼峰形式 -->
            <property name="useActualColumnNames" value="false"/>
        </table>

    </context>
</generatorConfiguration>

这里说一下文件结构,总体由两部分组成,分别是XML文件头和<generatorConfiguration>标签。

XML文件头:文件头中有一个mybatis-generator-config_1_0.dtd,它用于定义该配置文件中所有标签和属性的用法和限制。

<generatorConfiguration>标签:标签内放置具体配置内容,有三个自己标签,分别是<properties>、<classPathEntry>和<context>,在配置这三个标签的时候,要注意顺序,和这里列出的顺序要一致。

<properties>标签:用来指定一个需要在配置中解析使用的外部属性文件,最多可以配置1个,也可以不配置。引入属性文件后,可以在配置中使用${property}这种形式的引用,通过这种方式引用属性文件中的属性值,对于后面需要配置的JDBC信息会很有用。它包含两个属性,分别是resource和url,二者只能使用其中一个,同时使用会报错,resource属性执行classpath下的属性文件,url属性指定系统上的特定文件

<classPathEntry>标签:这个标签属于可选,可配置多个,也可不配置,最常见的用法是通过属性location指定驱动的路径。

<context>标签:用于指定生成一组对象的环境,例如指定要连接的数据库,要生成的对象的类型和要处理的数据库中的表,该标签至少配置一个,可以配置多个。标签内只有一个必选属性id,用来唯一确定该标签,此外还有几个可选属性:defalutModelType、targetRuntime、introspectedColumnImpl,一般情况下,配置<context id="xxx" defalutModelType="flat">就可以。

defalutModelType属性:定义了MBG如何生成实体类,有三个可选值,分别是flat、hierarchical和conditional,通常使用flat,它表示“该模型只为每张表生成一个实体类,这个实体类包含表中的所有字段”。

targetRuntime属性:用于指定生成代码的运行时环境,有两个可选值,分别是MyBatis3和MyBatis3Simple,MyBatis3是默认值,MyBatis3Simple表示不会生成于Example相关的方法。

概念新的东西暂时不多讲了,有空再补,接下来看看配置文件如何将数据库中数据转为我们需要的代码,首先在数据库中准备表和数据,此处不赘述,自己随便找几张表,本文展示我自己的表:

 pom.xml依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>tk-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>tk-mybatis</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <configurationFile>src/main/resources/generatorConfiguration.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <!--加入下面这个依赖-->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.22</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

添加完成后,继续更新以下,然后再idea右侧maven中查看plugins,发现里面比平常多了一个mybatis-generator,就是它了,点击下图红框处指令

 点击后如果你的mysql连接等等信息没有配置错误的话,控制台会显示如下内容:

 OK,着说明我们的代码已经自己生成好了,接下来我们看看生成的都是些什么:

 到了这里,说明代码确实已经生成了,看了里面的内容,很多都是我们能用得到的额,确实为繁琐的开发提供了很大的便利。

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值