java中Map转化为bean
Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值,在java编程中会经常用到。但是当我们进行业务逻辑的处理或着操作数据库时,往往应用的是我们自己定义的的Bean或VO来传递和存储数据,这就需要我们应用一个公共方法来将map中存储的数据转换为相对应的Bean或VO,主要用到java中反射技术。
以下为本人在项目中用到的工具类,它囊括了我们常用的数据类型,代码如下:
package test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
//Map转化为bean
public class MapToVoUtil {
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public static <T> Object refelctBean(Map map , T t){
Object obj = null;
Class clazz = t.getClass();
try {
obj = clazz.newInstance();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if(method.getName().startsWith("set")){
String key = method.getName().replace("set", "");
key = key.substring(0, 1).toLowerCase().concat(key.substring(1));
Object value = map.get(key);
if(value==null || value.equals("N/A")) continue;
Class<?>[] paramType = method.getParameterTypes();
//根据参数类型执行对应的set方法给vo赋值
if(paramType[0] == String.class){
method.invoke(obj, String.valueOf(value));
continue;
}else if(paramType[0] == BigDecimal.class){
method.invoke(obj, new BigDecimal(value.toString()));
continue;
}else if(paramType[0] == Double.class){
method.invoke(obj, Double.parseDouble(value.toString()));
continue;
}else if(paramType[0] == Date.class){
method.invoke(obj, StringToDate(value.toString()));
continue;
}else if(paramType[0] == int.class || paramType[0] == Integer.class){
method.invoke(obj, Integer.valueOf(value.toString()));
continue;
}else if(paramType[0] == Boolean.class){
method.invoke(obj, Boolean.parseBoolean(value.toString()));
continue;
}else if(paramType[0] == char.class || paramType[0] == Character.class){
method.invoke(obj, value.toString().charAt(0));
continue;
}
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return obj;
}
//字符串转日期
public static Date StringToDate(String str){
Date date = null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
//日期转字符串
public static String DateToString(Date date){
String str = null;
str = sdf.format(date);
return str;
}
}
在实际项目中我们可能还会遇到一些vo会继承一些baseVo,此时若想将通过map给baseVo中的属性赋值,那么我们就要在工具类中加入如下代码:
Class superClazz = t.getClass().getSuperclass();
Method[] superMethods = clazz.getDeclaredMethods();
然后遍历,执行baseVo中的set方法,为父类属性赋值。此时可以在参数中加一个标记flag,调用者根据传入的Vo是否有继承的自定义的baseVo来决定是否执行上面的代码。
java中Map转化为bean的更多相关文章
- java中map接口hashMap以及Enty之间的用法和关系
java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...
- java中Map,List与Set的差别
java中Map,List与Set的差别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,而且同一个数组 ...
- Java中Map用法详解
原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...
- 将java中Map对象转为有相同属性的类对象(json作为中间转换)
java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...
- java中Map及Map.Entry详解
Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法. keySet()方法返回值是Map中key值的集合:e ...
- java中Map,List与Set的区别(转)
Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...
- Java中Map常用方法总结以及遍历方式的汇总
一.整理: 看到array,就要想到角标. 看到link,就要想到first,last. 看到hash,就要想到hashCode,equals. 看到tree,就要想到两个接口.Comparable, ...
- java中map插入相同的key
测试用例: package test; import org.junit.Test; import po.Person; import java.util.HashMap; import java.u ...
- java中map<string,int>
java中 Iterator it=wordsmap.entrySet().iterator(); while(it.hasNext()) { Map.Entry<String,Integer& ...
随机推荐
- Local Notification
大家都知道Push Notification,这个东西需要联网才可以用.iOS4起,苹果引入了一种可以在设备内部引发的notification.不需要复杂的服务器编程,或其他复杂的配置.这个技术就是L ...
- 编写高质量代码改善C#程序的157个建议——建议147:重构多个相关属性为一个类
建议147:重构多个相关属性为一个类 若存在多个相关属性,就应该考虑是否将其重构为一个类.查看如下类: class Person { public string Address { get; set; ...
- Java 代理模式(一) 静态代理
转自: http://www.cnblogs.com/mengdd/archive/2013/01/30/2883468.html 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...
- C#中使用多线程访问Winform中控件的若干问题
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...
- 在Arch gnome中安装一些软件
一. 在Arch gnome中添加ibus中文输入法 1. 安装ibus-libpinyin. sudo pacman -S ibus-libpinyin 如果系统之前没有安装ibus,则先通过pac ...
- java 异步调用与多线程
异步与多线程的区别 一.异步和多线程有什么区别?其实,异步是目的,而多 线程是实现这个目的的方法.异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作 就没有必要异步了),可以继续自顾 ...
- CS0012 类型“DbContext”在未引用的程序集中定义。必须添加对程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。 Repository E:\项目\wx\Repository\DbContextFac
严重性 代码 说明 项目 文件 行 禁止显示状态错误 CS0012 类型“DbContext”在未引用的程序集中定义.必须添加对程序集“EntityFramework, Version=6.0.0.0 ...
- 基于 ZKEACMS 的云建站 / 自助建站解决方案
基于ZKEACMS的云建站 / 自助建站解决方案,一站式托管,解决企业建站需求,功能强大,高度自定义.用户只需在界面上输入一些基本信息,选择相应的主题 / 网站模板,然后就可以快速创建一个独一无二的网 ...
- C# 读Autofac源码笔记(2)
刚看了下Autofac属性注入的源码 首先看看WithProperty方法 image.png Autofac将我们的属性值,存在了一个list集合中 image.png 然后将这个集合传递到 ...
- 「HNOI 2013」游走
题目链接 戳我 \(Solution\) 首先申明几个变量: f[x]:到点x的概率, vis[x]:x点的度 dp[x][y]:(x,y)这条边的概率 number[x][y]:x这条边的编号 下面 ...