美文网首页
六、代码生成器——逆行工程

六、代码生成器——逆行工程

作者: runewbie | 来源:发表于2019-10-27 00:20 被阅读0次

    上一节我们学习了mybatis-plusActiveRecord(活动记录),这一节我们来学习一下mybatis-plus代码生成器

    Mybatis-Plus 的代码生成器为我们提供了大量的自定义设置,生成的代码完全能够满足各类型的需求,可以快速的生成代码,简化开发,提高开发效率。

    Mybatis-Plus 的代码生成器 和 Mybatis MBG 代码生成器的对比:

    Mybatis-Plus 代码生成器 Mybatis MBG
    Mybatis-Plus 的代码生成器都是基于 java 代码来生成 MBG 基于 xml 文件进行代码生成
    Mybatis-Plus 的代码生成器可生成: 实体类(可以选择是否支持 AR)Mapper 接口Mapper 映射文件Service 层Controller 层 MyBatis 的代码生成器可生成: 实体类Mapper 接口Mapper 映射文件

    话不多说,下面我们来开始我们的代码生成器的学习之旅。

    首先按照快速开始——Spring集成Mybatis-Plus一节的操作,新建一个mp05Module,可以将mp02中的resources文件夹中内容全部复制过来,因为这些配置文件都是一样的。

    1、修改父项目的pom.xml文件

    在开始mp05的实战之前,我们需要修改下父工程的pom文件,因为MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,需要加入 Apache Velocity 的依赖。当然也可以更换为别的模板技术,例如freemarker,此处不做过多的介绍,大家感兴趣的可以自己尝试。另外还需要引入 mybatis-plus-generator 的依赖,这时因为 MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖。除此之外还需要引入spring-webmvc的依赖,因为我们在用代码生成器生成的 controller层的时候,SpringMVC的注解会提示报错,当然,你也可以在生成完代码之后再根据需要引入SpringMVC的依赖也可以,这样并不会影响代码生成器的使用。

    我们需要修改的 pom.xml 文件位置如下图所示:

    mp05-01.png

    贴上pom.xml修改部分的代码方便复制粘贴:

    <!-- 下面的依赖针对于 mp05 模块-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!--注意: MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>${mybatis.plus.version}</version>
    </dependency>
    <!--模板引擎
            MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板
            技术,例如 freemarker。此处不做过多的介绍。
            需要加入 Apache Velocity 的依赖-->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>${velocity.version}</version>
    </dependency>
    <!--加入 slf4j ,查看日志输出信息-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    

    修改后完整的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.demo.mybatis-plus</groupId>
        <artifactId>mybatis-plus-in-action</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
        <modules>
            <module>mp01</module>
            <module>mp02</module>
            <module>mp03</module>
            <module>mp04</module>
            <module>mp05</module>
            <module>mp06</module>
            <module>mp07</module>
            <module>mp08</module>
        </modules>
    
        <!-- 统一管理项目依赖版本 -->
        <properties>
            <mybatis.plus.version>3.2.0</mybatis.plus.version>
            <!--<mybatis.plus.version>2.3</mybatis.plus.version>-->
            <junit.version>4.12</junit.version>
            <log4j.version>1.2.17</log4j.version>
            <druid.version>1.1.20</druid.version>
            <mysql.version>5.1.48</mysql.version>
            <spring.version>5.2.0.RELEASE</spring.version>
            <lombok.version>1.18.10</lombok.version>
    
            <slf4j.version>1.7.28</slf4j.version>
            <velocity.version>2.1</velocity.version>
        </properties>
    
        <dependencies>
            <!-- mp 依赖
                mybatis-plus 会自动维护mybatis 以及 mybatis-spring相关的依赖
                Mybatis 及 Mybatis-Spring 依赖请勿加入项目配置,以免引起版本冲突!!!Mybatis-Plus 会自动帮你维护!
             -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
            <!--junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!-- log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!--lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- 下面的依赖针对于 mp05 模块-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!--注意: MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
            <!--模板引擎
            MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板
            技术,例如 freemarker。此处不做过多的介绍。
            需要加入 Apache Velocity 的依赖-->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity.version}</version>
            </dependency>
            <!--加入 slf4j ,查看日志输出信息-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
    
        </dependencies>
    
        <!-- 设置JDK编译版本 -->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    2、修改mp05的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>mybatis-plus-in-action</artifactId>
            <groupId>com.demo.mybatis-plus</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>mp05</artifactId>
    
        <dependencies>
            <!-- mp 依赖
                mybatis-plus 会自动维护mybatis 以及 mybatis-spring相关的依赖
                Mybatis 及 Mybatis-Spring 依赖请勿加入项目配置,以免引起版本冲突!!!Mybatis-Plus 会自动帮你维护!
             -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
            <!--junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!-- log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!--lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!--注意: MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
            <!--模板引擎
            MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板
            技术,例如 freemarker。此处不做过多的介绍。
            需要加入 Apache Velocity 的依赖-->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity.version}</version>
            </dependency>
            <!--加入 slf4j ,查看日志输出信息-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
        </dependencies>
    </project>
    

    3、MP 代码生成器示例

    我们在 mp05\src\test\java\com\mp\test\路径下新建一个测试类 TestMp.java

    TestMp.java 的代码如下:

    public class TestMp {
        private ApplicationContext ioc = new
                ClassPathXmlApplicationContext("applicationContext.xml");
    
        /**
         * 代码生成器 示例代码
         */
        @Test
        public void testGenerator() {
            // 1、全局配置
            com.baomidou.mybatisplus.generator.config.GlobalConfig config = new com.baomidou.mybatisplus.generator.config.GlobalConfig();
            config.setActiveRecord(true) // 是否支持AR模式
                    .setAuthor("jianshu")   // 作者
                    .setOutputDir("E:\\myCode\\mybatis-plus-in-action\\mp05\\src\\main\\java")      // 生成路径
                    .setFileOverride(true) // 文件覆盖
                    .setIdType(IdType.AUTO) // 主键策略
                    .setServiceName("%sService") //设置生成的service接口名首字母是否为I,默认是以I开头
                    .setBaseColumnList(true) // 基本列
                    .setBaseResultMap(true); // 返回结果map
    
            // 2、数据源配置
            DataSourceConfig dataSourceConfig = new DataSourceConfig();
            dataSourceConfig.setDbType(DbType.MYSQL) // 设置数据库类型
                    .setDriverName("com.mysql.jdbc.Driver")
                    .setUrl("jdbc:mysql://172.19.8.51:3306/wmcTradeOrderDevTemp?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8")
                    .setUsername("root")
                    .setPassword("root");
    
            // 3、策略配置
            StrategyConfig stConfig = new StrategyConfig();
            stConfig.setCapitalMode(true) // 全局大写命名
    //                .setColumnNaming(NamingStrategy.underline_to_camel)  //表名 字段名 是否使用下滑线命名
                    .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
                    .setInclude("tbl_employee") //生成的表
                    .setTablePrefix("tbl_"); // 表前缀
    
            // 4、包名策略配置
            PackageConfig pkConfig = new PackageConfig();
            pkConfig.setParent("com.mp")
                    .setController("controller")
                    .setEntity("beans")
                    .setMapper("mapper")
                    .setService("service")
                    .setXml("mapper");
    
            // 5、整合配置
            AutoGenerator ag = new
                    AutoGenerator().setGlobalConfig(config)
                    .setDataSource(dataSourceConfig)
                    .setStrategy(stConfig)
                    .setPackageInfo(pkConfig);
    
            // 6、执行
            ag.execute();
        }
    
    }
    

    执行 testGenerator() 方法后,刷新一下项目,我们可以看到会自动生成 beansmapperservicecontroller的代码。

    注意:关于表及字段命名策略选择:在 Mybatis-Plus 中,我们建议数据库表名 和 表字段名采用驼峰命名方式, 如果采用下划线命名方式 请开启全局下划线开关,如果表名字段名命名方式不一致请使用对应的注解指定,我们建议最好保持一致。这么做的原因是为了避免在对应实体类时产生的性能损耗,这样字段不用做映射就能直接和实体类对应。当然如果项目里不用考虑这点性能损耗,那么你采用下滑线也是没问题的,只需要在生成代码时配置 ColumnNaming属性就可以。

    完成上面的操作后,mp05的代码结构如下所示:

    mp05-02.png

    至此,基于 mybatis-plus代码生成器——逆行工程演示就完成了,下面我们就可以进入到下一节插件扩展的学习了。

    源代码

    相关示例完整代码:mybatis-plus-in-action

    相关文章

      网友评论

          本文标题:六、代码生成器——逆行工程

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