MyBatisPlus 最新版代码生成器(直接拿来就能用,包含自动生成 Vue 模版)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: MyBatisPlus 最新版代码生成器(直接拿来就能用,包含自动生成 Vue 模版)

开始了喂~

别眨眼 O,O

一、编辑 pom.xml 文件,添加依赖

注意:

  • 数据库,我用的是 PostgreSQL,用 MySQL 的同学记得自己换哈~
  • 模版,我用的是 FreeMarker,用 Velocity 的同学记得自己换哈~
<properties>
    <java.version>18</java.version>
      <postgresql.version>42.3.6</postgresql.version>
      <druid.version>1.2.10</druid.version>
      <mybatis-plus.version>3.5.1</mybatis-plus.version>
      <mybatis-plus-generator.version>3.5.2</mybatis-plus-generator.version>
      <freemarker.version>2.3.31</freemarker.version>
  </properties>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 数据库相关 -->
        <!-- postgresql 数据库连接驱动 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgresql.version}</version>
        </dependency>
        <!-- druid 数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!-- mybatis-plus 自动生成代码模块 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus-generator.version}</version>
        </dependency>
        <!-- FreeMarker 模板引擎 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains</groupId>
            <artifactId>annotations</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

二、编辑 application.properties 文件

# SpringBoot 启动端口
server.port=9999
# 数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=hello
spring.datasource.password=hello1234
spring.datasource.url=jdbc:postgresql://localhost:5432/auto_trader
# 日志存放位置
logging.file.name=./log/hello.txt
# 日志的等级
# com.hello 是你的包路径
logging.level.com.hello=debug
#作者
code.generated.author=hello
#//待生成对象表名
code.generated.table-name=你的数据表名,多张表用逗号隔开

三、创建「代码自动生成器」类:AutoCodeGenerator

我在 src/main/java/ 目录下,创建了一个 AutoCodeGenerator 文件。

你看,它要导入巨多的包(不过,这些都是自动导入的,我就是想凑字数,贴出来给你看看)

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
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 org.apache.ibatis.jdbc.ScriptRunner;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.*;
import java.util.function.Consumer;

具体代码也无敌多,建议:逐字逐句阅读,尽可能一次性搞懂,加油!

public class AutoCodeGenerator {
    private static String driverClassName;  // 驱动名称
    private static String username;  // 数据库用户名
    private static String password;  // 数据库用户密码
    private static String url;  // 数据库连接URL
    private static String author;  // 作者
    private static String tableName;  // 待生成对象表名
    /**
     * 读取 application.properties 配置文件
     */
    private static void readProperty() throws IOException {
        Properties properties = new Properties();
        // 读取文件并转换编码为 UTF-8,解决 application.properties 配置文件中文乱码
        InputStreamReader inputStreamReader = new InputStreamReader(Objects.requireNonNull(AutoCodeGenerator.class.getClassLoader().getResourceAsStream("application.properties")), StandardCharsets.UTF_8);
        properties.load(inputStreamReader);
        driverClassName = properties.getProperty("spring.datasource.driver-class-name");
        username = properties.getProperty("spring.datasource.username");
        password = properties.getProperty("spring.datasource.password");
        url = properties.getProperty("spring.datasource.url");
        author = properties.getProperty("code.generated.author");
        tableName = properties.getProperty("code.generated.table-name");
    }
    /**
     * MyBatis-Plus 代码生成器「新」
     * 适用版本:mybatis-plus-generator 3.5.1 及其以上版本,对历史版本不兼容
     * 执行 run
     */
    public static void main(String[] args) throws Exception {
        // 加载数据库配置
        readProperty();
        // 项目路径
        String projectPath = System.getProperty("user.dir");
        // 根据数据源信息,创建文件,生成代码
        FastAutoGenerator.create(new DataSourceConfig.Builder(url,username,password))
                // 全局配置
                .globalConfig(builder -> builder
                        // 作者
                        .author(author)
                        // 输出路径
                        .outputDir(projectPath + "/target/generated-sources")
                        .dateType(DateType.TIME_PACK))
                // 包配置
                .packageConfig(builder -> builder
                        // 指定父包名
                        .parent("com.hello")
                        .entity("entities")
                        .service("services")
                        .serviceImpl("services.impl")
                        .mapper("mapper")
                        .controller("models"))
                // 模版配置
                .templateConfig(builder -> builder
                        .entity("/templates/entity.java")
                        .service("/templates/service.java")
                        .serviceImpl("/templates/serviceImpl.java")
                        .mapper("/templates/mapper.java")
                        .controller("/templates/controller.java"))
                // 策略配置
                .strategyConfig(builder -> builder
                        // 指定表名,用逗号分隔
                        .addInclude(tableName.split(","))
                        // 先开启 Controller 配置
                        .controllerBuilder()
                        // 开启生成 @RestController 控制器
                        .enableRestStyle()
                        // 开启驼峰转连字符
                        .enableHyphenStyle()
                        // 先开启 Entity 配置
                        .entityBuilder()
                        // 开启主键自增
                        .idType(IdType.AUTO)
                        // 数据库表映射到实体的命名策略,驼峰命名
                        .naming(NamingStrategy.underline_to_camel)
                        // 数据库表字段映射到实体的命名策略,驼峰命名
                        .columnNaming(NamingStrategy.underline_to_camel)
                        // 开启生成实体时生成字段注解
                        .enableTableFieldAnnotation())
                // 自定义配置:用来生产前端部分的 Vue 页面
                .injectionConfig(consumer -> {
                    Map<String, String> customFile = new HashMap<>();
                    // 根据指定的模版,生成对应的文件
                    customFile.put("aaa.vue", "/templates/aaa.vue.ftl");
                    customFile.put("bbb.vue", "/templates/bbb.vue.ftl");
                    consumer.customFile(customFile);
                })
                // freemarker 模版
                .templateEngine(new FreemarkerTemplateEngine(){
                    @Override
                    protected void outputCustomFile(@NotNull Map<String, String> customFile, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {
                      //存放取出的实体名称,用于生成路由
                        List<String> entityNames = new ArrayList<>();
                        if (!entityNames.contains(tableInfo.getEntityName())){
                            entityNames.add(tableInfo.getEntityName());
                        }
                        customFile.forEach((key, value) -> {
                            String fileName = String.format(projectPath + "/src/main/resources/static/" + tableInfo.getEntityName() + File.separator + tableInfo.getEntityName() +   "%s", key);
                            this.outputFile(new File(fileName), objectMap, value, this.getConfigBuilder().getInjectionConfig().isFileOverride());
                        });
                        // 生成路由部分
                        Map<String, Object> routers = new HashMap<>();
                        routers.put("author", author);
                        routers.put("date", new Date());
                        routers.put("entities", entityNames);
                        
                        // 使用 freemarker 模板引擎,路由页面路径
                        String templateRoutesPath = "/templates/routes_generated.js.ftl";
                        
                        // 生成的路由页面路径
                        File templateRoutesOutFile = new File(projectPath + "/src/main/resources/static/routes_generated.js");
                        try {
                            this.writer(routers, templateRoutesPath, templateRoutesOutFile);
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                    }
                })
                // 执行
                .execute();
    }
}

搞定啦!是不是很简单?请各位老板,加个关注,点个赞呗!

以后天天来,把开发中的好源码,都分享出来~

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
3天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
2月前
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器
|
3月前
|
Web App开发 前端开发 关系型数据库
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
|
3月前
|
数据库
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
这篇文章介绍了如何在基于SpringBoot+Vue+MybatisPlus的项目中使用elementUI的dialog组件进行用户信息的添加和删除操作,包括弹窗表单的设置、信息提交、数据库操作以及删除前的信息提示和确认。
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
|
3月前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
3月前
|
JavaScript Java 数据库
Vue+SpringBoot+ElementUi+mybatis-plus 实现用户信息的修改及模拟充值
这篇文章展示了如何使用Vue结合SpringBoot、ElementUI和mybatis-plus实现用户信息的修改以及模拟充值的功能。文章首先介绍了模拟充值的过程,包括充值前后的账户余额和数据库信息的截图。然后,文章展示了用户信息修改前后的界面和数据库信息。核心代码部分演示了如何使用mybatis-plus轻松实现用户信息的修改操作,同时指出了异常处理和代码组织的最佳实践。
|
3月前
|
前端开发 JavaScript Java
解决springboot+vue+mybatis中,将后台数据分页显示在前台,并且根据页码自动跳转对应页码信息
该博客文章讲述了如何在Spring Boot + Vue + MyBatis的项目中实现后台数据的分页查询,并在前端进行显示和页码跳转,包括后端的分页查询实现、前端与后端的交互以及使用Element UI进行分页展示的方法。
|
4月前
Mybatis-Plus 代码生成器
Mybatis-Plus 代码生成器
|
6月前
|
SQL Java 数据库连接
1天搞定SpringBoot+Vue全栈开发 (3)MybatisPlus(数据库操作)
1天搞定SpringBoot+Vue全栈开发 (3)MybatisPlus(数据库操作)