mybatis-plus逆向code generator pgsql实践

news2025/2/15 15:12:15

mybatis-plus逆向code generator pgsql实践

  • 环境准备
    • 重要工具的版本
    • 供参考pom依赖
    • 待逆向的SQL
  • 配置文件
    • CodeGenerator配置类
    • 配置类说明

环境准备

重要工具的版本

  1. jdk1.8.0_131
  2. springboot 2.7.6
  3. mybatis-plus 3.5.7
  4. pgsql 14.15

供参考pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tgh</groupId>
    <artifactId>parent-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>parent-demo</name>
    <description>parent-demo</description>
    <modules>
        <module>security-demo</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
    </properties>
    <packaging>pom</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.51</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.tgh.parentdemo.ParentDemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

待逆向的SQL

-- 文档主表
CREATE TABLE t_document_m (
  doc_m_id varchar(32) COLLATE pg_catalog.default NOT NULL,
  doc_m_name varchar(100) COLLATE pg_catalog.default,
  relate_biz_id varchar(32) COLLATE pg_catalog.default,
  create_time timestamp(0),
  create_by_uuid varchar(32) COLLATE pg_catalog.default,
  create_by_account varchar(32) COLLATE pg_catalog.default,
  create_by_name varchar(100) COLLATE pg_catalog.default,
  last_update_time timestamp(0),
  last_update_uuid varchar(32) COLLATE pg_catalog.default,
  last_update_account varchar(32) COLLATE pg_catalog.default,
  last_update_name varchar(100) COLLATE pg_catalog.default,
  CONSTRAINT t_document_m_pkey PRIMARY KEY (doc_m_id)
)
;

COMMENT ON COLUMN t_document_m.doc_m_id IS '文档主表ID';

COMMENT ON COLUMN t_document_m.doc_m_name IS '文档主表名称';

COMMENT ON COLUMN t_document_m.relate_biz_id IS '关联业务ID';

COMMENT ON COLUMN t_document_m.create_time IS '创建时间';

COMMENT ON COLUMN t_document_m.create_by_uuid IS '创建人uuid';

COMMENT ON COLUMN t_document_m.create_by_account IS '创建人账号';

COMMENT ON COLUMN t_document_m.create_by_name IS '创建人名称';

COMMENT ON COLUMN t_document_m.last_update_time IS '最后更新时间';

COMMENT ON COLUMN t_document_m.last_update_uuid IS '最后跟新人uuid';

COMMENT ON COLUMN t_document_m.last_update_account IS '最后更新人账号';

COMMENT ON COLUMN t_document_m.last_update_name IS '最后更新人名称';

COMMENT ON TABLE t_document_m IS '文档主表';

-- 文档明细表
CREATE TABLE t_document_d (
  doc_d_id varchar(32) COLLATE pg_catalog.default NOT NULL,
  doc_m_id varchar(32) COLLATE pg_catalog.default,
  doc_d_name varchar(255) COLLATE pg_catalog.default,
  file_id varchar(32) COLLATE pg_catalog.default,
  file_name varchar(100) COLLATE pg_catalog.default,
  file_suffix varchar(10) COLLATE pg_catalog.default,
  file_size varchar(10) COLLATE pg_catalog.default,
  create_time timestamp(0),
  create_by_uuid varchar(32) COLLATE pg_catalog.default,
  create_by_account varchar(32) COLLATE pg_catalog.default,
  create_by_name varchar(100) COLLATE pg_catalog.default,
  last_update_time timestamp(0),
  last_update_uuid varchar(32) COLLATE pg_catalog.default,
  last_update_account varchar(32) COLLATE pg_catalog.default,
  last_update_name varchar(100) COLLATE pg_catalog.default,
  CONSTRAINT t_document_d_pkey PRIMARY KEY (doc_d_id)
)
;

COMMENT ON COLUMN t_document_d.doc_d_id IS '文档明细ID';

COMMENT ON COLUMN t_document_d.doc_m_id IS '文档主表ID';

COMMENT ON COLUMN t_document_d.doc_d_name IS '文档主表名称';

COMMENT ON COLUMN t_document_d.file_id IS '文件业务ID';

COMMENT ON COLUMN t_document_d.file_name IS '文件名称';

COMMENT ON COLUMN t_document_d.file_suffix IS '文件后缀';

COMMENT ON COLUMN t_document_d.file_size IS '单位kb';

COMMENT ON COLUMN t_document_d.create_time IS '创建时间';

COMMENT ON COLUMN t_document_d.create_by_uuid IS '创建人uuid';

COMMENT ON COLUMN t_document_d.create_by_account IS '创建人账号';

COMMENT ON COLUMN t_document_d.create_by_name IS '创建人名称';

COMMENT ON COLUMN t_document_d.last_update_time IS '最后更新时间';

COMMENT ON COLUMN t_document_d.last_update_uuid IS '最后跟新人uuid';

COMMENT ON COLUMN t_document_d.last_update_account IS '最后更新人账号';

COMMENT ON COLUMN t_document_d.last_update_name IS '最后更新人名称';

COMMENT ON TABLE t_document_d IS '文档明细表';

配置文件

CodeGenerator配置类

参考代码生成器的快速生成

package com.mapper;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.sql.Types;
import java.util.Collections;

/**
 * @author PineTree
 * @description: TODO
 * @date 2025/2/12 22:56
 */
public class CodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:postgresql://192.168.32.155:8848/security-demo", "postgres", "postgres")
                .globalConfig(builder -> {
                    builder.author("PineTree") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir("F:\\Development-files\\Java\\parent-demo\\security-demo\\src\\main\\java"); // 指定输出目录
                })
                .dataSourceConfig(builder ->
                        builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                            int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                            if (typeCode == Types.SMALLINT) {
                                // 自定义类型转换
                                return DbColumnType.INTEGER;
                            }
                            return typeRegistry.getColumnType(metaInfo);
                        })
                )
                .packageConfig(builder ->
                        builder.parent("com.tgh") // 设置父包名
                                .moduleName("securitydemo") // 设置父包模块名
                                .pathInfo(Collections.singletonMap(OutputFile.xml, "F:\\Development-files\\Java\\parent-demo\\security-demo\\src\\main\\resources\\mapper")) // 设置mapperXml生成路径
                )
                .strategyConfig(builder ->
                        builder.addInclude("t_document_d", "t_document_m") // 设置需要生成的表名
                                .addTablePrefix("t_", "c_") // 设置过滤表前缀
                )
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

配置类说明

运行后会在指定的目录和包下生成class和xml文件,一般情况下,只需要修改这六处地方即可,若有进一步需求,后续补充

请添加图片描述
本博客设计到的代码commit记录可参考:
码云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2298738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 系统建模 4.2 YALMIP工具箱 4.3 CPLEX工具箱 5.完整工程文件 1.课题概述 基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真。通过YALMIP和cplex这两个工具箱&#xff0c;完成微电网的最优调…

C++ STL容器之list的使用及复现

list 1. 序列式容器 vector、list、deque、forward_list(C11 )等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。 2. list容器 list 是用双向带哨兵位头节点的循环链表实现的。list 通过类模板…

Windows 找不到文件gpedit.msc,没有组策略编辑器,解决办法附上

windows10和11都通用。是不是有人告诉你家庭版本没有gpedit.msc&#xff0c;没有组策略编辑器&#xff1f;这压根就是某软玩的小把戏。Win10/11家庭版可通过修改文件后缀新建bat脚本&#xff0c;添加组策略包&#xff0c;以管理员身份运行后&#xff0c;输入gpedit.msc即可打开…

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南

基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与Redis集成及故障排查指南 禅道镜像版本&#xff1a;easysoft/zentao:21.4 Redis版本&#xff1a;redis:6.2.0 Mysql版本&#xff1a;mysql:8.0.35 文章目录 **基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与…

AIGC与AICG的区别解析

目录 一、AIGC&#xff08;人工智能生成内容&#xff09; &#xff08;一&#xff09;定义与内涵 &#xff08;二&#xff09;核心技术与应用场景 &#xff08;三&#xff09;优势与挑战 二、AICG&#xff08;计算机图形学中的人工智能&#xff09; &#xff08;一&#x…

基于 openEuler 构建 LVS-DR 群集

一、 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 。 二、 基于 openEuler 构建 LVS-DR 群集。 一 NAT 模式 部署简单&#xff1a;NAT 模式下&#xff0c;所有的服务器节点只需要连接到同一个局域网内&#xff0c;通过负载均衡器进行网络地址转…

深入指南:在IDEA中启用和使用DeepSeek

引言 2025年的春节可以说是人工智能在中国史上飘红的一段历史时刻&#xff0c;年后上班的第一天&#xff0c;便马不停蹄的尝试新技能。今天的科技在飞速发展&#xff0c;编程领域的人工智能工具犹如雨后春笋般涌现。其中&#xff0c;DeepSeek 则以其卓越的性能和智能化的功能&a…

深入剖析 Burp Suite:Web 应用安全测试利器

目录 前言 一、Burp Suite 简介 二、功能组件详解 三、使用场景 四、安装与使用步骤 安装步骤 使用步骤 五、总结 前言 在网络安全的复杂版图中&#xff0c;Burp Suite 宛如一颗璀璨的明珠&#xff0c;以其强大的功能和广泛的适用性&#xff0c;成为众多安全从业者不可…

unity学习37:新版的动画器:动画状态机 Animator

目录 1 给游戏物体添加&#xff0c;新版的动画器 Animator 2 关于 Animator 3 创建 动画器的控制器 Animator Controller 4 打开动画编辑器 Animator 5 动画编辑器 还是Animation 5.1 创建新的动画 5.2 创建第2个动画 5.3 测试2个动画均可用 6 再次打开动画编辑器 A…

LC-搜索二维矩阵II、相交链表、反转链表、回文链表、环形链表、环形链表ll

搜索二维矩阵II 方法&#xff1a;从右上角开始搜索 我们可以从矩阵的右上角开始进行搜索。如果当前元素 matrix[i][j] 等于 target&#xff0c;我们直接返回 true。如果 matrix[i][j] 大于 target&#xff0c;说明 target 只能出现在左边的列&#xff0c;所以我们将列指针向左…

【MySQL在Centos 7环境安装】

文章目录 一. 卸载不必要的环境二. 检查系统安装包三. 卸载这些默认安装包四. 获取mysql官⽅yum源五. 安装mysql yum 源&#xff0c;对⽐前后yum源六. 看看能不能正常⼯作七. 安装mysql服务八. .查看配置⽂件和数据存储位置九. 启动服务并查看服务是否存在十. 登陆⽅法十一. 设…

计算机网络-MPLS基础概念

早期传统IP报文依赖路由器查询路由表转发&#xff0c;但由于硬件技术存在限制导致转发性能低&#xff0c;路由器的查表转发成为了网络数据转发的瓶颈。因此旨在提高路由器转发速度的MPLS&#xff08;Multi-Protocol Label Switching&#xff0c;多协议标签交换&#xff09; 被提…

NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)

循环嵌套 循环嵌套的使⽤ while &#xff0c; do while &#xff0c; for &#xff0c;这三种循环往往会嵌套在⼀起才能更好的解决问题&#xff0c;就是我们所说的&#xff1a;循环嵌套。这三种循环都可以任意嵌套使⽤ ⽐如&#xff1a; 写⼀个代码&#xff0c;打印⼀个乘法⼝…

支持向量机原理

支持向量机&#xff08;简称SVM&#xff09;虽然诞生只有短短的二十多年&#xff0c;但是自一诞生便由于它良好的分类性能席卷了机器学习领域。如果不考虑集成学习的算法&#xff0c;不考虑特定的训练数据集&#xff0c;尤其在分类任务中表现突出。在分类算法中的表现SVM说是排…

LLM - 理解 DeepSeek 的 GPRO (分组相对策略优化) 公式与源码 教程(2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145640762 GPRO&#xff0c;即 Group Relative Policy Optimization&#xff0c;分组相对的策略优化&#xff0c;是 PPO(Proximal Policy Optimiz…

基于springboot 以及vue前后端分离架构的求职招聘系统设计与实现

基于springboot 以及vue前后端分离架构的求职招聘系统设计与实现 随着互联网技术的飞速发展&#xff0c;求职招聘行业也在不断发生变革。传统的求职招聘方式往往存在着信息不对称、效率低下、交易成本高等问题&#xff0c;导致企业的招聘成本增加&#xff0c;求职者的体验下降…

Spring Boot整合协同过滤算法,实现个性化推荐

1. 引言 在这篇文章中&#xff0c;我们将展示如何使用 Spring Boot 框架与 协同过滤算法 相结合来构建一个简单的推荐系统。推荐系统广泛应用于电商、电影推荐、社交平台等领域。协同过滤算法通过分析用户行为&#xff0c;找出相似的用户或者物品&#xff0c;从而实现个性化推荐…

自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 自己…

光谱相机在天文学领域的应用

天体成分分析 恒星成分研究&#xff1a;恒星的光谱包含了其大气中各种元素的吸收和发射线特征。通过光谱相机精确测量这些谱线&#xff0c;天文学家能确定恒星大气中氢、氦、碳、氮、氧等元素的含量。如对太阳的光谱分析发现&#xff0c;太阳大气中氢元素占比约 71%&#xff0…

深度卷积神经网络实战海洋动物图像识别

本文采用深度卷积神经网络作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的特征提取能力&#xff0c;在多个图像分类任务中展现出卓越性能。本研究针对5种海洋动物数据集进行训练和优化&#xff0c;该数据集包含丰富的海…