编写:bravo1988
校审:养兔子的大叔

如果你所在的公司还是在用原始的MyBatis,没有使用通用Mapper,这篇文章将让你学会如何快速构建最基本的DAO层所需的Mapper接口、POJO、XML文件。
如果你们已经使用通用Mapper,请看TkMapper Generator,同样能帮你减少一部分工作量。

本文的配置,默认不会覆盖原有Java文件,而XML文件会追加(第二次生成的sql语句会在用一个文件中追加)。
建议大家单独创建一个逆向工程,生成文件并修改无误后再拷贝到项目中。**

另外,当你发现本文的配置无法满足你的项目需求时,可以自行百度解决问题。比如你想自动生成Example相关语句,可以搜索“Mybatis Generator不生成Example怎么办”。

环境准备

Pom里的plugin依赖

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.mybatis.generator</groupId>
  5. <artifactId>mybatis-generator-maven-plugin</artifactId>
  6. <version>1.3.6</version>
  7. <configuration>
  8. <verbose>true</verbose>
  9. <!-- 代表mybatis generator生成的内容不要覆盖已有的内容 -->
  10. <overwrite>false</overwrite>
  11. </configuration>
  12. <dependencies>
  13. <dependency>
  14. <groupId>mysql</groupId>
  15. <artifactId>mysql-connector-java</artifactId>
  16. <version>5.1.45</version>
  17. </dependency>
  18. </dependencies>
  19. </plugin
  20. </plugins>
  21. </build>

在resources目录下放置generatorConfig.xml

image.png

generatorConfig.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>
        <!-- defaultModelType="hierarchical"则POJO会同时生成xxxKey,targetRuntime="MyBatis3Simple"不会生成insertSelective之类方法 -->
    <context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3">

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

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

        <!-- 注释生成器 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 必须要有的,使用这个配置链接数据库 @TODO:是否可以扩展 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql:///test" userId="root" password="root">
            <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
        </jdbcConnection>

        <javaTypeResolver>
            <!--
             true:使用BigDecimal对应decimal(小数)和 numeric(数字)数据类型
             false:默认,
                 scale>0;length>18:使用BigDecimal;
                 scale=0;length[10,18]:使用Long;
                 scale=0;length[5,9]:使用Integer;
                 scale=0;length<5:使用Short;
            -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- java模型创建器,是必须要的元素 负责:1,key类(见context的defaultModelType);2,java类;3,查询类
            targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制; targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录 -->
        <javaModelGenerator targetPackage="com.bravo.web.bean.superman" targetProject="src/main/java">
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true"/>
            <!-- 设置是否在setter方法中,对String类型字段调用trim()方法(如果你用Lombok,忽略这个) -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>


        <!-- 生成SQL map的XML文件生成器, 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
            或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
            targetPackage/targetProject:同javaModelGenerator -->
        <sqlMapGenerator targetPackage="com.bravo.web.mapper.superman"
                         targetProject="src/main/java">
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>


        <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/targetProject:同javaModelGenerator
            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.bravo.web.mapper.superman"
                             type="XMLMAPPER" targetProject="src/main/java">
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true"/>

            <!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 <property name="rootInterface"
                value=""/> -->
        </javaClientGenerator>

        <!-- 四个false禁止接口生成Example相关语句,如果需要请删除 -->
        <table tableName="t_tip_content"
               delimitIdentifiers="true"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false">
            <!-- 参考 javaModelGenerator 的 constructorBased属性 -->
            <property name="constructorBased" value="false"/>
            <generatedKey column="id" sqlStatement="JDBC"/>
            <!-- 把生成的POJO、Mapper接口、Mapper.xml名字的前缀T去掉(t_tip_content 输出 TTipContent) -->
            <domainObjectRenamingRule searchString="^T" replaceString="" />
        </table>

    </context>

</generatorConfiguration>

数据库SQL

CREATE TABLE `t_tip_content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `title_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

逆向生成

修改配置

  • 数据库连接

image.png

  • 指定生成后的POJO存放位置

image.png

  • 指定Mapper.xml存放位置

image.png

  • 指定Mapper接口存放位置

image.png

执行命令

image.png

效果展示

POJO

image.png

image.png

Mapper接口、Mapper.xml

image.png

image.png

image.png

弄完了自己打开看看,把需要改的字段改改,该写的注释写写,不要太相信自动生成的东西。