03-封装BeanUtil工具类(javabean转map和map转javabean对象)
package com.oa.test; import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map; public class BeanUtil { /**
* 将JavaBean对象封装到Map集合当中
* @param bean
* @return
* @throws Exception
*/
public static Map<String, Object> bean2map(Object bean) throws Exception
{
//创建Map集合对象
Map<String,Object> map=new HashMap<String, Object>();
//获取对象字节码信息,不要Object的属性
BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(),Object.class);
//获取bean对象中的所有属性
PropertyDescriptor[] list = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : list) {
String key = pd.getName();//获取属性名
Object value = pd.getReadMethod().invoke(bean);//调用getter()方法,获取内容
map.put(key, value);//增加到map集合当中
}
return map;
} /**
* 将Map集合中的数据封装到JavaBean对象中
* @param map 集合
* @param classType 封装javabean对象
* @throws Exception
*/
public static <T> T map2bean(Map<String, Object> map,Class<T> classType) throws Exception
{
//采用反射动态创建对象
T obj = classType.newInstance();
//获取对象字节码信息,不要Object的属性
BeanInfo beanInfo = Introspector.getBeanInfo(classType,Object.class);
//获取bean对象中的所有属性
PropertyDescriptor[] list = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : list) {
String key = pd.getName(); //获取属性名
Object value=map.get(key); //获取属性值
pd.getWriteMethod().invoke(obj, value);//调用属性setter()方法,设置到javabean对象当中
}
return obj;
}
}
测试代码如下
package com.oa.test;
import java.util.Map;
import com.oa.domain.User;
public class Demo3 {
/**
* 刘诗华
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// User(id=28, userName=刘诗华, password=123456)
User user=new User(28,"刘诗华","123456");
//将JavaBean集合转换成Map集合
Map<String, Object> m = BeanUtil.bean2map(user);
System.out.println(m); //{id=28, userName=刘诗华, password=123456}
//将Map集合转换JavaBean对象
User o = BeanUtil.map2bean(m, User.class);
System.out.println(o); //User(id=28, userName=刘诗华, password=123456)
}
}
03-封装BeanUtil工具类(javabean转map和map转javabean对象)的更多相关文章
- Workbook导出excel封装的工具类
在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...
- writeValueAsString封装成工具类
封装成工具类 <span style="font-family:Microsoft YaHei;">public static String toJsonByObjec ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- 转:轻松把玩HttpClient之封装HttpClient工具类(一)(现有网上分享中的最强大的工具类)
搜了一下网络上别人封装的HttpClient,大部分特别简单,有一些看起来比较高级,但是用起来都不怎么好用.调用关系不清楚,结构有点混乱.所以也就萌生了自己封装HttpClient工具类的想法.要做就 ...
- .NET3.5中JSON用法以及封装JsonUtils工具类
.NET3.5中JSON用法以及封装JsonUtils工具类 我们讲到JSON的简单使用,现在我们来研究如何进行封装微软提供的JSON基类,达到更加方便.简单.强大且重用性高的效果. 首先创建一个类 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- Java工具类——通过配置XML验证Map
Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...
随机推荐
- OpenRASP安装使用教程
一.说明 1.1 RASP和WAF的区别 WAF,Web Application Firewall,应用防火墙.其原理是拦截原始http数据包,然后使用规则对数据包进行匹配扫描,如果没有规则匹配上那就 ...
- ID绘图工具的使用5.29
1.按住ALT拖动矩形工具,以中心绘制矩形. 绘制矩形的过程中,按住空格键可以调整矩形的位置. 2选择矩形工具,单击,可以精确输入尺寸. 3“窗口‘”信息“面板调出来.这样在绘制的时候可以边绘制边看 ...
- angularjs 下滑线滑动
css: .detail_row { width: 410px; height: 34px; clear: both; border-bottom: 1px solid #eaeeef; font-s ...
- ZXX43大神实现的软渲染
https://github.com/zxx43/Software-Render http://blog.csdn.net/zxx43/article/details/46755247 http:// ...
- Android : 跟我学Binder --- (6) JAVA实现
目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...
- FPGA型号解读
- 使用IDEA搭建Springboot+mybatis
1.开发工具:Intellij idea2018.2 2.通过Spring Initializr建立项目,Project SDK选择本地的jdk就可以,我的是jdk1.8,之后点击next. 修改项目 ...
- keil的可烧写hex文件生成
右键Target1 Options Target for ‘Target1’ ...->Output->Create Executable:->Create HEX File Bui ...
- Python 进程池的异步方法
import time from multiprocessing import Process,Pool def f1(n): time.sleep(0.5) # print(n) return n* ...
- 单例模式demo
package com.test; /** * * @author Administrator *我的发现:调用这个的时候,不能直接实例化了;需要=null;然后get; 这样安全些; *然后仔细找了 ...