java通过反射获取表名以及表的全部字段

news2024/9/25 12:02:02

目录

    • 前言
    • 获取表名
    • 获取表字段
    • 获取表字段并且以object类返回

前言

市面上找了一下能够获取表名和表字段的方法,最后结果不是很理想,于是自己写一套

获取表名

    //获取表名
    public static String getTableName(Object object) {
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            // 获取表名
            TableName table = object.getClass().getAnnotation(TableName.class);
            if (table != null) {
                return table.value();
            }
        }
        return null;
    }

测试:

 System.out.println(getTableName(new Model()));

在这里插入图片描述
注意点:这里需要用到mybatisPlus的依赖,并且需要在类上加上@TableName(“ms_model”)的注解

获取表字段

      /**
     * 获取表的所有表字段
     * @return
     */
    public static List<String> getStringFieldList(Object obj) {
        Field[] fields = obj.getClass().getDeclaredFields();
        List<String> list = new ArrayList<>();
        for (Field field : fields) {
            //设置是否允许访问,不是修改原来的访问权限修饰词。
//            field.setAccessible(true);
            //获取字段名,和字段的值
            String fieldName = field.getName();
           list.add(fieldName);
        }
        return list;
    }

测试:

 List<String> stringFieldList = getStringFieldList(new Model());
        System.out.println(stringFieldList);

结果:
在这里插入图片描述

这边需要注意的是如果实体类里有这个序列UID的话,在输出的时候这个也会变成一个字段
在这里插入图片描述

获取表字段并且以object类返回

最后加一个以obj类型返回的方法,这样既可以获取数据库字段又可以返回实体类字段了

 /**
     * 获取表的所有表字段
     * @param obj 对象
     * @return
     */
    public static Object getObjectField(Object obj) {
        Field[] fields = obj.getClass().getDeclaredFields();
        Map<String, Object> map = new HashMap<>();
        for (Field field : fields) {
            //设置是否允许访问,不是修改原来的访问权限修饰词。
            field.setAccessible(true);
            //获取字段名,和字段的值
            String fieldName = field.getName();
            map.put(fieldName, underlineByHump(fieldName));
        }
        //再将map转为Obj类
        return JSON.parseObject(JSON.toJSONString(map), Object.class);
  public static Pattern compile = Pattern.compile("[A-Z]");



    /**
     * @author Howe
     * @Description 将驼峰转为下划线,正则式
     * @param str  例如:helloWord
     * @return java.lang.String
     * underline:下划线,驼峰:hump
     */
    public static String underlineByHump(String str) {
        Matcher matcher = compile.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

测试:

Object objectField = getObjectField(new Model());
        System.out.println(objectField);

在这里插入图片描述
在代码中转化成需要的实体类

ModelVo field = new ObjectMapper().convertValue(TableUtil.getObjectField(new ModelVo()), ModelVo.class);

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

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

相关文章

python_蓝桥杯刷题记录_笔记_全AC代码_入门2

前言 现在正式进入蓝桥杯的刷题啦&#xff0c;用python来做算法题&#xff0c;因为我之前其实都是用C来做题的&#xff0c;但是今年的话我打算换python来试试&#xff0c;很明显因为也才这学期接触python 加上之前C做题也比较菜&#xff0c;所以我打算用python重新来做题&#…

Navicat的使用教程,操作详解

这篇文章主要针对mysql数据库。 在使用Navicat之前&#xff0c;首先要确保你在本地已经安装好了&#xff0c;mysql数据库&#xff0c;安装教程可以参考我的另一篇博文 在windows平台上mysql的安装教程-CSDN博客 1.Navicat连接你的数据库 连接名&#xff0c;随便写&#xff0c…

TCP/IP详细介绍以及TCP/IP寻址

目录 ​编辑 1. TCP/IP 介绍 2. 计算机通信协议&#xff08;Computer Communication Protocol&#xff09; 3. 什么是 TCP/IP&#xff1f; 4. 在 TCP/IP 内部 5. TCP 使用固定的连接 6. IP 是无连接的 7. IP 路由器 8. TCP/IP 9. TCP/IP 寻址 10. IP地址 …

Linux下新建用户

新建用户 sudo adduser -m username添加密码 sudo passwd username设置权限 sudo vi /etc/sudoers在user privilege这一行&#xff0c;仿照root&#xff0c;另起一行&#xff0c;添加上 设置命令解释器 sudo vi /etc/passwd找到新建用户名&#xff0c;将sh改为bash vi中…

在Linux中如何理解页表和进程地址

1、进程地址是进程读取资源的窗口 2、页表决定了进程真实拥有的资源情况 3、合理的对进程地址空间页表进行资源划分&#xff0c;就可以对进程的资源进行分类 这个过程应该如何去理解呢请看下面的图 我们知道程序被加载到进程中&#xff0c;会产生相应的PCB&#xff0c;并且…

react 之 useCallback

简单讲述下useCallback的使用方法&#xff0c;useCallback也是用来缓存的&#xff0c;只不过是用于做函数缓存 // useCallbackimport { memo, useCallback, useState } from "react"const Input memo(function Input ({ onChange }) {console.log(子组件重新渲染了…

python_蓝桥杯刷题记录_笔记_全AC代码_入门4

题单目录 1.P1914 小书童——凯撒密码 2.P1028 [NOIP2001 普及组] 数的计算 3.P1036 [NOIP2002 普及组] 选数 4.P1149 [NOIP2008 提高组] 火柴棒等式 5.P1217 [USACO1.5] 回文质数 Prime Palindromes 6.P1478 陶陶摘苹果&#xff08;升级版&#xff09; 7.P1618 三连击&…

第二代视频换脸工具facefusion

GitHub - facefusion/facefusion: Next generation face swapper and enhancer官方地址 1.环境安装 Windows - FaceFusion Windows Python winget install -e --id Python.Python.3.10 PIP python -m ensurepip --upgrade GIT winget install -e --id Git.Git

【Go语言成长之路】安装Go

文章目录 安装Go一、下载Go语言安装包二、删除以前安装的Go版本三、添加/usr/local/go/bin到环境变量内四、确认安装成功 安装Go Note: 这里只演示安装Linux版本的Go&#xff0c;若为其它版本&#xff0c;请按照官网的安装教程进行安装即可。 一、下载Go语言安装包 ​ 在浏览…

1Panel应用推荐:青龙定时任务管理平台

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

STM32--USART串口(1)串口协议

一、通信接口 全双工&#xff1a;通信双方能够同时进行双向通信&#xff1b; 半双工&#xff1a;通信双方能够进行双向通信&#xff0c;但不能同时通信&#xff1b; 单工&#xff1a;只能从一个设备到另一个设备&#xff1b; 同步&#xff1a;接收方可以在时钟信号的指引下进…

银行数据仓库体系实践(8)--主数据模型设计

主数据区域中保留了数据仓库的所有基础数据及历史数据&#xff0c;是数据仓库中最重要的数据区域之一&#xff0c;那主数据区域中主要分为近源模型区和整合&#xff08;主题&#xff09;模型区。上一节讲到了模型的设计流程如下图所示。那近源模型层的设计在第2.3和3这两个步骤…

市场分析:共享wifi项目怎么样?

共享WiFi项目怎么样&#xff1f;这是很多人都想知道的问题。随着移动互联网的快速发展&#xff0c;WiFi已经成为人们生活中必不可少的一部分。而共享WiFi项目则通过为用户带来了更加便捷、快速的上网体验。那么&#xff0c;共享WiFi项目到底怎么样呢&#xff1f; 人们对网络的需…

Linux软件编程以及IO输入输出——linux——day1

Linux软件编程以及其IO输入输出 Linux软件编程 linux是操作系统的内核 主要有以下几个功能&#xff1a; ①管理CPU ②管理内存 ③管理硬件设备 ④管理文件系统 ⑤任务调度 shell指令 shell命令主要保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互…

mermaid使用指南+notion使用实例-持续更新中

最近一个月了吧&#xff0c;发现Notion插入图片的功能坏了&#xff0c;直接paste会404&#xff0c;本地上传也不行。电脑本地版和手机端都插不了图片&#xff0c;很头疼。解决方法也简单&#xff0c;用图床&#xff0c;放链接。 付费版我用的七牛&#xff0c;结合PicGo&#x…

使用ngrok内网穿透

没有服务器和公网IP&#xff0c;想要其他人访问自己做好的网站&#xff0c;使用这款简单免费的内网穿透小工具——ngrok&#xff0c;有了它轻松让别人访问你的项目~ 一、下载ngrok 官网地址&#xff1a;ngrok | Unified Application Delivery Platform for Developers&#x…

React18构建Vite+Electron项目以及打包

一.先创建项目 cnpm create vite 选择React > JavaScript >cd react_vite > cnpm i >npm run dev 二.安装Electron依赖 指定版本相对稳定 cnpm i electron19.0.10 -D cnpm i vite-plugin-electron0.9.3 -D cnpm i electron-builder23.0.1 -D三.创建electron目录…

gRPC使用详解

起源特点主要优缺点应用场景组成部分使用方法SpringBoot集成gRPCVert.x集成gRPCNacos集成gRPC监控gRPC调用过程Java使用示例 起源 gRPC的起源可以追溯到2015年&#xff0c;当时谷歌发布了一款开源RPC框架&#xff0c;名为gRPC。gRPC的设计初衷是为了提供一种标准化、可通用和跨…

Java基于 SpringBoot+Vue 的前后端分离的小区物业系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

车载测试Vector工具——基于DoIP的ECU/车辆的连接故障排除

车载测试Vector工具——基于DoIP的ECU/车辆的连接故障排除 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…