使用mybatis-plus逆向工程生成DO、Mapper等文件

映射数据库表结构快速生成相关实体层、Mapper层等java文件。

  • 新建一个SpringBoot项目

  • 引入以下pom依赖(采用最小依赖原则)

    但凡缺一个都跑不起来,以至于在测试的时候出现了各种奇怪的错误,试错之后才得出以下四个依赖是必不可少的,其中版本号自己根据需要来选择。

    
    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-generatorartifactId>
        <version>3.4.1version>
    dependency>
    
    
    <dependency>
        <groupId>org.apache.velocitygroupId>
        <artifactId>velocity-engine-coreartifactId>
        <version>2.2version>
    dependency>
    
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.22version>
    dependency>
    
    
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <optional>trueoptional>
    dependency>
    
  • 在resource资源目录下新建jdbc.properties文件(配置参数根据实际情况填写)

    mysql.url=jdbc:mysql://127.0.0.1:3306/xxx?serverTimezone=Asia/Shanghai
    mysql.driver.name=com.mysql.cj.jdbc.Driver
    mysql.username=root
    mysql.password=root
    mysql.tinyint.boolean=true
    
  • 新建一个CodeGenerator.java文件

    package com.vainycos.mybatisgenerator;
    
    import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.*;
    import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
    import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
    import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import java.util.Scanner;
    
    /**
     * @ClassName CodeGenerator
     * @Description
     * @Version 1.0
     **/
    public class CodeGenerator {
    
        public static void main(String[] args) {
            Properties jdbcProperties = new Properties();
            InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
            try {
                jdbcProperties.load(is);
            } catch (IOException e) {
                throw new MybatisPlusException("load jdbc.properties error.");
            }
    
            // 代码生成器
            AutoGenerator mpg = new AutoGenerator();
    
            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
            System.out.println(projectPath);
            gc.setOutputDir(projectPath + "/src/main/java");
            // 设置作者
            gc.setAuthor("Vainycos");
            gc.setOpen(false);
            gc.setEntityName("%sDO");
            gc.setFileOverride(true);
            mpg.setGlobalConfig(gc);
    
            // 数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl(jdbcProperties.getProperty("mysql.url"));
            dsc.setDriverName(jdbcProperties.getProperty("mysql.driver.name"));
            dsc.setUsername(jdbcProperties.getProperty("mysql.username"));
            dsc.setPassword(jdbcProperties.getProperty("mysql.password"));
            if (!Boolean.valueOf(jdbcProperties.getProperty("mysql.tinyint.boolean"))) {
                dsc.setTypeConvert(new MySqlTypeConvert() {
                    @Override
                    public IColumnType processTypeConvert(GlobalConfig config, String fieldType) {
                        String t = fieldType.toLowerCase();
                        if (t.contains("tinyint(1)")) {
                            return DbColumnType.INTEGER;
                        }
                        return super.processTypeConvert(config, fieldType);
                    }
                });
            }
            mpg.setDataSource(dsc);
    
            // 包配置
            PackageConfig pc = new PackageConfig();
            pc.setParent("com.vainycos.mybatisgenerator");
            // 实体包名称
            pc.setEntity("entity");
            // mapper包名称
            pc.setMapper("mapper");
            mpg.setPackageInfo(pc);
    
            // 配置模板
            TemplateConfig templateConfig = new TemplateConfig();
            templateConfig.setXml(null);
            templateConfig.setService(null);
            templateConfig.setServiceImpl(null);
            templateConfig.setController(null);
            mpg.setTemplate(templateConfig);
    
            // 策略配置
            StrategyConfig strategy = new StrategyConfig();
            strategy.setNaming(NamingStrategy.underline_to_camel);
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            // strategy.setSuperEntityClass("com.yuxiang.entity.BaseDO");
            strategy.setEntityLombokModel(true);
            strategy.setRestControllerStyle(true);
            // 父类中的公共字段
            // strategy.setSuperEntityColumns("id", "gmt_created", "created_by", "gmt_modified", "modified_by");
            strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
            strategy.setControllerMappingHyphenStyle(true);
            strategy.setTablePrefix(pc.getModuleName() + "_");
            mpg.setStrategy(strategy);
            mpg.setTemplateEngine(new VelocityTemplateEngine());
            mpg.execute();
        }
    
        /**
         * 

    * 读取控制台内容 *

    */
    public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (ipt != null) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } }

    该类中的main方法可以直接运行,且父目录是我工程中现在的目录,然后设置了实体包的名称为entity,mapper包的名称就是mapper,可以根据需要自己在包配置这一段代码中进行调整:

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setParent("com.vainycos.mybatisgenerator");
    // 实体包名称
    pc.setEntity("entity");
    // mapper包名称
    pc.setMapper("mapper");
    
  • 运行main方法:

    使用mybatis-plus逆向工程生成DO、Mapper等文件_第1张图片

    在控制台中输入相应的表名就能自动生成相关文件了,目前仅配置了实体包和mapper包,后续可以根据需要再增加其他诸如Service包等配置。


生成代码器依赖于Velocity Engine,有兴趣可以做了解。

talk is cheap, show me the code. 以下为示例代码仓库地址:

https://github.com/Vainycos/mybatis-generator

参考资料:

  • mybatis-plus 错误java.lang.NoClassDefFoundError: org/apache/velocity/context/Context

  • Velocity Engine基础

你可能感兴趣的:(java,java,spring,boot,mybatis-plue)