Mybatis-Plus实现自动生成代码的操作步骤

 更新时间:2023年10月22日 10:56:23   作者:呆小鱼LQ  
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率,本文将给大家介绍Mybatis-Plus实现自动生成代码的操作步骤

前言

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

Our-task介绍

本篇博客是我的github上项目our-task:一个完整的清单管理系统的配套教程文档,大家感兴趣的话,可以去看看

操作步骤

创建SpringBoot项目

先在IDEA中创建一个SpringBoot的项目,一直next就可以创建完成

设置pom依赖

    <dependencies>
        <!--        SpringBoot通用依赖模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--        Mysql数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--mp-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--        引入freemarker模板引擎供mp生成代码-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--mp代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!-- hutool工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.3</version>
        </dependency>
        <!--        lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

创建CodeGenerator类

这是mybatis-plus自动生成代码的文件,我是把这个文件和DemoApplication放在同一级目录下,大家把下面的代码粘贴过去,需要设置数据库的连接信息、service,controller、xml文件等代码的自动生成目录。

只要修改以下这些代码位置就可以了

//这个路径是生成路径
gc.setOutputDir(projectPath + "/src/main/java");
// 数据源配置(这里替换为自己的数据库配置)
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/our-task?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("abc+!@#123");
//这里配置生成的service/controller等代码,放在哪个包下面
pc.setParent("com.example.demo");
// 配置生成的xml存放的位置 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/"
        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;

第一次更改,可能会发现生成代码的路径和自己预想的不一样,大家可以直接把生成的代码删掉,修改路径,重新生成,多试试就行了

下面给大家贴出生成的全部代码

package com.example.demo;
​
import cn.hutool.core.util.StrUtil;
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.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
​
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
​
/**
 * @program: our-task-study
 * @description: mybatis-plus代码自动生成类
 * @author: water76016
 * @create: 2020-09-24 16:45
 **/
public class CodeGenerator {
    /**
     * 读取控制台内容
     */
    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 (StrUtil.isEmpty(ipt) == false){
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
​
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
​
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        //这个路径是生成路径
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("github:water76016");
        gc.setOpen(false);
        // gc.setSwagger2(true); 实体属性 Swagger2 注解
        gc.setServiceName("%sService");
        mpg.setGlobalConfig(gc);
​
        // 数据源配置(这里替换为自己的数据库配置)
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/our-task?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("abc+!@#123");
        mpg.setDataSource(dsc);
​
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(null);
        //这里配置生成的service/controller等代码,放在哪个包下面
        pc.setParent("com.example.demo");
        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<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 配置生成的xml存放的位置 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/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.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix("m_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

右键运行CodeGenerator生成代码

运行之后,就会读取我们数据库的配置,根据里面的表,自动生成service、mapper、controller、xml文件等代码了。

输入表名,多个表用英文的逗号分隔,最后敲回车就行

这就是我们的代码生成好的结果

特别注意事项

大家在生成代码之前,一定要把数据库设计好,包括:表名、表字段类型等等,都要考虑好,不然代码生成之后,后续想要修改数据库,重新修改代码是一件很麻烦的事

后续操作

想要运行代码,我们还需要一些配置

在yml文件中加入数据库的配置和xml文件的扫描路径

mybatis-plus:
  mapper-locations: /classpath*:/mapper/**Mapper.xml
​
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/our-task?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&tinyInt1isBit=false&allowPublicKeyRetrieval=true
    username: daxingyong
    password: daxingyong

由于还需要扫描mapper的路径,所以需要在SpringBoot的启动类上,加入@MapperScan("com.example.demo.mapper"),其中引号里面是我们的mapper文件的存放路径

package com.example.demo;
​
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

以上就是Mybatis-Plus实现自动生成代码的操作步骤的详细内容,更多关于Mybatis-Plus自动生成代码的资料请关注脚本之家其它相关文章!

相关文章

  • Java设计模式之建造者模式的示例详解

    Java设计模式之建造者模式的示例详解

    建造者模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。本文将通过示例讲解建造者模式,需要的可以参考一下
    2022-02-02
  • Java实现在线语音识别

    Java实现在线语音识别

    这篇文章主要为大家详细介绍了Java实现在线语音识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • java-list创建的两种常见方式

    java-list创建的两种常见方式

    本文给大家分享Java-list创建的两种常见方式,每种方式结合实例代码给大家讲解的非常详细,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • 亲身体验Intellij Idea从卡顿到顺畅全过程

    亲身体验Intellij Idea从卡顿到顺畅全过程

    这篇文章主要介绍了亲身体验Intellij Idea从卡顿到顺畅全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 谈谈在Java发送邮件中遇到的的问题

    谈谈在Java发送邮件中遇到的的问题

    本文介绍了在利用Java发送邮件过程中遇到的的两个问题,以及如何解决这两个问题。如果大家也遇到了这些问题,可以来参考借鉴。
    2016-08-08
  • Spring框架中ImportBeanDefinitionRegistrar的应用详解

    Spring框架中ImportBeanDefinitionRegistrar的应用详解

    这篇文章主要介绍了Spring框架中ImportBeanDefinitionRegistrar的应用详解,如果实现了ImportSelector接口,在配置类中被@Import加入到Spring容器中以后,Spring容器就会把ImportSelector接口方法返回的字符串数组中的类new出来对象然后放到工厂中去,需要的朋友可以参考下
    2024-01-01
  • SpringBoot@DeleteMapping(/xxx/{id})请求报405的解决

    SpringBoot@DeleteMapping(/xxx/{id})请求报405的解决

    这篇文章主要介绍了SpringBoot@DeleteMapping(/xxx/{id})请求报405的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Java微服务Nacos Config配置中心超详细讲解

    Java微服务Nacos Config配置中心超详细讲解

    配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散 在各个微服务中,不好统一配置和管理。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护
    2023-02-02
  • SpringCloud 2020-Ribbon负载均衡服务调用的实现

    SpringCloud 2020-Ribbon负载均衡服务调用的实现

    这篇文章主要介绍了SpringCloud 2020-Ribbon负载均衡服务调用的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • mybatis update更新字段的使用操作

    mybatis update更新字段的使用操作

    这篇文章主要介绍了mybatis update更新字段的使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论