Mybatis-Plus之逆向工程之旅

一,任何学习都离不开官方文档

文档:https://baomidou.com/guide/generator.html

二,使用逆向工程

1,当别人丢给你一个sql脚本时,这时使用逆向工程简直不要太爽,当然逆向工程的方式有很多种,如有很多插件也可以逆向工程。这里主要对mybati-plus进行讲解
2,使用逆向工程也有不足之处,就是需要有数据库以及数据表,这是有点可惜的。这也解释了为什么有的人在考虑设计一个项目时先考虑设计数据库了,对于 java 工程师真的爽,也正是越来越简便的缘故,不得不说 java工程师 还是需要懂得更多的,如前端运维等。

三,开始项目

1,使用 springboot框架构建项目,并使用 maven 管理工具,随便构建一个项目就行了。
2,需要的依赖,目前是使用了一下依赖,不足的话在需要时再添加

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
        <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>

3,数据库设计,这里需要表比较多。如果仅仅是想体验一下的话,自己随便在数据库中设计几个表就行了
Mybatis-Plus之逆向工程之旅_第1张图片
4,编写一个 java 类,由于只是想生成代码,所以那些test 测试之类的就可以都不要了,留这么一点东西就够了
Mybatis-Plus之逆向工程之旅_第2张图片
5,编写Generator 类

package zhenghuisheng.yeb;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
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.TableFill;
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 com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import net.bytebuddy.implementation.ExceptionMethod;
import org.springframework.util.StringUtils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author xiaozheng
 * time : 2021/1/23 20:30
 */

public class Generator {
     
//    //输入数据时尽量不要换行
//    public static String getScanner() throws Exception {
     
//        BufferedReader bu = new BufferedReader(new InputStreamReader(System.in));
//        String dataTable = bu.readLine();
//        return dataTable;
//    }
    public static String sscanner(String tip){
     
        Scanner sc = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + "");
        System.out.println(help.toString());
        if (sc.hasNext()) {
     
            String ipt = sc.next();
            if (!StringUtils.isEmpty(ipt)){
     
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
    public static void main(String[] args) {
     
        // 需要构建一个 代码自动生成器 对象
        AutoGenerator mpg = new AutoGenerator();
        // 1、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath+"/yeb-generate/src/main/java");
        gc.setAuthor("zhenghuisheng");
        gc.setOpen(false);
        gc.setBaseColumnList(true);
        gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);

        //设置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/yeb? useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("zhs03171812");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        //3、包的配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("zhenghuisheng.yeb");
        pc.setEntity("pojo");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setController("controller");
        mpg.setPackageInfo(pc);

        //4,自定义配置
        InjectionConfig cfg = new InjectionConfig() {
     
            @Override
            public void initMap() {
     

            }
        };

        //如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        //自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig(templatePath) {
     
            @Override
            public String outputFile(TableInfo tableInfo) {
     
                return projectPath + "/yeb-generate/src/main/resources/mapper/" + 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.setNaming(NamingStrategy.underline_to_camel);
        //数据库表字段映射到实体的命名策略
        strategy.setColumnNaming(NamingStrategy.no_change);
        //设置lombok模型
        strategy.setEntityLombokModel(true);
        //设置@RestController控制器
        strategy.setRestControllerStyle(true);
        strategy.setInclude(sscanner("表名,多个英文逗号分隔").split(","));
//        try{
     
//            strategy.setInclude(getScanner().split(","));
//        }catch(Exception e){
     
//            System.out.println("数据输入有误");
//        }
        strategy.setControllerMappingHyphenStyle(true);
        //localhost:8080/hello_id_2
        mpg.setStrategy(strategy);
        //表前缀
        strategy.setTablePrefix("t_");
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute(); //执行
    }
}

6,运行,在控制台输入数据库中的表名,表与表之间与英文逗号分开,表名一定要对,不然会报错

7,运行结果,就是每一个表对于的实体类,以及service层以及实现service接口的类都出来了,controller层也出来了,一个字形容就是爽·

四,总结

逆向工程还是厉害的,省去了大量码代码的时间!

你可能感兴趣的:(springboot,java,generator,spring,boot,java)