背景:有时候想不通阿帕奇的BeanUtils是怎么进行map和Bean互相转化的。

工作闲暇之余,自己写个一小段代码,一探究竟,试试才发现,原来一切并非我们想的那么什么和复杂。

注:这里只是简单实例,不追求严密的代码规范和异常处理。

首先,新建一个工具类BeanUtils.java.

辅助实体类Person.java,如下:

public class Person {
private String name;
private int age;
private boolean adult; public Person(String name, int age, boolean isAdult) {
this.name = name;
this.age = age;
this.adult = isAdult;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", adult=" + adult + "]";
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} public boolean isAdult() {
return adult;
} public void setAdult(boolean adult) {
this.adult = adult;
} }

1.JavaBean 转换为Map<String,Object>;

//bean 转化为map
public static Map<String,Object> tranferBean2Map(Object obj) throws Exception{
//obj为空,结束方法
if(obj==null)
return null;
Map<String, Object> map=new HashMap<String, Object>();
/*Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
* java的自省机制
* */
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] ps = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : ps) {
String key = propertyDescriptor.getName(); if(!"class".equals(key)){
Method getter = propertyDescriptor.getReadMethod();
Object value = getter.invoke(obj);
map.put(key, value);
}
}
return map; }

2.Map<String,Object>转换为JavaBean ,使用简单的泛型;

//map转换为javaBean
public static <T extends Object> T transferMap2Bean(Map<String,Object> map,Class<T> clazz) throws Exception{
T instance = clazz.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : descriptors) {
String key=property.getName();
if(map.containsKey(key)){
Object value = map.get(key);
Method setter = property.getWriteMethod();
setter.invoke(instance, value);
} } return instance;
}

经过测试,可以成功进行map和javabean的互转。

Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。

javaBean与Map<String,Object>互转的更多相关文章

  1. JavaBean与Map<String,Object>相互转换

    一.为什么要实现javaBean与Map<String,Object>相互转换 Spring中的BaseCommandController对象可以将传递过来的参数封装到一个JavaBean ...

  2. 用第三方工具类,将JavaBean、List、Map<String,Object>转成JSON文本

    导入第三方jar包: >commons-beanutils-1.7.0.jar >commons-collections-3.1.jar >commons-lang-2.5.jar ...

  3. List<Map<String, Object>> 与 json 互转

    近期做指纹识别,需要用到缓存文件,数据量并不大,用redis不合适,所以用到了txt文件. 思路是 1.定时查询指纹,存到txt缓存文件中.      2.新增或删除指纹时,查询指纹,存到txt缓存文 ...

  4. 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历

    分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...

  5. 使用 JDBC 和 JavaTemplate 查询SQL语句返回 List<Map<String,Object>>

    使用JDBC执行sql语句返回List 类型: public class JdbcUtil { private static Log log = LogFactory.getLog(JdbcUtil. ...

  6. List<Map<String,Object>>使用Java代码遍历

    List<Map<String,Object>>的结果集怎么使用Java代码遍历以获取String,Object的值: package excel; import java.u ...

  7. java中对List<Map<String,Object>>中的中文汉字排序

    import java.text.Collator;import java.util.ArrayList;import java.util.Collections;import java.util.C ...

  8. java实现map和object互转的三种方法

    /**  * 使用org.apache.commons.beanutils进行转换  */  class A {              public static Object mapToObje ...

  9. 迭代输出Map和List<Map<String,Object>>的方法

    一.Map<String,Object> String:key的类型 Object:value的类型,value可能是String,或者int类型,什么类型都可以 对于Map接口来说,本身 ...

随机推荐

  1. fw: openstack

    OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...

  2. (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出

    (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安 ...

  3. qt编程入门

    面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...

  4. JAVA 多线程和并发学习笔记(一)

    一.进程与线程 1. 进程 当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性 独立存在的实体,每个进程都有 ...

  5. ASP.Net将图片以二进制方式存入数据库,并读取

    把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e) { string path = this.tex ...

  6. QlikView TEXT控件固定显示图片

    QlikView 的Text控件不仅可以用来展示文本也可以用来展示图片. 数据表 2个列,一个是 关联字段(Country),另外一个保存图片物理路径. TEXT控件固定显示图片 ,编辑控件表达式 = ...

  7. SQL笔记-第五章,函数

    一.数学函数 功能 函数名  用法 绝对值  ABS()    指数  POWER() POWER(FWeight,-0.5)  平方根  SQRT()    求随机数  RAND()    舍入到最 ...

  8. 码农谷 找出N之内的所有完数

    题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...

  9. JQuery 公网 CDN

    JQuery 公网 CDN   <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js&quo ...

  10. unity3d 射弹基础案例

    小白本来想学cocos2dx的,然而c++难学就算了,cocos2dx对新手来说简直坑爹,于是乎转战unity3d学习js,在写出第一个游戏后兴致高多了哎. 回顾一下编辑的过程:1.建立一个cube作 ...