当前位置: 首页 > 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)]}
}
http://www.lryc.cn/news/425415.html

相关文章:

  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域
  • 深入理解JavaScript性能优化:从基础到高级
  • java+springboot实现定时任务
  • 1.3 数据库的发展历史与演变
  • The field file exceeds its maximum permitted size of 1048576 bytes
  • 【Es】python es操作
  • 吃透前端文件上传与文件相关操作 多文件上传 大文件切片上传 拖拽上传 后续还会更新 断点续传等等
  • 用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)
  • zdpgo_gin_login 框架20240815更新,增加注册路由的功能,一个方法自动拥有注册和登录两个API接口
  • 搭配Intel第13代酷睿处理器
  • uniapp快速回顾,新学websocket连接和BLE连接
  • 激光测距传感器
  • 从数据分析到智能生产:AI在工业中的应用与未来
  • 讲讲android art虚拟机的内存
  • 构建高效社群生态:探索社群系统的力量与未来
  • 数据结构——排序(3):交换排序(续)
  • 2024最新版本Python安装及开发环境配置(vscodepython)
  • 机器学习的定义
  • 2024-08-05升级问题:Android中ScrollView嵌套listview并解决listview显示问题
  • 【热度文章】Java设计模式之中介者模 式
  • 【3.0】vue3语法
  • Navicat Monitor 荣获 2024 年 DBTA “最佳数据库性能解决方案”读者选择奖
  • [论文笔记]ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
  • shuashuashua
  • k8s之HPA
  • fun状态上传,并可手动控制
  • 【Canvas与艺术】四扇叶结
  • 基于DVWA-Brute Force(LowMedium)的渗透测试
  • 水库大坝安全预警系统的作用
  • 容器化部署ES集群