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

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

  • 新建一个SpringBoot项目

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

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

    <!-- mybatis-plus 代码生成器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.4.1</version>
    </dependency>
    
    <!-- Java的模板引擎 -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.2</version>
    </dependency>
    
    <!-- mysql JDBC驱动包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    
    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </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();
        }
    
        /**
         * <p>
         * 读取控制台内容
         * </p>
         */
        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方法:

    在这里插入图片描述

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


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

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

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

参考资料:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值