前言

在日常我们的工作中,很多时候都会将我们的bean转换成Map做一些数据操作,对于这些我们可以写成一个工具类中,以下是我在工作中的bean和Map互转的工具,分享一下,可以直接拷贝过去使用的呦。

1、map转bean

1)普通转换(网上找的),但是像是父类或者bean中又一个变量也是bean时转换不了。

    public  static <T> T map2bean(Map<String, Object> map,Class<T> beantype) throws Exception{T object=beantype.newInstance();//创建对象//获取类的属性描述器BeanInfo beaninfo=Introspector.getBeanInfo(beantype,Object.class);//获取类的属性集PropertyDescriptor[] pro=beaninfo.getPropertyDescriptors();for (PropertyDescriptor property : pro) {//获取属性的名字String name=property.getName();Object value=map.get(name);//得到属性name在map中对应的value。Method set=property.getWriteMethod();//得到属性的set方法//接下来将map的value转换为属性的valueset.invoke(object, value);//执行set方法}return object;}

2)这种是我自己的,都可以满足转换父类以及属性也是bean的转换工具。下面就来测试下。

package com.example.demo.utils;import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author LST* @version 1.0* @Description: bean和Map互转* @date 2019-12-22 15:26*/
@Slf4j
public class BeanUtil {/*** 将Map集合转换为对象集合* @param list list的对象数据* @param cls bean的class* @param <T>* @return List<T>*/public static <T> List<T> convertMap2Bean(List<Map<String, Object>> list, Class<T> cls) {List<T> returnList = null;if (list != null && list.size() > 0 && cls != null) {returnList = new ArrayList<>();for (Map<String, Object> map : list) {returnList.add(map2Object(map, cls));}}else{log.info("传入的对象数据不能为空数组数据,请核查");}return returnList;}/*** 将Map转换为对象* @param paramMap 对象数据* @param cls bean的class* @param <T>* @return T*/public static <T> T map2Object(Map<String, Object> paramMap, Class<T> cls) {return JSONObject.parseObject(JSONObject.toJSONString(paramMap), cls);}/*** 将object转map* @param obj bean的对象数据* @return Map<String, Object>*/public static Map<String, Object> obj2Map(Object obj) {Map<String, Object> map = new HashMap<String, Object>();Field[] field = obj.getClass().getSuperclass().getDeclaredFields();// 获取f对象对应类中的所有属性域Field[] fields = obj.getClass().getDeclaredFields();//父级属性遍历for (int j = 0; j < field.length; j++) {String varName = field[j].getName();//将key置为小写,默认为对象的属性varName = varName.toLowerCase();try {// 获取原来的访问控制权限boolean accessFlag = field[j].isAccessible();// 修改访问控制权限field[j].setAccessible(true);// 获取在对象f中属性fields[i]对应的对象中的变量Object o = field[j].get(obj);if (o != null){map.put(varName, o);}// 恢复访问控制权限field[j].setAccessible(accessFlag);} catch (IllegalArgumentException ex) {ex.printStackTrace();} catch (IllegalAccessException ex) {ex.printStackTrace();}}//属性遍历for (int i = 0, len = fields.length; i < len; i++) {String varName = fields[i].getName();varName = varName.toLowerCase();//将key置为小写,默认为对象的属性try {// 获取原来的访问控制权限boolean accessFlag = fields[i].isAccessible();// 修改访问控制权限fields[i].setAccessible(true);// 获取在对象f中属性fields[i]对应的对象中的变量Object o = fields[i].get(obj);if (o != null){map.put(varName, o);}// 恢复访问控制权限fields[i].setAccessible(accessFlag);} catch (IllegalArgumentException ex) {ex.printStackTrace();} catch (IllegalAccessException ex) {ex.printStackTrace();}}return map;}
}

3)测试map转bean,User是我的bean类,BasePlusEntity是所有bean的基类(父类),Organize是User类中的一个属性。

package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.utils.BeanUtil;import java.util.HashMap;
import java.util.Map;/*** @author LST* @version 1.0* @Description:* @date 2019-12-24 9:28*/
public class test {public static void main(String[] args) {Map map = new HashMap();Map orgMap = new HashMap();orgMap.put("parentId", "030f0549e63f2d1c931295302e39bdcc");orgMap.put("parentIds", "06184f47d3d0c68399e044969231bba4");orgMap.put("fullName", "中国");orgMap.put("areaId", "330220");map.put("id", "0025212e6073a4e6695c5c5405dcc4fa");map.put("loginName", "zhangsan");map.put("userName", "张三");map.put("passWord", "1");map.put("idCard", "235345345345345");map.put("createDate", "2019-10-11 11:28:09");map.put("organize", orgMap);User user = BeanUtil.map2Object(map,User.class);System.out.println("map转Bean:"+user.toString());System.out.println("organize:"+user.getOrganize().toString());}
}

看看控制的结果可以父类的属性都获取了如id、createDate字段。organize是bean也是获取到了。

2、bean转Map

1)bean转Map就简单些,但bean中的属性也是bean时,在通过Map获取,本文是返回对应的bean对象,自己转换一下就行了,要是想返回Map对象就在此工具类做下改的就可以了。

2)测试,控制台可以看出就如上步所说的那样。

package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.utils.BeanUtil;
import lombok.extern.slf4j.Slf4j;import java.util.HashMap;
import java.util.Map;/*** @author LST* @version 1.0* @Description:* @date 2019-12-24 9:28*/
@Slf4j
public class test {public static void main(String[] args) {Map map = new HashMap();Map orgMap = new HashMap();orgMap.put("parentId", "030f0549e63f2d1c931295302e39bdcc");orgMap.put("parentIds", "06184f47d3d0c68399e044969231bba4");orgMap.put("fullName", "中国");orgMap.put("areaId", "330220");map.put("id", "0025212e6073a4e6695c5c5405dcc4fa");map.put("loginName", "zhangsan");map.put("userName", "张三");map.put("passWord", "1");map.put("idCard", "235345345345345");map.put("createDate", "2019-10-11 11:28:09");map.put("organize", orgMap);User user = BeanUtil.map2Object(map,User.class);Map<String, Object>  beanMap = BeanUtil.obj2Map(user);log.info("Bean转Map");for (Map.Entry<String, Object>  entry : beanMap.entrySet()) {String key = entry.getKey();  // 属性名Object value = entry.getValue();     // 属性值log.info("key:" + key + ",value:" + value);}}
}

3、相关类代码贴出

1)User.java

package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.util.Date;/*** <p>* 用户表* </p>** @author lst* @since 2019-04-08*/
@TableName("sys_user")
@Data
public class User extends BasePlusEntity<User> {/*** 登录名*/@TableField("login_name")private String loginName;/*** 密码*/@TableField("password")private String passWord;/*** 用户的真实姓名*/@TableField("user_name")private String userName;/*** 身份证号码*/@TableField("id_card")private String idCard;/*** 民族*/private String nation;/*** 性别*/private String sex;/*** 生日*/private String birthday;/*** 政治面貌*/@TableField("politics_face")private String politicsFace;/*** 头像地址*/@TableField("head_picture")private String headPicture;/*** 用户状态*/@TableField("user_status")private String userStatus;/*** 职称*/private String title;/*** 办公室*/@TableField("office_addr")private String officeAddr;/*** 办公电话*/@TableField("office_phone")private String officePhone;/*** 用户所在单位列表*/@TableField("user_orgs")private String userOrgs;/*** 用户所在单位*/@TableField("user_org")private String userOrg;/*** 手机号码*/@TableField("mobil_phone")private String mobilPhone;/*** 邮件*/private String email;/*** 备用手机*/@TableField("mobil_phone2")private String mobilPhone2;/*** 虚拟短号*/@TableField("virtual_num")private String virtualNum;/*** 打印表单时预留的窗口办理人员姓名*/@TableField("print_user_name")private String printUserName;/*** 打印表单时预留的窗口办理人员电话*/@TableField("print_phone")private String printPhone;/*** 最后登录时间*/@TableField("last_login")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date lastLogin;/*** 登录ip.*/@TableField("ip")private String ip;/*** 省籍*/private String province;/*** 城市*/private String city;/*** 详细地址*/private String address;/*** 邮编*/@TableField("post_code")private String postCode;private Organize organize;@Overrideprotected Serializable pkVal() {return this.id;}@Overridepublic String toString() {return "User{" +"loginName=" + loginName +", passWord=" + passWord +", userName=" + userName +", idCard=" + idCard +", nation=" + nation +", sex=" + sex +", birthday=" + birthday +", politicsFace=" + politicsFace +", headPicture=" + headPicture +", userStatus=" + userStatus +", title=" + title +", officeAddr=" + officeAddr +", officePhone=" + officePhone +", userOrgs=" + userOrgs +", userOrg=" + userOrg +", mobilPhone=" + mobilPhone +", email=" + email +", mobilPhone2=" + mobilPhone2 +", virtualNum=" + virtualNum +", province=" + province +", city=" + city +", address=" + address +", postCode=" + postCode +", id=" + id  +", remarks=" + remarks +", createBy=" + createBy +", createDate=" + createDate +", updateBy=" + updateBy  +", updateDate=" + updateDate +", delFlag=" + delFlag  +'}';}
}

2)Organize.java

package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;/*** <p>* 用户部门表* </p>** @author lst* @since 2019-04-08*/
@TableName("sys_organize")
@Data
public class Organize extends BasePlusEntity<Organize> {/*** 父组织主键*/@TableField("parent_id")private String parentId;/*** 所有父组织*/@TableField("parent_ids")private String parentIds;/*** 组织机构简称*/private String name;/*** 组织机构全称*/@TableField("full_name")private String fullName;/*** 地区id*/@TableField("area_id")private String areaId;/*** 组织类型*/@TableField("org_type")private String orgType;/*** 组织机构代码证*/private String unicode;/*** 行政等级*/private String level;/*** 排序号*/@TableField("order_by")private String orderBy;/*** 组织编码*/@TableField("orgcoding")private String orgcoding;/*** 组织的唯一编码*/@TableField("unique_coding")private String uniqueCoding;@TableField("dev_coding")private String devCoding;@Overridepublic String toString() {return "Organize{" +"parentId=" + parentId +", parentIds=" + parentIds +", name=" + name +", fullName=" + fullName +", areaId=" + areaId +", orgType=" + orgType +", unicode=" + unicode +", level=" + level +", orderBy=" + orderBy +", orgcoding=" + orgcoding +", uniqueCoding=" + uniqueCoding +", devCoding=" + devCoding +", id=" + id +", createBy=" + createBy +", createDate=" + createDate +", updateBy=" + updateBy +", updateDate=" + updateDate +", delFlag=" + delFlag +'}';}
}

3)BasePlusEntity.java

package com.example.demo.entity;import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;import java.io.Serializable;
import java.util.Date;/*** 基础实体类** @author lst* @since 2019-12-17* @param <T>*/
@Data
public class BasePlusEntity<T extends Model> extends Model implements Serializable {protected String id;/*** 备注信息*/protected String remarks;/*** 创建者*/@TableField(value = "create_by", fill = FieldFill.INSERT)
//    @JsonIgnoreprotected String createBy;/*** 创建日期*/@TableField(value = "create_date", fill = FieldFill.INSERT)@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")protected Date createDate;/*** 更新者*/@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
//    @JsonIgnoreprotected String updateBy;/*** 更新日期*/@TableField(value = "update_date", fill = FieldFill.INSERT_UPDATE)@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")protected Date updateDate;/*** 0正常,1删除*/@JSONField(serialize = false)@TableField(value = "del_flag", fill = FieldFill.INSERT)@TableLogic@JsonIgnoreprotected String delFlag;public BasePlusEntity(String id) {this();this.id = id;}public BasePlusEntity() {}@Overridepublic String toString() {return "BasePlusEntity{" +"id='" + id + '\'' +", remarks='" + remarks + '\'' +", createBy='" + createBy + '\'' +", createDate=" + createDate +", updateBy='" + updateBy + '\'' +", updateDate=" + updateDate +", delFlag='" + delFlag + '\'' +'}';}
}

谢谢观赏,一起互相学习。

javaBean与Map之间的转换工具相关推荐

  1. 【java】之3种方式实现Object和Map之间的转换

    转载:[java]之3种方式实现Object和Map之间的转换 - 古越剑箫 - 博客园

  2. Java的object如何转为map_java实现Object和Map之间的转换3种方式

    java实现Object和Map之间的转换3种方式 发布时间:2020-10-17 18:42:04 来源:脚本之家 阅读:98 作者:古越剑箫 利用commons.BeanUtils实现Obj和Ma ...

  3. Java实现Object和Map之间的转换

    Java实现Object和Map之间的转换 public class Obj2MapUtils {/*** 将Object类型的数据转化成Map<String,Object>* @para ...

  4. map怎么转化dto_java实现Object和Map之间的转换3种方式

    利用commons.BeanUtils实现Obj和Map之间转换,这种是最简单,也是最经常用的 public static Object mapToObject(Map map, Class> ...

  5. Json,String,Map之间的转换

    前提是String的格式是map或json类型的 String 转Json JSONObject  jasonObject = JSONObject.fromObject(str); String 转 ...

  6. java url参数转map_url参数和map之间的转换

    /** * 将url参数转换成map * @param param aa=11&bb=22&cc=33 * @return */ public static Map getUrlPar ...

  7. JSON与MAP之间的转换

    引用jar包:点击下载 代码如下: [html] view plaincopy import java.util.ArrayList; import java.util.HashMap; import ...

  8. Javascript Object和Map之间的转换

    简单的区分Map和Object Map是ES6退出的一个类型,特点:任何值都可作为属性名 Object特点:属性名只能是字符串(一开始我也不信,测试后才发现的) 代码 图片 创建一个map类型 new ...

  9. android 字体像素转换工具类_android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...

最新文章

  1. 期刊投稿状态_干货| SCI论文投稿,你还是知道太少了
  2. nodejs - 创建服务器(1)
  3. c++强大还是python强大-C/C++和Python哪个更有前景?
  4. AI应用开发实战(转)
  5. 第1步 新建spring+springmvc+mybatis项目 每步都有 讲解 巨详细
  6. k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“
  7. 计算机四级笔试1,9月全国计算机等级考试四级网络工程师笔试试卷(1)
  8. 硬盘服务器作用,文件服务器有什么作用?
  9. 重庆邮电大学c语言题库
  10. 融合记忆法的程序员高效自学方法
  11. php slim 教程,php框架slim架构上存在XXE漏洞(XXE的典型存在形式)
  12. linux man shell,Linux Shell man 命令详细介绍
  13. ALSA驱动框架简介
  14. Zabbix实现企业微信报警
  15. [转]软件开发项目计划编制过程
  16. 扩展坞可以把手机投到显示器吗_连接手机与屏幕的桥梁,ORICO多功能扩展坞体验...
  17. 雅思作文模板.html,雅思写作模板必看范文
  18. LEETCODE 137.Singel Number ii
  19. Docker 介绍、安装、基础搭建 --01
  20. 网络空间安全导论实践报告

热门文章

  1. 数组指针之茴香豆有几种写法
  2. 发了几个算法的vb.net代码
  3. 扫描时显示检查服务器地址,扫描认证服务器地址
  4. Python中使用item()方法遍历字典的例子
  5. Python3基础 自学笔记 控制结构
  6. 自媒体写作如何变现?5招教你成为自媒体达人
  7. springboot No mapping for POST
  8. vCenter Server无法显示页面
  9. linux syscall 输出函数,Golang:如何在Linux上使用syscall.Syscall?
  10. 安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等