利用java反射将结果集封装成为对象和对象集合
2018-01-29 11:17
447 查看
java反射机制是什么
反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法;
反射机制能够做什么
1、判断运行对象的所属类2、构造任意一个类的对象
3、获取任意一个类的属性和方法
4、调用任意属性和方法
5、生成动态代理
利用反射将结果集封装成为对象或者集合(实测可用)
package coral.base.util;import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import wfc.service.database.RecordSet; public class ReflectUtils { /** * 将一个map集合封装成为bean对象 * * @param param * @param clazz * @return */ public static <T> T MapToBean(Map<String, Object> param, Class<?> clazz) { Object value = null; Class[] paramTypes = new Class[1]; Object obj = null; try { obj = clazz.newInstance(); // 获取类的属性 Field[] declaredFields = clazz.getDeclaredFields(); // 获取父类或接口的公有属性 Field[] superFields = clazz.getSuperclass().getFields(); List<Field[]> list = new ArrayList<Field[]>(); if (declaredFields != null) { list.add(declaredFields); } if (superFields != null) { list.add(superFields); } for (Field[] fields : list) { for (Field field : fields) { String fieldName = field.getName(); // 获取属性对应的值ֵ value = param.get(fieldName); // 把值设置进入对象属性中 这里可能是有属性但是没有相应的set方法,所以要做异常处理 try { PropertyDescriptor pd = new PropertyDescriptor( fieldName, clazz); Method method = pd.getWriteMethod(); method.invoke(obj, new Object[] { value }); } catch (Exception e1) { } } } } catch (Exception e1) { } return (T) obj; } /** * 获取类的所有属性,包括父类和接口 * @param clazz * @return */ public static List<Field[]> getBeanFields(Class<?> clazz) { List<Field[]> list = new ArrayList<Field[]>(); Field[] declaredFields = clazz.getDeclaredFields(); Field[] superFields = clazz.getSuperclass().getFields(); if (declaredFields != null) { list.add(declaredFields); } if (superFields != null) { list.add(superFields); } return list; } /** * 从结果集中获取出值 * @param fieldName * @param rs * @return */ public static Object getFieldValue(String fieldName, ResultSet rs) { Object value = null; try { //捕获值不存在的异常 value = rs.getObject(fieldName); return value; } catch (SQLException e) { //oracle数据库的列都是大写,所以才查找一次 fieldName = fieldName.toLowerCase(); try { value = rs.getObject(fieldName); return value; } catch (SQLException e1) { //结果集中没有对应的值,返回为空 return null; } } } /** * 方法重载, * @param fieldName * @param rs 这个是封装过的结果集 * @return */ public static Object getFieldValue(String fieldName, RecordSet rs) { Object value = null; value = rs.getObject(fieldName); return value; } /** * 方法重载 * @param rs 封装过的结果集 * @param clazz * @return */ public static <T> T RSToBean(RecordSet rs, Class<?> clazz) { Object obj = null; List<Field[]> list = getBeanFields(clazz); try { obj = clazz.newInstance(); for (Field[] fields : list) { for (Field field : fields) { String fieldName = field.getName(); // String fieldName = field.getName();ֵ Object value = getFieldValue(fieldName, rs); try { PropertyDescriptor pd = new PropertyDescriptor( fieldName, clazz); Method method = pd.getWriteMethod(); method.invoke(obj, new Object[] { value }); } catch (Exception e1) { } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return (T) obj; } /** * 把结果集封装成为bean对象 * @param rs * @param clazz * @return */ public static <T> T RSToBean(ResultSet rs, Class<?> clazz) { Object obj = null; List<Field[]> list = getBeanFields(clazz); try { while (rs.next()) { obj = clazz.newInstance(); for (Field[] fields : list) { for (Field field : fields) { String fieldName = field.getName(); // String fieldName = field.getName();ֵ Object value = getFieldValue(fieldName, rs); PropertyDescriptor pd = new PropertyDescriptor( fieldName, clazz); Method method = pd.getWriteMethod(); method.invoke(obj, new Object[] { value }); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return (T) obj; } /** * 把结果集封装成为List * * @param rs * @param clazz * @return */ public static <T> List<T> RsToList(ResultSet rs, Class<?> clazz) { ArrayList<T> objList = new ArrayList<T>(); // 获取所有的属性 List<Field[]> list = getBeanFields(clazz); try { while (rs.next()) { // 定义临时变量 Object tempObeject = clazz.newInstance(); // 添加到属性中 for (Field[] fields : list) { for (Field field : fields) { String fieldName = field.getName(); // 获取属性值ֵ Object value = getFieldValue(fieldName, rs); PropertyDescriptor pd = new PropertyDescriptor( fieldName, clazz); Method method = pd.getWriteMethod(); method.invoke(tempObeject, new Object[] { value }); } } objList.add((T) tempObeject); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return objList; }}
相关文章推荐
- 利用java反射将结果集封装成为对象和对象集合
- Java利用反射自动封装成实体对象的方法
- 利用java反射将map值封装到对象中
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- 反射3:利用java反射技术将查询结果封装成对象
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- JDBC_利用Java反射技术将查询结果封装为对象
- 利用泛型和反射对Java对象集合转换成Json的工具类
- java中利用反射获得对象的各种信息
- Java中的反射机制 一个利用反射进行对象拷贝的例子
- JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
- 【java】反射(二)——泛型集合(在ArrayList<Integer>中加入String对象)
- 利用Java的反射机制解析一个Class对象的详细内容(工具方法留用)
- 利用java反射过滤类对象
- Java中的反射机制(二) 一个利用反射进行对象拷贝的例子
- java 利用反射实例化类对象
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- java 工具类 ---反射字段值封装到对象中