SpringBoot项目中,根据数据中的表结构生成后端代码

需求来源/背景:

每次都根据表去新建表的各个类,存在重复的工作,所以使用代码生成生成相关基础类。

具体实现如下:

  • 添加相关依赖
XML 复制代码
        <!-- 1-mybatis plus generator -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
            <scope>test</scope>
        </dependency>
        <!-- 2-模板引擎 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--3-freemarker模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>

        <!-- 添加 mybatis-plus 的依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        
        <!-- 4-测试模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>3.1.0</version>
        </dependency>
  • 添加对应的数据库依赖
XML 复制代码
        <!-- 1 Postgresql包 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- 2-sqlite相关包-->
        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.45.1.0</version>
        </dependency>

        <!-- 2-sqlite 方言-->
        <dependency>
            <groupId>com.zsoltfabok</groupId>
            <artifactId>sqlite-dialect</artifactId>
            <version>1.0</version>
        </dependency>

            <!-- Oracle驱动 -->
            <dependency>
                <groupId>com.oracle.database.jdbc</groupId>
                <artifactId>ojdbc8</artifactId>
                <version>12.2.0.1</version>
            </dependency>

        <!-- DMDB 相关包-->
        <!-- https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 -->
        <dependency>
            <groupId>com.dameng</groupId>
            <artifactId>DmJdbcDriver18</artifactId>
            <version>8.1.2.192</version>
        </dependency>

        <!-- mysql包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
            <scope>runtime</scope>
        </dependency>
  • 添加代码生成测试类
java 复制代码
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
public class GenCodeApplicationTests {

    /**
     * 数据库连接字符
     */
    private static final String URL = "jdbc:postgresql://localhost:5432/postgres";

	/**
     * 生成代码的包名
     */
    private static final String PARENT_PACKAGE_NAME = "com.app.business";
    /**
     * 数据库用户名
     */
    private static final String USERNAME = "postgres";
    /**
     * 数据库密码
     */
    private static final String PASSWORD = "postgres";
    /**
     * 项目根路径
     */
    private static final String PROJECT_ROOT_PATH = System.getProperty("user.dir");

    public static void main(String[] args) throws ClassNotFoundException {

		// 也可以使用绝对地址 D:\\soft\\code\\demo\\src\\main\\java\\com\\ruoyi\\system\\domain
        // 项目根路径
        String entityPath = PROJECT_ROOT_PATH + "/com/app/business/domain";
        // mapper路径
        String mapperPath = PROJECT_ROOT_PATH + "/com/app/business/mapper";
        // mapper xml路径
        String mapperXmlPath = PROJECT_ROOT_PATH + "/src/main/resources/mapper";
        // service路径
        String servicePath = PROJECT_ROOT_PATH + "/com/app/business/service";
        // service实现路径
        String serviceImplPath = PROJECT_ROOT_PATH + "/com/app/business/service/impl";
        // controller路径
        String controllerPath = PROJECT_ROOT_PATH + "/com/app/business/controller";

        FastAutoGenerator.create(URL, USERNAME, PASSWORD)
                // 1. 全局配置
                .globalConfig(builder -> builder
                        .author("author")
                        // 开启覆盖已生成的文件。注释掉则关闭覆盖。请谨慎开启此选项!
                        // .fileOverride()
                        .disableOpenDir()
                        // 开启swagger2。注释掉则默认关闭。
                        .enableSwagger()
                        .dateType(DateType.TIME_PACK)
                        // 注释时间策略。
                        .commentDate("yyyy-MM-dd")
                )
                .packageConfig((scanner, builder) -> builder
                        .parent(PARENT_PACKAGE_NAME)
                        .entity("domain")
                        .mapper("mapper")
                        .service("service")
                        .serviceImpl("service.impl")
                        .controller("controller")
                        .other("other")
                        .pathInfo(
                                new HashMap<OutputFile, String>() {{
                                    put(OutputFile.entity, entityPath);
                                    put(OutputFile.mapper, mapperPath);
                                    put(OutputFile.mapperXml, mapperXmlPath);
                                    put(OutputFile.service, servicePath);
                                    put(OutputFile.serviceImpl, serviceImplPath);
                                    put(OutputFile.controller, controllerPath);
                                }}
                        )
                )
                //todo 加入表名,多个在字符串中用,隔开
                .strategyConfig((scanner, builder) -> builder.addInclude(getTables("table_name"))
                        .entityBuilder()
                        .enableLombok()
                        .enableTableFieldAnnotation()
                        // 逻辑删除字段名(数据库)。
                        .logicDeleteColumnName("is_delete")
                        // 逻辑删除属性名(实体)。
                        .logicDeletePropertyName("isDelete")
                        .addTableFills(new Column("create_time", FieldFill.INSERT))
                        .addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE))
                        .idType(IdType.ASSIGN_ID)
                        .mapperBuilder()
                        .enableMapperAnnotation()
                        .enableBaseResultMap()
                        .enableBaseColumnList()
                        .controllerBuilder()
                        .enableRestStyle()
                        .enableHyphenStyle()
                        .build()
                )
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

    @Test
    void contextLoads() {
    }
}

最后运行这个测试类即可生成对应的代码类了!

相关推荐
2202_754421546 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介8 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习9 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose11 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热13 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余14 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp14 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang17 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
bjzhang7522 分钟前
SpringBoot开发——Maven多模块工程最佳实践及详细示例
spring boot·maven·maven多模块工程
一直学习永不止步22 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表