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自动生成代码的资料请关注脚本之家其它相关文章!

相关文章

  • 解决新版 Idea 中 SpringBoot 热部署不生效的问题

    解决新版 Idea 中 SpringBoot 热部署不生效的问题

    这篇文章主要介绍了解决新版 Idea 中 SpringBoot 热部署不生效的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Springcloud中的region和zone的使用实例

    Springcloud中的region和zone的使用实例

    这篇文章主要介绍了Springcloud中的region和zone的使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • springboot使用alibaba的druid数据库连接池错误的问题及解决

    springboot使用alibaba的druid数据库连接池错误的问题及解决

    这篇文章主要介绍了springboot使用alibaba的druid数据库连接池错误的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • SpringBoot异步Async使用Future与CompletableFuture区别小结

    SpringBoot异步Async使用Future与CompletableFuture区别小结

    本文主要介绍了SpringBoot异步Async使用Future与CompletableFuture区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 如何解决SpringMVC不能访问html页面

    如何解决SpringMVC不能访问html页面

    这篇文章主要介绍了如何解决SpringMVC不能访问html页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java截取字符串的几种常用方法

    Java截取字符串的几种常用方法

    这篇文章主要给大家介绍了关于Java截取字符串的几种常用方法,在Java编程语言中,String类提供了用于操作字符串的丰富方法,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 全面理解java中的构造方法以及this关键字的用法

    全面理解java中的构造方法以及this关键字的用法

    本篇文章主要概述了如何用构造方法初始化对象,this属性名访问成员变量方法,和this()的用法,感兴趣的小伙伴一起来学习吧
    2023-03-03
  • SpringBoot项目与Nacos配置全过程

    SpringBoot项目与Nacos配置全过程

    本文介绍了如何在SpringBoot项目中使用Nacos作为配置中心,实现动态配置管理和实时更新配置的能力,通过配置命名空间和yml文件,创建SpringBoot项目并添加Nacos依赖,编写Controller和启动类,配置Tomcat启动程序,最终在Nacos服务端注册成功
    2024-11-11
  • php上传文件分类实例代码

    php上传文件分类实例代码

    这篇文章主要介绍了php上传文件分类实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • 关于JDK源码中的@author unascribed注释闲谈

    关于JDK源码中的@author unascribed注释闲谈

    这篇文章主要介绍了关于JDK源码中的@author unascribed注释闲谈,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论