我们都知道,人在学会走路后,就想要跑,会跑了之后想要更快或者更省力,于是便有单车,汽车,动车等应运而生,今天,又是周三自习时间,所以就给大家整理一下程序猿的小单车---mybatis-generator(MBG)小电瓶车---mybatis-plus-generator,至于更加高级的jeecg-boot和若依的代码生成器(我简称为汽车),等下周三有时间了我再整理,如果感兴趣的也可以去他们的官网看看,至于更高级别的“动车”框架,目前还没接触到,等以后用到了再整理

“汽车”官网:

JEECG官方网站 - 基于BPM的低代码开发平台
RuoYi 若依官方网站

前提说明:

使用“单车”的前提是要具有一定SSM整合基础,使用“电瓶车”则最好是要具备springboot整合SSM的基础,因为不可能走都没走稳就学踩单车吧,另外以下的内容是基于自己平常的练习和开发环境整理的,用的可能不是最新版本,但也足够了,如果想了解最新版本的使用的话,我下面提供了官网链接,可以自行进去查看使用最新版本,使用过程大同小异,我就不多做介绍了

mybatis-generator(MBG)

官网地址:MyBatis Generator Core – Introduction to MyBatis Generator

数据库表准备:

image.png

环境准备:

1)Free Mybatis Plugin插件

image.png

2)搭建maven项目环境

image.png

3)配置pom文件

<?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.leixiaoqiao</groupId>
    <artifactId>mybatis-generator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <!--mybatis代码自动生成插件-->
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.0</version>
                <!--配置插件运行时需要的依赖-->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.38</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!--允许移动生成的文件 -->
                    <verbose>true</verbose>
                    <!-- 是否覆盖 -->
                    <overwrite>true</overwrite>
                    <!-- 代码生成器的配置文件地址 -->
                    <configurationFile>
                        src/main/resources/mybatis-generator.xml
                    </configurationFile>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
    </dependencies>
</project>

若导入下面这段代码,右侧maven的plugin报红,则换成下面另外的格式,效果一样

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>
</plugin>
 				<plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>

4)配置db.properties(数据源相关属性)

---mydb是需要生成单表crud映射文件的数据库表的mysql的数据库名,可自行更改
jdbc.driverClass=com.mysql.jdbc.Driver
#在xml配置文件中,url中的&符号需要转义成&amp;
jdbc.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=

5)配置mybatis-generator.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="db.properties" />

    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <!--是否在生成的注释中包括生成时间戳,默认false,值为true表示不会将时间戳添加到生成的注释中-->
            <property name="suppressDate" value="true"/>
            <!--默认会将数据库表的字段注释生成-->
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
           NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成实体的包名和位置-->
        <javaModelGenerator targetPackage="com.leixiaoqiao.entity" targetProject="src/main/java">
            <!--开启子包-->
            <property name="enableSubPackages" value="true"/>
            <!--去除生成java文件名称的首尾空白-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成mapper映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="com.leixiaoqiao.mapper.xml" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成mapper接口的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.leixiaoqiao.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <!--需要逆向生成几张表就配置几个table标签-->
        <table tableName="customer" domainObjectName="Customer" ></table>

        <!--<table tableName="*"/>-->

    </context>
</generatorConfiguration>

启动插件:

image.png

运行效果:

image.png

错误处理:

如果如图所示位置报错,请点击Alt+Enter将项目语言水平升至6以上

image.png

image.png

mybatis-plus-generator

官网地址:代码生成器(历史版本) | MyBatis-Plus (baomidou.com)

看了上面我整理的运行效果就知道,MBG只能生成xml映射文件和实体类,并没有生成controller,service功能代码,所以我为什么会说mbg是小单车,而plus是小电瓶车

数据库准备:同上

环境准备:

1)创建maven项目环境

image.png

2)配置pom文件

<?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.leixiaoqiao</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- 添加 模板引擎 依赖 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.13</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.13</version>
        </dependency>
    </dependencies>

</project>

3)配置代码生成类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;

// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        // 获取当前系统目录
        final String projectPath = System.getProperty("user.dir");
        // 拼接出代码最终输出的目录
        gc.setOutputDir(projectPath + "/src/main/java");
        // 配置开发者信息(可选)(需要修改)
        gc.setAuthor("云桥之上");
        // 配置是否打开目录,false 为不打开(可选)
        gc.setOpen(false);
        // 通用查询结果列(映射文件中的<sql>)
        gc.setBaseColumnList(true);
        // 通用查询结果映射(映射文件中的<BaseResultMap>)
        gc.setBaseResultMap(true);
        // 实体属性 Swagger2 注解,添加 Swagger 依赖,开启 Swagger2 模式(可选)
        //gc.setSwagger2(true);//生成api文档,后期项目中使用
        // 重新生成文件时是否覆盖,false 表示不覆盖(可选)
        gc.setFileOverride(false);
        // 配置主键生成策略,此处为 ASSIGN_ID(可选)
        gc.setIdType(IdType.ASSIGN_ID);
        // 配置日期类型,此处为 ONLY_DATE(可选)
        gc.setDateType(DateType.ONLY_DATE);
        // 默认生成的 service 会有 I 前缀(不建议修改)
//        gc.setServiceName("%sService");//去除前缀I
        mpg.setGlobalConfig(gc);//将全局配置对象注册到代码生成器中


        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
        // dsc.setSchemaName("public");// 可以直接在 url 中指定数据库名
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("");
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        // 配置父包名(需要修改)
        pc.setParent("com.leixiaoqiao");
        // 配置模块名(需要修改)
        //pc.setModuleName("mbg");
        // 配置 entity 包名
        pc.setEntity("entity");
        // 配置 mapper 包名
        pc.setMapper("mapper");
        // 配置 service 包名
        pc.setService("service");
        // 配置 controller 包名
        pc.setController("controller");
        mpg.setPackageInfo(pc);

        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        // 如果模板引擎是 freemarker
//        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 velocity
         String templatePath = "/templates/mapper.xml.vm";

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/java/com/leixiaoqiao/mapper/xml/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 策略配置(数据库表配置)
        StrategyConfig strategy = new StrategyConfig();
        // 指定表名(可以同时操作多个表,使用 , 隔开)(需要修改)
		// strategy.setInclude("table1","table2","table3"....);
        strategy.setInclude("customer");
        // 配置数据表与实体类名之间映射的策略(不修改)
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 配置数据表的字段与实体类的属性名之间映射的策略(不修改)
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 配置 lombok 模式
        strategy.setEntityLombokModel(true);
        // 配置 rest 风格的控制器(@RestController),默认是非rest风格(@Controller)
        strategy.setRestControllerStyle(true);
        // 配置驼峰转连字符
        strategy.setControllerMappingHyphenStyle(true);
        // 配置表前缀,生成实体时去除表前缀
        // 此处的表名为 t_user,模块名为 t,去除前缀后剩下为 user。
        //可以配置多个
        //strategy.setTablePrefix("t_","tb_");
        mpg.setStrategy(strategy);

        // 执行代码生成操作
        mpg.execute();
    }

}

运行代码生成器:

image.png

运行效果:

image.png

错误处理:

控制台报这个,不用管他,不影响代码生成

image.png

最后:

以上就是如何配置并使用代码生成器的全部内容,至于mybatis-plus-generator生成的代码,他service和mapper接口里面都是继承父类封装好的接口,所以你看不到他的xml文件以及service方法,因此使用时,需要点进去他的父接口中,自行学习使用其父接口中封装的方法,最后,整理不易,望喜欢

L.X.Q.


温柔赠于四方,自由灵魂独享