初衷:

    db返回了一个实体类,想封装成一个Map留着按需获取属性,所以就有了下面的Utils

    

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*; /**
* @program: ht
* @description: 实体类存入Map
* @author: Wangly
* @create: 2020-12-29 13:29
* @version: 1.0.0
*/
public class BeanMap {
/**
* 获取obj中的所有方法
*
* @param obj
* @return
*/
public List<Method> getAllMethods(Object obj) {
List<Method> methods = new ArrayList<Method>();
     // 获取obj字节码
Class<?> clazz = obj.getClass();
while (!clazz.getName().equals("java.lang.Object"))
      {
       // 获取方法
methods.addAll(Arrays.asList(clazz.getDeclaredMethods()));
clazz = clazz.getSuperclass();
}
return methods;
} /**
* 将一个类用属性名为Key,值为Value的方式存入map
*
* @param obj
* @return
*/
public Map<String, Object> convert2Map(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
List<Method> methods = getAllMethods(obj);
for (Method m : methods) {
String methodName = m.getName();
if (methodName.startsWith("get")) {
// 获取属性名
String propertyName = methodName.substring(3);
try {
map.put(propertyName, m.invoke(obj));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return map;
}
}

  Test

  测试实体类

import lombok.Data;

/**
* @program: ht
* @description: TestBeanMap
* @author: Wangly
* @create: 2020-12-29 13:37
* @version: 1.0.0
*/
@Data
public class Person {
private int id;
private String name;
private String nipples;
private String sw;
private String bra;
private String foot;
private String mouth; public Person() {} public Person(int id, String name, String nipples, String sw, String bra, String foot, String mouth) {
this.id = id;
this.name = name;
this.nipples = nipples;
this.sw = sw;
this.bra = bra;
this.foot = foot;
this.mouth = mouth;
}
}

  测试类

@Test
public void BeanMapTest() {
BeanMap beanMap = new BeanMap();
Person p = new Person();
p.setId(1);
p.setBra("pink");
p.setMouth("good");
p.setNipples("pink");
p.setSw("black");
p.setFoot("good"); Map<String, Object> stringObjectMap = beanMap.convert2Map(p);
stringObjectMap.forEach((k, v) -> {
System.out.println("k:" + k + ",v:" + v);
});
}

  输出

  发现多少沾点多此一举   避免重复造轮子

// 将 Map 转换为 实体类
Person person = JSON.parseObject(JSON.toJSONString(personMap), person.class);
System.out.println(user);
// 将 实体类 转换为 Map
Map map = JSON.parseObject(JSON.toJSONString(person), Map.class);
System.out.println(map);

实体类如何"不费力气"的转为Map的更多相关文章

  1. Android--将实体类转化成Json和Map的基类

    package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...

  2. javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...

  3. javabean(实体类)转Map类型

    javabean(实体类)转Map类型 从网上"風亦飞"的导出EXCEL的源代码提取出来的.认为非常好用.分享一下给大家,主要看beanToMap方法就OK了 /*以下是从poi导 ...

  4. oracle学习笔记(八)——结果集元数据ResultSetMetaData以及ResultSet转为对应的实体类框架

    介绍 可用于获取关于 ResultSet 对象中列的类型和属性信息的对象,在持久框层框架(如:mybatis, hibernate)中被广泛的应用. 常用方法 int getColumnCount() ...

  5. SpringBoot中Redis的set、map、list、value、实体类等基本操作介绍

    今天给大家介绍一下SpringBoot中Redis的set.map.list.value等基本操作的具体使用方法 上一节中给大家介绍了如何在SpringBoot中搭建Redis缓存数据库,这一节就针对 ...

  6. JAVA 中 Map 与实体类相互转换的简单方法

    1. 在 pom.xml 中引入依赖包 <dependency> <groupId>com.alibaba</groupId> <artifactId> ...

  7. java实体类和json串字段名称不一致或者与map中字段名称不一致使用注解转化

    package yuanCheng; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List ...

  8. JAVA 实体类List<Entity >转 List<Map>

    public static <T extends IdEntity> List<Map<Object,Object>> EntityConvertMap(List& ...

  9. .Net Core NPOI读取Excel 并转为数据实体类

    创建应用程序 这里直接创建Console程序 引用NPOI的NuGet包 PM> Install-Package NPOI -Version 2.5.1 直接Nuget包管理器添加 导入Exce ...

  10. PhoneBean实体类的封装和map输出键值对的设置

    之前我们写好了bean类型.现在我们再看看这个需求中,map和reduce各自的流程. Map阶段: 字段切分以后保留如下字段:以第一行为例,就保留13726230503112  2481 24681 ...

随机推荐

  1. 高通lk阶段mipi 代码解析以及新屏幕添加

    参考:https://www.cnblogs.com/linhaostudy/p/9237526.html 背景 前段时间做了这块的工作,但总结完以后领导说我的认识还是过于肤浅,因此重新再看了一下. ...

  2. Ubuntu中安装最新 Node.js 和 npm

    背景 为了安装GNU QEMU Eclipse,需要安装比较新的nodejs $ npm install --global xpm@latest ▌ ╢░░░░░░░░░░░░░░░░░░░░░░░░ ...

  3. 请解释一下 JavaScript 的同源策略?

    概念:同源策略是客户端脚本(尤其是Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载.这里的同源策略指的是:  协议,域名,端口 相同,同源策略是一种安全协议.指一 ...

  4. mysql 二进制的读取与写入

    插入语句 用binary转换函数可将字符串转为二进制 insert into mytable (id, bin) values(1, binary('abcdef')) 查询语句 用cast进行类型转 ...

  5. 面试官:Java对象引用都有哪些类型?

    哈喽,大家好,我是世杰. 本文我为大家介绍面试官经常考察的「Java对象引用相关内容」 照例在开头留一些面试考察内容~~ 面试连环call Java对象引用都有哪些类型? Java参数传递是值传递还是 ...

  6. C#——接口

    先来看看微软官方对接口的定义与说明. 接口定义协定. 实现接口的类或结构必须遵循它的协定. 接口可以从多个基接口继承,类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器. 接口本身不提供 ...

  7. 用户数据报协议UDP

    UDP的首部格式如下: (1) 源端口,源端口号.在需要对方回信时选用.不需要时可用全0. ⑵目的端口,目的端口号.这在终点交付报文时必须使用. ⑶长度,UDP用户数据报的长度,其最小值是8(仅有首部 ...

  8. API网关实践-网易云轻舟微服务

    微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...

  9. AT_agc017_b 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法,请放心阅读. 题目简述 一共有 \(n\) 个格子,给定两个整数 \(A,B\) 分别位于第 \(1\) 和第 \(n\) 格,中间有 ...

  10. Prometheus 使用Python推送指标数据到Pushgateway

    使用Python推送指标数据到Pushgateway 需求描述 实践环境 Python 3.6.5 Django 3.0.6 prometheus-client 0.11.0 代码实现 !/usr/b ...