若依代码生成器------数据库篇

news2025/1/19 17:17:18

继上一篇《若依代码自动生成器研究-表查询篇》,我们继续来学习若依系统中的代码生成逻辑。

导入表之Sql查询 

在菜单栏点击“代码生成”,在右侧栏中点击“导入”按钮,在文章若依中的代码自动生成器研究-表查询篇中,我们已经一直到若依是通过查询数据库的information_schema.tables从而查询到数据库的所有表。

我们下一步的操作是,“勾选my_user表,点击确定”。操作路径示意图以及通过F12调试,查看接口请求,如下图所示。

所请求的接口是/tool/gen/importTable,我们通过idea检索后台接口,发现其位于ruoyi-generator/com.ruoyi.generator/controller/GenController下,如下图: 

Controller中的代码源码如下:(我们通过调试,补充上各个值的获取数据)

/**
     * 导入表结构(保存)
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:import')")
    @Log(title = "代码生成", businessType = BusinessType.IMPORT)
    @PostMapping("/importTable")
    public AjaxResult importTableSave(String tables)
    {
        // 通过调试,字符串tables格式为:"my_user,table_name_1,table_name_2...."
        String[] tableNames = Convert.toStrArray(tables);
        // tableNames: ["my_user", "table_name_1", "table_name_2"]
        // 查询表信息
        List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
        // 见下图
        genTableService.importGenTable(tableList);
        return AjaxResult.success();
    }

 

我们来研究一下其中查询表的那句sql,通过在xml中搜索,其执行sql为:

SELECT
	table_name,
	table_comment,
	create_time,
	update_time
FROM
	information_schema. TABLES
WHERE
	table_name NOT LIKE 'qrtz_%'
AND table_name NOT LIKE 'gen_%'
AND table_schema = (SELECT DATABASE())
AND table_name IN ('my_user')

 通过这个查询将my_user表的基本信息查询出来。

那么genTableService.importGenTable(tableList);这一句又执行了哪些操作呢?我们继续来看。

导入表之导入 

同过定位importGenTable,我们查询到他的执行方法,我们补充上调试过程中的参数值

/**
     * 导入表结构
     * 
     * @param tableList 导入表列表
     */
    @Override
    @Transactional
    public void importGenTable(List<GenTable> tableList)
    {
        // tableList: [{my_user表的信息}]
        // admin
        String operName = SecurityUtils.getUsername();
        try
        {
            for (GenTable table : tableList)
            {
                String tableName = table.getTableName(); // tableName: my_user
                GenUtils.initTable(table, operName);
                int row = genTableMapper.insertGenTable(table);
                if (row > 0)
                {
                    // 保存列信息
                    List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
                    for (GenTableColumn column : genTableColumns)
                    {
                        GenUtils.initColumnField(column, table);
                        genTableColumnMapper.insertGenTableColumn(column);
                    }
                }
            }
        }
        catch (Exception e)
        {
            throw new ServiceException("导入失败:" + e.getMessage());
        }
    }

 其中有一个关键的数据结构:GenTable,它位于Domain中,对应数据库中的表 gen_table,字段截图如下所示:

类似的,另外一个表gen_table_column以及其对应的domain域类为GenTableColumn,保存生成数据库表的列信息,其字段结构如下截图:该表通过字段table_id与表gen_table中的某一行关联上。 

那么查询数据库表的列用的什么sql呢?

通过检查,在xml中检索到sql为:

SELECT
	column_name,
	(
		CASE
		WHEN (
			is_nullable = 'no' && column_key != 'PRI'
		) THEN
			'1'
		ELSE
			NULL
		END
	) AS is_required,
	(
		CASE
		WHEN column_key = 'PRI' THEN
			'1'
		ELSE
			'0'
		END
	) AS is_pk,
	ordinal_position AS sort,
	column_comment,
	(
		CASE
		WHEN extra = 'auto_increment' THEN
			'1'
		ELSE
			'0'
		END
	) AS is_increment,
	column_type
FROM
	information_schema. COLUMNS
WHERE
	table_schema = (SELECT DATABASE())
AND table_name = 'my_user'
	ORDER BY
		ordinal_position

 是通过查询information_schema. COLUMNS并约束 table_name 以及数据库来查询指定表my_user的所有列。

总结 

通过导入操作,将my_user转换为了gen_tablegen_table_column中的几行数据,以便后续代码的生成。

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

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

相关文章

三十六、Kubernetes1.25中数据存储第一篇

1、概述在前面已经提到&#xff0c;容器的生命周期可能很短&#xff0c;会被频繁地创建和销毁。那么容器在销毁时&#xff0c;保存在容器中的数据也会被清除。这种结果对用户来说&#xff0c;在某些情况下是不乐意看到的。为了持久化保存容器的数据&#xff0c;kubernetes引入了…

【深度学习】对SSD与Retina的理解

SSD 正负样本选择 同YOLO 选择与GT IOU最大的anchor作为正样本。(此时正负样本很不平衡)对于剩余未匹配anchor,将与GT IOU超过0.5的作为正样本。这样一个GT就可以匹配多个anchor,增加正样本的数量。(此时负样本依然多于正样本)hard negative mining,难负样本挖掘。将所有…

重定向的概述和使用(基于web方面),很简单

大家好&#xff0c;今天分享一下重定向的概述以及使用 我们要知道&#xff0c;重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置 同时&#xff0c;重定向有好几类 1.网页重定向、 2.域名的重定向、 3.路由选择 4. Linux上的文件重定向操作 就是要知…

QTransform的使用

目录引言基础知识缩放矩阵平移矩阵旋转矩阵矩阵乘法实际使用实现思路完整代码参考资料引言 A transformation specifies how to translate, scale, shear, rotate or project the coordinate system, and is typically used when rendering graphics. A QTransform object can …

6 -【Faster R-CNN 代码精读】之 Proposals 、 Filter Proposals

6 -【Faster R-CNN 代码精读】之 Proposals 、 Filter Proposals1、前言2、数据回顾3、计算候选框位置&#xff08;proposal coordinates&#xff09;4、筛选候选框&#xff08;filter proposals&#xff09;及相关处理1&#xff09;筛选出 预测概率 排前 2000 的proposals2&am…

TCP协议面试灵魂12 问(四)

005: 介绍一下 TCP 报文头部的字段 报文头部结构如下(单位为字节): 请大家牢记这张图&#xff01; 源端口、目标端口 如何标识唯一标识一个连接&#xff1f;答案是 TCP 连接的四元组——源 IP、源端口、目标 IP 和目标端口。 那 TCP 报文怎么没有源 IP 和目标 IP 呢&#x…

2021年下半年信息系统项目管理师《综合知识》《案例分析》《论文》真题与答案

1、“十四五”期间&#xff0c;我国关注推动政务信息化共建共用、推动构建网络空间命运共同体&#xff0c;属于()的建设内容.A、科技中国 B、数字中国 C、制造强国 D、创新强国0参考答案&#xff1a;B2、()关注的是业务&#xff0c;以业务驱动技术&#xff0c;强调IT与业务的对…

零基础学FPGA(八):可编程逻辑单元(基本结构,Xilinx+Altera)

目录日常唠嗑一、概述二、基于多路选择器的逻辑单元1、基于多路选择器的逻辑单元&#xff08;早期&#xff09;2、基于PLD结构的逻辑单元&#xff08;类CPLD&#xff09;3、基于查询表的逻辑单元&#xff08;目前主流&#xff09;三、Xilinx基本结构四、Altera 基本结构日常唠嗑…

Java语言还能火多久? 还能选择Java开发吗?

​​整个互联网行业“不进则退&#xff0c;慢进亦退”。对于用人要求持续增高的互联网企业来说&#xff0c;中高级Java程序员才是当下市场最紧缺的。 现在的你&#xff0c;是十年前你的决定&#xff0c;十年后的你&#xff0c;是现在你的决定。选择很重要 为什么选择Java开发…

代码随想录算法训练营第六十天_第九章_动态规划 | 647. 回文子串、516.最长回文子序列、动态规划总结篇

LeetCode 647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 视频讲解https://www.bilibili.com/video/BV17G4y1y7z9/?spm_i…

Linux 进程知识总结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Linux操作…

高阶数据结构之哈希的应用

文章目录位图&#xff08;bitMap&#xff09;位图的实现将数据添加到位图中检查数据是否在位图中存在将数据的对应位置置为0位图的应用布隆过滤器为什么会有误差布隆过滤器的实现布隆过滤器的删除使用Google下的guava组件操作布隆过滤器布隆过滤器的缺陷布隆过滤器的使用场景海…

分享69个ASP源码,总有一款适合您

分享69个ASP源码&#xff0c;总有一款适合您 69个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1XXwBL0Y0nOSel9xJVqz0Ow?pwdertw 提取码&#xff1a;ertw Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj base_url "https://d…

关于JavaScript编译原理以及作用域的深入探讨

前言 几乎所有编程语言最基本的功能之一&#xff0c;就是能够储存变量当中的值&#xff0c;并且能在之后对这个值进行访问或修改。事实上&#xff0c;正是这种储存和访问变量的值的能力将状态带给了程序。 若没有了状态这个概念&#xff0c;程序虽然也能够执行一些简单的任务…

高码率QPSK调制解调方案(2.1 QPSK调制)

2 全数字高码率QPSK调制解调软件设计 2.1 QPSK调制 2.1.1 QPSK调制原理 QPSK调制即正交相移键控信号,其信号表达式为 (1) 其中,和分别表示每比特的能量和持续

​LabView​动态改变显示文本框的属性(颜色、字体)

目录 问题&#xff1a; 解决方式 1、在程序框图面板上&#xff0c;选择显示文本框&#xff0c;右键创建属性节点 2、选择属性节点为数值文本&#xff0c;依据需要改变的类型选择文本颜色或字体 3、依据下位机上传的数值大小&#xff0c;选择-条件结构类型&#xff0c;依据…

03俯瞰全局:gRPC是如何进行通信的

gRPC作为Web网站和APP后端的最常用服务提供方式之一和分布式微服务架构不同节点间的最常见通信方式之一,它自身是如何进行通信的呢,这个问题就是我们本篇文章将要研究的重点,先从全局的角度分析gRPC服务端和客户端进行通信的主要流程,再从细节剖析gRPC是如何进行高效的远程…

Qt QVector “isDetached()“

文章目录摘要尝试通过加锁解决lock&unlockQMutexLockertry_lock改变量属性Q_ASSERT参考关键字&#xff1a; ASSERT、 isDetached、 崩溃、 QVector、 Detach摘要 今天在公司填坑的时候&#xff0c;有随机获得了一个新的BUG&#xff0c;就是一直报ASSERT&#xff1a;”isD…

剑指 Offer 35. 复杂链表的复制

题目 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 思路 方法一&#xff1a;哈希表 利用哈希表的查询特点&#xff…

【Linux】项目自动化构建工具-make/Makefile与Linux调试器-gdb使用

文章目录Linux项目自动化构建工具-make/MakefileLinux调试器-gdb使用Linux项目自动化构建工具-make/Makefile 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录…