当前位置: 首页 > news >正文

Mybatis中好用的元对象反射工具类 - MetaObject

一、前言

在获取map对象或者是其他深层嵌套对象,如果你的做法是挨个取出判空然后继续再向下查找,那么可以看看本文的方案,它或许能让你打开新的思路。

作为一名java开发人员,Mybatis几乎是我们无法避开的ORM框架,如果你在开发中使用的ORM框架是Mybatis,那么深层嵌套对象的获取你可以换个写法了。本文所使用的工具是Mybatis提供

二、使用

Mybatis中提供了一个MetaObject类,该类是Mybatis实现的元对象反射工具类
,他可以通过反射将对象属性填充。

/*** @author : 卡诺来了* @Date 2024/8/13*/
public class MetaObjectTools {@Getter@Setter@Accessors(chain = true)@ToStringpublic static class User {private String id;private String name;}public static void main(String[] args) {// 初始化map对象(其他深层次的嵌套对象也成,此处拿map举例)Map<String, Object> map = new HashMap<>();map.put("user", new User().setId("1"));map.put("users", Arrays.asList(new User().setId("1"), new User().setId("2").setName("卡诺来了2")));// 构建元对象MetaObject metaObject = SystemMetaObject.forObject(map);// 通过元对象获取数据// ===== 普通对象=======// 获取user的nameObject value = metaObject.getValue("user.name");System.out.println(value); // 不存在输出:null// 设置user的namemetaObject.setValue("user.name", "卡诺来了");value = metaObject.getValue("user");System.out.println(value);// MetaObjectTools.User(id=1, name=卡诺来了)// ====== 数组类型======// 获取users的第二个对象的namevalue = metaObject.getValue("users[1].name");System.out.println(value); // 卡诺来了2// 更新users的第一个对象的namemetaObject.setValue("users[0].name", "卡诺来了1");value = metaObject.getValue("users");System.out.println(value); // [MetaObjectTools.User(id=1, name=卡诺来了1), MetaObjectTools.User(id=2, name=卡诺来了2)]}
}

相关文章:

Mybatis中好用的元对象反射工具类 - MetaObject

一、前言 在获取map对象或者是其他深层嵌套对象&#xff0c;如果你的做法是挨个取出判空然后继续再向下查找&#xff0c;那么可以看看本文的方案&#xff0c;它或许能让你打开新的思路。 作为一名java开发人员&#xff0c;Mybatis几乎是我们无法避开的ORM框架&#xff0c;如果你…...

javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域

文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理&#xff1a;添加以下http响应头2.3. 四种跨域实现方式及优先级&#xff08;从高到低&#xff09; 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3…...

深入理解JavaScript性能优化:从基础到高级

引言 在当今快速发展的Web世界中,性能已经成为衡量应用质量的关键指标。随着Web应用复杂度的不断提升,JavaScript作为前端开发的核心语言,其性能优化变得尤为重要。本文旨在全面深入地探讨JavaScript性能优化的各个方面,从基础概念到高级技巧,帮助开发者构建高效、流畅的Web应用…...

java+springboot实现定时任务

由于是初级程序员&#xff0c;基于注解的形式实现了一个简单的定时任务&#xff1b; 1. 使用Scheduled注解 Spring的Scheduled注解是一种非常简单和便捷的实现定时任务的方式。通过在方法上添加Scheduled注解&#xff0c;我们可以指定方法在特定的时间间隔或固定的时间点执行…...

1.3 数据库的发展历史与演变

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

The field file exceeds its maximum permitted size of 1048576 bytes

场景: 再系统后台上传解析对账文件时大小超过1M就会报错 分析: 排查错误时了解MultipartFile默认上传大小就是1M,但是发现项目配置文件配置了上传大小100M,但是这个大小没有生效 因为项目启动并没有使用到这个配置大小并把他应用到file配置里面,经过测试发现只需要增加配置…...

【Es】python es操作

表 因为es是集群所以es_hosts是列表 from elasticsearch import Elasticsearch ES_HOSTS ["127.0.0.1:9200"] ES_HTTP_AUTH "******************"# 连接Es es Elasticsearch(hostsES_HOSTS ,http_authES_HTTP_AUTH ,maxsize60,timeout30,max_retries3…...

吃透前端文件上传与文件相关操作 多文件上传 大文件切片上传 拖拽上传 后续还会更新 断点续传等等

最近在学文件上传的操作,所以想把学习到东西写成一文章 这片文章是我以小白视角 慢慢学习并熟悉前端文件相关操作的流程总结出来的 前端文件上传 我首先想到是 <input type"file">**选择文件**</input>如果我们想限制上传文件的格式,大小或进行裁剪分片…...

用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)

用python制作88键赛博钢琴 前言 恭喜这位博主终于想起了自己的账号密码&#xff01; 时光荏苒&#xff0c;转眼间已逾一年未曾在此留下墨香。尽管这一年间&#xff0c;博主投身于无尽的忙碌与挑战之中&#xff0c;但令人欣慰的是&#xff0c;那份初心与热情似乎并未因岁月的流…...

zdpgo_gin_login 框架20240815更新,增加注册路由的功能,一个方法自动拥有注册和登录两个API接口

zdpgo_gin_login 适配gin框架的登录注册功能组件&#xff0c;通过本框架轻松拥有登录注册相关的API接口 特性&#xff1a; 自动生成注册接口&#xff0c;具备密码加密的功能自动生成登录接口&#xff0c;具备JWT Token生成的功能 安装 go get github.com/zhangdapeng520/z…...

搭配Intel第13代酷睿处理器

高性能内存硬盘这么买 intel第13代酷睿已经于2022年10月底正式上市。相比于第12代酷睿性能大涨,内置20条PCle通道(16条PCle 5.0和4条PCle 4.0)、可最多支持128GB DDR5 5600/DDR4 3200双通道内存,搭配Z790系列主板组建高端性能平台,满足未来设计、游戏、专业应用等需求。如…...

uniapp快速回顾,新学websocket连接和BLE连接

Uni APP的学习 官方文档 uni-app官网 (dcloud.net.cn) 任何的博客都不如官方文档 一、快速复习 文件结构 main.js 功能&#xff1a;项目的入口文件&#xff0c;初始化 Vue 实例。 App.vue功能&#xff1a;根组件&#xff0c;包含应用的基本结构和全局样式。 manifest.js…...

激光测距传感器

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、产品原理&#xff1a;二、产品介绍&#xff1a;三、应用特点四、应用案例&#xff1a;1.冶金钢铁板卷材开卷工…...

从数据分析到智能生产:AI在工业中的应用与未来

导语 | 人工智能技术的迅猛发展&#xff0c;正在引领第四次工业革命悄然而至。尽管 AI 技术在工业领域的部署仍有诸多难题亟待解决&#xff0c;但这并不能阻挡历史趋势的车轮滚滚向前&#xff0c;AI 正在为工业领域带来新的变革。今天&#xff0c;我们特邀了上海腾展长融董事 &…...

讲讲android art虚拟机的内存

Android 的 ART&#xff08;Android Runtime&#xff09;虚拟机的内存管理是一个复杂但重要的部分。 ART 虚拟机的内存主要包括以下几个关键区域&#xff1a; Java 堆&#xff08;Java Heap&#xff09;&#xff1a; 这是存储 Java 对象实例的主要区域。堆内存被进一步划分为不…...

构建高效社群生态:探索社群系统的力量与未来

在数字化时代的大潮中&#xff0c;社群系统作为连接人与人、促进信息交流与资源共享的重要平台&#xff0c;正日益成为企业、组织乃至个人不可或缺的一部分。它不仅为成员提供了展示自我、学习成长的舞台&#xff0c;更为社群管理者创造了高效管理、精准运营的工具。今天&#…...

数据结构——排序(3):交换排序(续)

目录 一、快速排序 (1)hoare版本 ①思路 ②过程图示 ③思考 ④代码实现 ⑤代码解释 &#xff08;2&#xff09;挖坑法 ①思路 ②过程图示 ③思考 ④代码实现 ⑤代码解释 &#xff08;3&#xff09;lomuto前后指针 ①思路 ②过程图示 ③思考 ④代码实现 ⑤代…...

2024最新版本Python安装及开发环境配置(vscodepython)

python安装 去Python官网下载最新版本&#xff1a; 接下来请一步步按照图片操作&#xff1a; 这样子就安装完成了 测试Python安装是否成功 先打开终端 右键Windows徽标&#xff0c;点击终端 然后输入python&#xff0c;如果如下图所示&#xff0c;就说明安装成功&#xff0…...

机器学习的定义

机器学习 机器学习的定义 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从经验中学习并改进&#xff0c;而无需进行明确的编程。机器学习算法分析和解释数据&#xff0c;然后使用该数据来做出预测或决策&#xff0c;随着时间的推移&#xff0c;它们会变得更加准…...

2024-08-05升级问题:Android中ScrollView嵌套listview并解决listview显示问题

问题&#xff1a; 当ScrollView嵌套ListView时&#xff0c;ListView的高度设置为wrap_content时出现ListView的高度不能完全展开&#xff0c;而只显示的第一个Item。 解决方法&#xff1a; 按item的个数乘以高度计算出listview的总高度&#xff0c;并在数据变化时直接设置lis…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...