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

java pojo 转 map_如何将POJO对象转换成MAP

展开全部

很多情况需要将取得的POJO对象转换成其他表现形式,如Key-Value的Map形式,用于数据展现.本文介绍如何e5a48de588b662616964757a686964616f31333337376262将取得的POJO对象实例后如何转换成Map对象.代码如下

1、类分析器代码,主要是分析类的构造取得类定义的属性和get/set方法

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import org.hibernate.PropertyNotFoundException;

import org.hibernate.property.BasicPropertyAccessor;

import org.hibernate.property.Getter;

import org.hibernate.property.Setter;

import test.entity.User;

/**

* 分析POJO类抽取类定义的属性和get/set方法

* @author shygiant

*

*/

public class ClassAnalysis {

private Class analysisClass;

private List propertys=new ArrayList();

private List propMeatList=new ArrayList();

private String[] getterNames;

private String[] setterNames;

private Getter[] getters;

private Setter[] setters;

private Class[] propTypes;

private String[] propertyNames;

public ClassAnalysis(Class clazz)

{

this.analysisClass=clazz;

getPropertys(analysisClass);

Iterator itr=propertys.iterator();

BasicPropertyAccessor propertyAccessor=new BasicPropertyAccessor();

while(itr.hasNext())

{

Field field=(Field)itr.next();

ClassPropertyMeta propertyMeta=new ClassPropertyMeta();

try

{

String propertyName=field.getName();

propertyMeta.setProperty(field);

propertyMeta.setGetter(propertyAccessor.getGetter(clazz,propertyName));

propertyMeta.setSetter(propertyAccessor.getSetter(clazz,propertyName));

propertyMeta.setPropType(propertyMeta.getGetter().getReturnType());

propMeatList.add(propertyMeta);

}

catch(PropertyNotFoundException ex)

{

}

}

convertToAry();

}

private void getPropertys(Class clazz)

{

if(clazz!=null&&clazz!=Object.class)

{

Class curClass=clazz.getSuperclass();

getPropertys(curClass);

Field[] fileds=clazz.getDeclaredFields();

for(int i=0;i

{

propertys.add(fileds[i]);

}

}

}

private void convertToAry()

{

int properspan=propMeatList.size();

getters=new Getter[properspan];

getterNames=new String[properspan];

setterNames=new String[properspan];

setters=new Setter[properspan];

propTypes=new Class[properspan];

propertyNames=new String[properspan];

Iterator itr=propMeatList.iterator();

int i=0;

while(itr.hasNext())

{

ClassPropertyMeta propertyMeta=(ClassPropertyMeta)itr.next();

if(propertyMeta!=null)

{

String propertyName=propertyMeta.getProperty().getName();

propertyNames[i]=propertyName;

getters[i]=propertyMeta.getGetter();

setters[i]=propertyMeta.getSetter();

propTypes[i]=getters[i].getReturnType();

getterNames[i]=getters[i].getMethodName();

setterNames[i]=setters[i].getMethodName();

i++;

}

}

}

public class ClassPropertyMeta

{

private Field property;

private Getter getter;

private Setter setter;

private Class propType;

public Field getProperty() {

return property;

}

public void setProperty(Field property) {

this.property = property;

}

public Getter getGetter() {

return getter;

}

public void setGetter(Getter getter) {

this.getter = getter;

}

public Setter getSetter() {

return setter;

}

public void setSetter(Setter setter) {

this.setter = setter;

}

public Class getPropType() {

return propType;

}

public void setPropType(Class propType) {

this.propType = propType;

}

}

public Getter[] getGetters()

{

return getters;

}

public Setter[] getSetters()

{

return setters;

}

public Class[] getPropTypes()

{

return propTypes;

}

public String[] getPropertyNames() {

return propertyNames;

}

public String[] getGetterNames() {

return getterNames;

}

public String[] getSetterNames() {

return setterNames;

}

public static void main(String[] args)

{

User user=new User();

user.setUserId(new Integer("1"));

user.setUserName("abc");

user.setUserPassword("psw");

ClassAnalysis pojoAnalysis=new ClassAnalysis(user.getClass());

Getter[] getters=pojoAnalysis.getGetters();

Class[] propTypes=pojoAnalysis.getPropTypes();

for(int i=0;i

{

System.out.println("getter:="+getters[i].getMethodName());

System.out.println("propTypes:="+propTypes[i].getName());

}

}

public Class getAnalysisClass() {

return analysisClass;

}

}

2、对象分析器代码

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Stack;

import net.sf.cglib.beans.BulkBean;

public class ObjAnalysis {

private Map map;

private String propName="";

private Stack stack;

public ObjAnalysis(Object obj,Class clazz)

{

map=new HashMap();

stack=new Stack();

ClassAnalysis classAnalysis=new ClassAnalysis(clazz);

convertObjToMap(obj,classAnalysis);

}

private void convertObjToMap(Object obj,ClassAnalysis classAnalysis)

{

String[] propertyNames=classAnalysis.getPropertyNames();

String[] getters=classAnalysis.getGetterNames();

String[] setters=classAnalysis.getSetterNames();

Class[] types=classAnalysis.getPropTypes();

BulkBean bulkbean=BulkBean.create(classAnalysis.getAnalysisClass(), getters, setters, types);

Object[] objPropertyValues=bulkbean.getPropertyValues(obj);

for(int i=0;i

{

stack.push(propertyNames[i]);

propName=getPropName(stack);

map.put(propName,objPropertyValues[i]);

if(objPropertyValues[i]!=null)

{

ClassAnalysis clazzAnaly2=new ClassAnalysis(objPropertyValues[i].getClass());

if(clazzAnaly2.getPropertyNames()!=null&&clazzAnaly2.getPropertyNames().length>0)

{

convertObjToMap(objPropertyValues[i],clazzAnaly2);

}

}

stack.pop();

}

}

private String getPropName(Stack stack)

{

String propName="";

Iterator itr=stack.iterator();

int i=0;

while(itr.hasNext())

{

if(i==0)

{

propName=itr.next().toString();

}

else

{

propName+="."+itr.next().toString();

}

i++;

}

return propName;

}

public Map getObjPropertyMap()

{

return map;

}

}

3、辅助类

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import net.sf.cglib.beans.BulkBean;

public class SqlUtil {

public static List convertRsToList(ResultSet rst) throws Exception{

List list = new ArrayList();

Map map = null;

ResultSetMetaData rsmd = null;

try {

rsmd = rst.getMetaData(); // 得到结果集中列类型和属性

int columnCount = rsmd.getColumnCount(); // 得到结果集中包含的列

while (rst.next()) {

map = new HashMap();

for (int i = 0; i < columnCount; i++) {

map.put((String) rsmd.getColumnName(i + 1),

rst.getString(i + 1));

}

list.add(map);

}

}catch(Exception e){

e.printStackTrace();

}

return list;

}

public static List convertObjListToMapList(List objList,Class clazz)

{

List list =new ArrayList();

Iterator itr=objList.iterator();

while(itr.hasNext())

{

Object obj=itr.next();

Map map=convertObjToMap(obj,clazz);

list.add(map);

}

return list;

}

public static Map convertObjToMap(Object obj,Class clazz)

{

Map map=new HashMap();

ObjAnalysis objAnalysis=new ObjAnalysis(obj,clazz);

map=objAnalysis.getObjPropertyMap();

return map;

}

}

4、测试代码

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import org.hibernate.bytecode.javassist.BulkAccessor;

import org.hibernate.mapping.Component;

import org.hibernate.property.BasicPropertyAccessor;

import org.hibernate.property.Getter;

import org.hibernate.tuple.component.PojoComponentTuplizer;

import net.sf.cglib.beans.BulkBean;

import test.IUser;

import test.UserImpl;

import test.entity.Address;

import test.entity.LinkType;

import test.entity.Role;

import test.entity.User;

public class TestMain {

/**

* @param args

*/

public static void main(String[] args)

{

User user=new User();

user.setUserName("abc");

user.setUserPassword("psw");

Role role=new Role();

role.setRoleId("role1");

role.setRoleName("roleName1");

user.setRole(role);

LinkType linkType=new LinkType();

Address homeAddress=new Address();

homeAddress.setAddressId("addressId1");

homeAddress.setAddressName("addressName1");

Address companyAddress=new Address();

companyAddress.setAddressId("addressId2");

companyAddress.setAddressName("addressName2");

linkType.setHomeAddress(homeAddress);

linkType.setCompanyAddress(companyAddress);

user.setLinkType(linkType);

List userList=new ArrayList();

userList.add(user);

List maplist=SqlUtil.convertObjListToMapList(userList,user.getClass());

for(int i=0;i

{

Map map=(Map)maplist.get(i);

Iterator itr=map.keySet().iterator();

while(itr.hasNext())

{

String key=itr.next().toString();

String value="";

if(map.get(key)!=null)

{

value=map.get(key).toString();

}

System.out.println(key+"="+value);

}

}

}

}

5、POJO实体类

------------------------User.java---------------------------

package test.entity;

// default package

import java.util.Date;

测试结果

linkType.homeAddress=test.entity.Address@29428e

userPassword=psw

linkType.linkTypeId=

linkType=test.entity.LinkType@d0a5d9

linkType.companyAddress=test.entity.Address@388993

linkType.homeAddress.addressId=addressId1

role.roleId=role1

linkType.homeAddress.addressName=addressName1

userId=

userName=abc

role=test.entity.Role@1d04653

linkType.companyAddress.addressId=addressId2

linkType.companyAddress.addressName=addressName2

role.roleName=roleName1

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

相关文章:

  • io流 java代码_java IO流 对文件操作的代码集合
  • java中重写的作用_Java中的重写
  • java def_java 8 default关键字
  • java url xml_从Java中的URL读取XML字符串
  • java 8 关键字_JAVA 8 '::' 关键字
  • java类中静态块_java – 为什么.class不调用类中的静态块?
  • java referrer_JavaScript中document.referrer的用法详解
  • java代码压缩文件_使用Java代码压缩文件或文件夹
  • 石子合并 动态规划 java_动态规划:圆形石子合并问题
  • java修饰方法_Java 修饰符
  • arduino timer频率_Arduino利用TimerOne库产生固定频率和占空比的方波
  • flask数据库mysql增删查改_flask_sqlalchemy简单增删查改操作
  • java基础语法的意义_关于java基础语法的学习笔记
  • java中容器试题_Java最常见208道面试题_容器
  • java 开启线程扫描程序_当多个线程在Java中使用System.in上的扫描仪...
  • [NodeJS] 关于Buffer
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • ES6--对象的扩展
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • magento2项目上线注意事项
  • Node 版本管理
  • Python学习之路13-记分
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spring声明式事务管理之一:五大属性分析
  • vue数据传递--我有特殊的实现技巧
  • 动态规划入门(以爬楼梯为例)
  • 读懂package.json -- 依赖管理
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 思否第一天
  • 详解移动APP与web APP的区别
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #Linux(make工具和makefile文件以及makefile语法)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Java)【深基9.例1】选举学生会
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (六)vue-router+UI组件库
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (算法)前K大的和
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET简谈设计模式之(单件模式)
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ C++ ] 继承
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [].slice.call()将类数组转化为真正的数组
  • [1159]adb判断手机屏幕状态并点亮屏幕