import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* HashMap与Bean互转工具类
*
* @author hailan
* @time 2015-10-12下午05:56:34
*/
public class HashMapBeanTools {
/**
* HashMap转换成JavaBean
*
* @author hailan
* @time 下午05:57:16
* @param map
* @param cls
* @return
*/
public static Object hashMapToJavaBean(HashMap<?,?> map, Class<?> cls) {
Object obj = null;
try {
obj = cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// 取出bean里的所有方法
Method[] methods = cls.getMethods();
for (int i = 0; i < methods.length; i++) {
// 取方法名
String method = methods[i].getName();
// 取出方法的类型
Class<?>[] cc = methods[i].getParameterTypes();
if (cc.length != 1)
continue;
// 如果方法名没有以set开头的则退出本次for
if (!method.startsWith("set") )
continue;
// 类型
String type = cc[0].getSimpleName();
try {
//
Object value = method.substring(3,4).toLowerCase().concat(method.substring(4));
// 如果map里有该key
if (map.containsKey(value)) {
// 调用其底层方法
setValue(type, map.get(value), i, methods, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
/**
* 调用底层方法设置值
*
* @author hailan
* @time 下午06:01:56
* @param type
* @param value
* @param i
* @param method
* @param bean
* @throws Exception
*/
private static void setValue(String type, Object value, int i, Method[] method,
Object bean) throws Exception {
if (value != null && !value.equals("")) {
try {
if (type.equals("String")) {
// 第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
method[i].invoke(bean, new Object[] { value });
} else if (type.equals("int") || type.equals("Integer")) {
method[i].invoke(bean, new Object[] { new Integer(""
+ value) });
} else if (type.equals("BigDecimal")) {
method[i].invoke(bean, new Object[] { new BigDecimal((String)value) });
} else if (type.equals("long") || type.equals("Long")) {
method[i].invoke(bean,
new Object[] { new Long("" + value) });
} else if (type.equals("boolean") || type.equals("Boolean")) {
method[i].invoke(bean, new Object[] { Boolean.valueOf(""
+ value) });
} else if (type.equals("Date")) {
Date date = null;
if (value.getClass().getName().equals("java.util.Date")) {
date = (Date) value;
} else {
//根据文件内的格式不同修改,时间格式太多在此不做通用格式处理。
if (value.toString().length() > 10){
String format = "yyyy-MM-dd HHmmss";
date = parseDateTime("" + value, format);
} else if (value.toString().length() == 10){
String format = "yyyy-MM-dd";
date = parseDateTime("" + value, format);
} else if (value.toString().length() == 8){
String format = "yyyyMMdd";
date = parseDateTime("" + value, format);
} else if (value.toString().length() == 14){
String format = "yyyyMMddHHmmss";
date = parseDateTime("" + value, format);
}else if (value.toString().length() == 6){
String format = "HHmmss";
date = parseDateTime("" + value, format);
}
}
if (date != null) {
method[i].invoke(bean, new Object[] { date });
}
} else if (type.equals("byte[]")) {
method[i].invoke(bean,
new Object[] { new String(value + "").getBytes() });
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
/**
* 日期格式转换
*
* @author hailan
* @time 下午06:02:59
* @param dateValue
* @param format
* @return
*/
private static Date parseDateTime(String dateValue, String format) {
SimpleDateFormat obj = new SimpleDateFormat(format);
try {
return obj.parse(dateValue);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Map<String, Object> hashJavaBeanToMap(Object ojt) {
Class<?> cls = ojt.getClass();
Field[] field = cls.getDeclaredFields();
HashMap<String, Object> mapbean = new HashMap<String, Object>();
for(int i=0;i<field.length;i++){
Field f = field[i];
f.setAccessible(true);
try {
mapbean.put(f.getName(), f.get(cls));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return mapbean;
}
}
分享到:
相关推荐
Bean与MAP间互转换的工具类。 1.将一个 Map 对象转化为一个 JavaBean,可指定BEAN的类型; 2.将一个 JavaBean 对象转化为一个 HashMap;
Java海量数据分页Bean, 适用于Oracle(适当修改,适用于任何数据库).功能描述:传入到达页码(具有容错性)、每页记录数、Select查询语句,返回该页所有的记录(整页是List集合,每条记录是一个 HashMap)、总行数、总...
hashmap源码 java-notes 算法 数据结构 设计模式 基础 集合 ConcurrentHashMap IO 并发 [Java 并发]( 并发.md) AQS 源码 JVM web 基础 [NGINX 简介](./docs/nginx/NGINX 简介.md) 框架 Spring [观察 Spring bean ...
通过引用【opevcsv】依赖,逐行读取数据 并转为Map,Object>格式,后续可以通过BeanUtil.MaptoBean()方法将map转为你需要的bean对象; csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将文件...
10.session bean 和 entity bean的区别 11.ejb中的transaction机制 12.synchronized (生产者和消费) 13.String 和 StringBuffer 14.Serializable 15.MVC (Struts的工作流程) 16.什么是MDA 17.tcp与udp的...
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...
20、EJB与JAVA BEAN的区别? Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有...
1、面向对象的特征有哪些方面 2 ...并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别 4 9、Collection 和 Collections的区别 4 10、&和&&的区别。 4 11、HashMap和Hashtable的区别。 4
205、EJB与JAVA BEAN的区别? 51 206、EJB的基本架构 51 207、MVC的各个部分都有那些技术来实现?如何实现? 52 208、J2EE是什么? 52 209、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,...
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...
23、EJB与JAVA BEAN的区别? Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应...
8. String str="i"与 String str=new String("i")一样吗? 5 9. 如何将字符串反转? 5 10. String 类的常用方法都有那些? 5 11. 抽象类必须要有抽象方法吗? 6 12. 普通类和抽象类有哪些区别? 6 13. 抽象类能使用 ...
21. EJB与JAVA BEAN的区别? 13 22. Static Nested Class 和 Inner Class的不同。 13 23. JSP中动态INCLUDE与静态INCLUDE的区别? 14 24. List, Set, Map区别 14 25. 集合类都有哪些?主要方法? 14 26. 简述逻辑...
给一个 Bean 的 message 属性, 字符串类型, 注入值为 "Hello" 的 XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是spring的IOC AOP 126 21、STRUTS的工作流程! 126 22、spring 与EJB的区别!! 126 八. ...
给一个 Bean 的 message 属性, 字符串类型, 注入值为 "Hello" 的 XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是spring的IOC AOP 126 21、STRUTS的工作流程! 126 22、spring 与EJB的区别!! 126 八. ...
给一个 Bean 的 message 属性, 字符串类型, 注入值为 "Hello" 的 XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是spring的IOC AOP 126 21、STRUTS的工作流程! 126 22、spring 与EJB的区别!! 126 八. ...
【01期】Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系? 【02期】你能说说Spring框架中Bean的生命周期吗? ...【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?
private Map, Object> map = new HashMap, Object>(); public ClassXmlPathApplicationContext(String fileName) throws Exception, IOException { SAXBuilder sb = new SAXBuilder(); Document document = sb...
1. EJB与JAVA BEAN的区别? 20 2. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 20 3. EJB的角色和三个对象 21 4. EJB容器提供的服务 21 5. EJB规范规定EJB中...