仿Mybatis代码生成.获取索引信息

获取索引信息

1.核心思路

通过以下sql语句,例如对于user表

show index from user

执行结果如下:


2.实现

 连接数据库后执行sql语句,我们重点关注下图标注的三个熟悉

代码如下:

 PreparedStatement ps = null;ResultSet fieldResult = null;List<FieldInfo> fieldInfoList = new ArrayList<>();try {ps = conn.prepareStatement(String.format(SQL_SHOW_FIELDS_INDEX, tableInfo.getTableName()));fieldResult = ps.executeQuery();while (fieldResult.next()) {String key_name = fieldResult.getString("Key_name");String column_name = fieldResult.getString("Column_name");int non_unique = fieldResult.getInt("Non_unique");
}
}

如果unique属性为1,表示该索引不是唯一索引,我们更在意唯一索引,所以该字段跳过

  if(non_unique==1){continue;}

之后,我们从tableinfo中拿到存储索引名称与对应的字段信息列表fieldinfos的map,根据索引名称获取列表,如果列表不存在,创建列表,然后将column名称所对应的字段信息对象fieldinfo存到列表中去

 List<FieldInfo> fieldInfos = tableInfo.getKeyIndexMap().get(key_name);if(null==fieldInfos){fieldInfos = new ArrayList<>();tableInfo.getKeyIndexMap().put(key_name,fieldInfos);}for (FieldInfo fieldInfo : tableInfo.getFieldList()) {if(fieldInfo.getFieldName().equals(column_name)){fieldInfos.add(fieldInfo);}}

 获取索引信息函数的完整代码如下:

 /*** 获取表唯一索引信息* @author nangong* @dateTime 2024/11/21 14:33* @param tableInfo*/private static void getKeyIndexInfo(TableInfo tableInfo) {PreparedStatement ps = null;ResultSet fieldResult = null;List<FieldInfo> fieldInfoList = new ArrayList<>();try {ps = conn.prepareStatement(String.format(SQL_SHOW_FIELDS_INDEX, tableInfo.getTableName()));fieldResult = ps.executeQuery();while (fieldResult.next()) {String key_name = fieldResult.getString("Key_name");String column_name = fieldResult.getString("Column_name");int non_unique = fieldResult.getInt("Non_unique");if(non_unique==1){continue;}List<FieldInfo> fieldInfos = tableInfo.getKeyIndexMap().get(key_name);if(null==fieldInfos){fieldInfos = new ArrayList<>();tableInfo.getKeyIndexMap().put(key_name,fieldInfos);}for (FieldInfo fieldInfo : tableInfo.getFieldList()) {if(fieldInfo.getFieldName().equals(column_name)){fieldInfos.add(fieldInfo);}}}} catch (Exception e) {logger.error("读取索引失败", e);} finally {if (fieldResult != null) {try {fieldResult.close();} catch (SQLException e) {e.printStackTrace();}}if (ps != null) {try {ps.close();} catch (SQLException e) {e.printStackTrace();}}}}

然后在设置tableinfo熟悉那里调用该函数即可 

致此,获取表的所有信息就完成了,之后就是针对表的信息生成po类,三层架构中的各种方法等等

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

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

相关文章

【AI大模型】大型语言模型LLM基础概览:技术原理、发展历程与未来展望

目录 &#x1f354; 大语言模型 (LLM) 背景 &#x1f354; 语言模型 (Language Model, LM) 2.1 基于规则和统计的语言模型&#xff08;N-gram&#xff09; 2.2 神经网络语言模型 2.3 基于Transformer的预训练语言模型 2.4 大语言模型 &#x1f354; 语言模型的评估指标 …

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序&#xff08;InsertSort&#xff09;1.1 核心思路1.2 实现代码 2.选择排序&#xff08;SelectSort&#xff09;2.1 核心思路2.2 实现代码 3.冒泡排序&#xff08;BubbleSort&#xff09;3.1 核心思路3.2 实现代码 4.希尔排序&#xff08;ShellSort&…

如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online

简介 LibreOffice Online&#xff08;也称为Collabora Online&#xff09;是一个开源的在线办公套件&#xff0c;它提供了与LibreOffice桌面版相似的功能&#xff0c;但完全在云端运行。这意味着用户可以通过浏览器访问和编辑文档&#xff0c;而无需在本地计算机上安装任何软件…

【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南

文章目录 PyTorch 全面解析2.1 PyTorch 的发展历程2.2 PyTorch 的核心特点2.3 PyTorch 的应用场景 TensorFlow 全面解析3.1 TensorFlow 的发展历程3.2 TensorFlow 的核心特点3.3 TensorFlow 的应用场景 Keras 全面解析4.1 Keras 的发展历程4.2 Keras 的核心特点4.3 Keras 的应用…

C++详细笔记(六)string库

1.介绍STL库 C STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是 C 标准库的一部分&#xff0c;它提供了一系列通用的模板类和函数&#xff0c;大大方便了 C 程序员的开发工作 优点 代码复用性高&#xff1a;可以直接使用 STL 中的容器、算法…

macOS 无法安装第三方app,启用任何来源的方法

升级新版本 MacOS 后&#xff0c;安装下载的软件时&#xff0c;不能在 ”安全性与隐私” 中找不到 ”任何来源” 选项。 1. 允许展示任何来源 点击 启动器 (Launchpad) – 其他 (Other) – 终端 (Terminal)&#xff1a; 打开终端后&#xff0c;输入以下代码回车&#xff1a; …

笔记记录 k8s操作

docker下载arm架构的镜像 docker pull centos --platform arm64 其中华为鲲鹏、飞腾CPU采用的是ARM架构,龙芯采用的是MIPS架构,而兆芯、海光CPU采用的是X86架构,申威采用的是Alpha架构 docker查看容器的日志文件目录 docker inspect --format={{.LogPath}} containername…

Flutter实现气泡提示框学习

前置知识点学习 GlobalKey GlobalKey 是 Flutter 中一个非常重要的概念&#xff0c;它用于唯一标识 widget 树中的特定 widget&#xff0c;并提供对该 widget 的访问。这在需要跨越 widget 树边界进行交互或在 widget 树重建时保持状态时尤其有用。 GlobalKey 的作用 唯一标…

hadoop3.x 新特性

hadoop3.x 新特性 FeaturesHadoop 2.xHadoop 3.xMinimum Required Java VersionJDK 6 and above.JDK 8 is the minimum runtime version of JAVA required to run Hadoop 3.x as many dependency library files have been used from JDK 8.Fault ToleranceFault Tolerance is …

系统性能优化方法论详解:从理解系统到验证迭代

在当今的企业级和云计算环境中&#xff0c;系统性能优化已成为提升竞争力的关键因素。本文将对系统优化的步骤进行深入解析&#xff0c;帮助读者系统化地进行性能优化&#xff0c;从而显著提升系统的整体表现。 流程概述: 系统性能优化的流程可以分为以下几个关键步骤&#x…

国内docker pull拉取镜像的解决方法

访问网站&#xff0c;查找该网站上可用的镜像源&#xff0c;然后替换掉下面代码中的hub-mirror.c.163.com&#xff1a; docker pull hub-mirror.c.163.com/library/nginx:latest 另外&#xff0c;进入到镜像之后&#xff0c;可以使用下面的命令查看操作系统版本。 lsb_releas…

Flutter:RotationTransition旋转动画

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationController late AnimationController _controller;overridevoid initState() {super…

同步的意义以及机制

一、同步的意义 同步&#xff08;Synchronization&#xff09;的意义在于确保在多线程环境中&#xff0c;多个线程对共享资源的访问是安全的&#xff0c;避免竞争条件&#xff08;race conditions&#xff09;和数据不一致的情况。 具体来说&#xff0c;同步的核心目标是&…

第二十四章 Spring之源码阅读——AOP篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

每日一题&移动语义

每日一题 无重复字符的最长子串 class Solution { public:int lengthOfLongestSubstring(string s) {/*利用set的特性&#xff0c;set中不能有重复的元素&#xff0c;所以可以用set来判断是否有重复的元素然后用两个指针i和j来表示子串的左右边界&#xff0c;然后用ans来记录…

量化加速知识点(整理中。。。)

量化的基本概念 通过减少模型中计算精度&#xff0c;从而减少模型计算所需要的访存量。 参考

C++语言之STL

STL STL是标准模板库,是惠普实验室开发的一系列软件的统称 STL的6大组件 容器 算法 迭代器 仿函数 适配器 空间适配器 容器 作用:容纳存储的数据 分类: 序列式容器: 强调值的顺序,每个元素均有固定的位置,除非用删除或插入的操作改变这个位置,如vector,deque/queue,list; 关联式…

嵌入式实验报告:家用计时器

实验目的和要求 1、实验目的 掌握STM32串口通信原理。学习编程实现STM32的UART通信掌握STM32中断程序设计流程。熟悉STM32固件库的基本使用。熟悉STM32定时器中断设计流程。2、实验要求 设计一个家用计时器,其功能如下: 利用串口设置计时时间,格式:XX:XX:X 例如01:59:…

阿里巴巴官方「SpringCloudAlibaba全彩学习手册」限时开源!

最近我在知乎上看过的一个热门回答&#xff1a; 初级 Java 开发面临的最大瓶颈在于&#xff0c;脱离不出自身业务带来的局限。日常工作中大部分时间在增删改查、写写接口、改改 bug&#xff0c;久而久之就会发现&#xff0c;自己的技术水平跟刚工作时相比没什么进步。 所以我们…

理解 Python 中的 self 它的作用与在类中的应用

理解 Python 中的 self: 它的作用与在类中的应用 在 Python 中&#xff0c;self 是一个约定俗成的关键字&#xff0c;用于指代类的当前实例。它是实例方法中的第一个参数&#xff0c;通过 self 可以访问类的属性和其他方法。虽然这个词不是 Python 语法的强制部分&#xff0c;…