美文网首页
MyBatis代码生成器(超详细讲解)

MyBatis代码生成器(超详细讲解)

作者: JTravler | 来源:发表于2020-03-18 09:10 被阅读0次

    为什么要使用MyBatis代码生成器?

    MyBatis代码生成器(MyBatis Generator)的作用就是方便我们偷懒,这样说比较贴切一些。
    因为我们在使用MyBatis框架的时候,需要三个组件:

    1. 实体类
    2. Mapper接口
    3. Mapper.xml
    在这里插入图片描述

    在没有使用MyBatis代码生成器的时候,我们需要手动创建它们,一张表对应一个实体类、一个Mapper接口、一个Mapper.xml。
    表的数量比较少的情况自己创建还可以,如果表有几十张或者上百张,我们要一个一个创建的话,很难受的。MyBatis也考虑到这点,
    所以提供了代码生成器,我们只需要编写少量的配置,就能为每张表创建上面三个组件了,而且在创建的Mapper接口和Mapper.xml中,已经帮我们自动生成单表的增删改查代码了,也就是说使用MyBatis代码生成器,对于单表的增删改查我们不需要再写代码了。

    我们通过下面两步来使用代码生成器:

    1. 编写代码生成器配置文件
    2. 运行代码生成器

    1.编写代码生成器配置文件

    我们先对代码生成器配置文件做一个详细讲解,然后再给出整个配置代码。

    1. 首先要引入配置文件的模板,之后就是在这个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>
        
    </generatorConfiguration>
    
    1. generatorConfiguration标签下只包含以下三个标签,下面一 一介绍这三个标签的作用。


      在这里插入图片描述

    properties标签

    1. properties标签用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用${property}这种形式的引用,通过这种方式引用属性文件中的属性值。
    2. properties标签包含resource和url两个属性,只能使用其中一个属性来指定,同时出现则会报错。


      在这里插入图片描述

      resource:指定classpath下的属性文件。
      url:指定文件系统上的特定位置。

    classPathEntry标签

    这个标签可以配置多个,也可以不配置,只有一个location属性。这个标签最常见的用法就是通过location属性指定数据库驱动的路径。

    <classPathEntry location="E:\mysql-connector-java-5.1.29.jar"/>
    

    context标签

    这个标签至少配置一个,可以配置多个。context标签用于指定生成一组对象的环境。例如:

    1. 指定要连接的数据库
    2. 指定要处理的数据库表
    3. 生成实体类
    4. 生成Mapper接口
    5. 生成Mapper.xml

    context标签属性如下:


    在这里插入图片描述
    1. 必选属性id,id属性主要是区分多个context标签,必须唯一,id属性在运行代码生成器时使用。
    2. targetRuntime属性用于指定生成的代码的运行时环境,支持以下可选值:

    MyBatis3:默认值
    MyBatis3Simple:这种情况下不会输出与Example相关的方法。
    

    接下来我们看看context包含哪些子标签,我们只介绍其中常用的子标签。


    在这里插入图片描述

    commentGenerator标签

    该标签用来配置如何生成注释信息,最多可以配置1个。

    1. suppressAllComments:阻止生成注释。
    2. suppressDate:阻止生成的注释包含时间戳。
    3. addRemarkComments:注释是否添加数据库表的备注信息。

    jdbcConnection标签

    该标签用于指定MBG要连接的数据库信息,该标签必选,并且只能有一个。

    1. driverClass:访问数据库的JDBC驱动程序的完全限定类名。
    2. connectionURL:访问数据库的JDBC连接URL。
    3. userId:访问数据库的用户ID。
    4. password:访问数据库的密码。

    javaTypeResolver

    该标签的配置用来指定JDBC类型和Java类型如何转换,最多可以配置一个。

    javaModelGenerator标签

    该标签用来控制生成的实体类。该标签必须配置一个,并且最多配置一个。

    1. targetPackage:生成实体类存放的包名。
    2. targetProject:指定目标项目路径,可以使用相对路径或绝对路径。

    sqlMapGenerator标签

    该标签用于配置SQL映射生成器(Mapper.xml文件)的属性,该标签可选,最多配置一个。

    1. targetPackage:生成SQL映射文件存放的包名。
    2. targetProject:指定目标项目路径,可以使用相对路径或绝对路径。

    javaClientGenerator标签

    该标签用于生成Mapper接口,该标签可选,最多配置一个。

    1. targetPackage:生成Mapper接口存放的包名。
    2. targetProject:指定目标项目路径,可以使用相对路径或绝对路径。

    table标签

    该标签用于配置需要通过内省数据库的表,只有在table中配置过的表,才能经过上述其他配置生成最终的代码,该标签最少配置一个。
    table标签有一个必选属性tableName,该属性指定要生成的表名,可以使用SQL通配符匹配多个表。例如要生成全部的表,可以如下配置

    <table tableName="%"></table>
    

    下面给出完整的配置文件代码

    <?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>
        <!--<classPathEntry location="E:\mysql-connector-java-5.1.29.jar"/>-->
        <context id="mybatis" targetRuntime="mybatis3simple" defaultModelType="flat">
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <property name="addRemarkComments" value="true"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mybatis"
                            userId="root"
                            password="root">
            </jdbcConnection>
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <javaModelGenerator targetPackage="test.model"
                                targetProject="src\main\java">
                <property name="enableSubPackages" value="false"/>
                <property name="trimStrings" value="false"/>
            </javaModelGenerator>
            <sqlMapGenerator targetPackage="text.xml"
                             targetProject="src\main\resources">
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>
            <javaClientGenerator type="XMLMAPPER"
                                 targetPackage="test.mapper"
                                 targetProject="src\main\java">
            </javaClientGenerator>
            <table tableName="%">
                <generatedKey column="id" sqlStatement="MySql"/>
            </table>
        </context>
    </generatorConfiguration>
    

    配置介绍完了,接下来我们就开始运行代码生成器,这里使用Java编写代码运行它。

    2.使用Java代码运行代码生成器

    我们需要在pom.xml中引入以下依赖

    1. 代码生成器核心依赖
    2. MyBatis框架依赖
    3. MySQL数据库驱动依赖
    <dependencies>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
    </dependencies>
    

    然后编写Java代码运行代码生成器配置文件

    /**
     *  读取MBG生成代码
     */
    public class MyBatisGenerator {
        public static void main(String[] args) throws Exception {
            //MBG 执行过程中的警告信息
            List<String> warnings = new ArrayList<String>();
            //当生成的代码重复时,覆盖原代码
            boolean overwrite = true;
            //读取我们的 MBG 配置文件
            InputStream is = MyBatisGenerator.class.getResourceAsStream("/generator/mbg-config.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(is);
            is.close();
    
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            //创建 MBG
            org.mybatis.generator.api.MyBatisGenerator myBatisGenerator = new org.mybatis.generator.api.MyBatisGenerator(config, callback, warnings);
            //执行生成代码
            myBatisGenerator.generate(null);
            //输出警告信息
            for(String warning : warnings){
                System.out.println(warning);
            }
        }
    }
    

    运行之后的结果如下图,对于我们指定的表,MBG全部为我们生成对应的实体类,Mapper接口,以及Mapper.xml,超级方便。

    在这里插入图片描述
    这次的代码生成器源码以及sql建表语句在下面链接即可获得
    代码生成器源码

    相关文章

      网友评论

          本文标题:MyBatis代码生成器(超详细讲解)

          本文链接:https://www.haomeiwen.com/subject/caafyhtx.html