1.通过数据库字段反射给对象实例赋值

convertClass.java
/**
* 通过反射构造对象
* @param obj
* @param rs
* @return
*/
public Object convertClass(Object obj,ResultSet rs) {
try {
//得到元数据
ResultSetMetaData metaData = rs.getMetaData();
//遍历元数据
for(int i=0;i<metaData.getColumnCount();i++) {
String columName = metaData.getColumnName(i);
//转换驼峰规则
String attributeName = StatUtils.lineToHump(columName);
String attributeValue = rs.getObject(columName) != null ? rs.getObject(columName).toString() : "";
//特殊字段对格式进行处理
if(!"".equals(attributeValue)&&"BATCHTIME".equals(columName)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
attributeValue = format.format(attributeValue);
}
StatUtils.setFieldValueByFieldName(obj, attributeName, attributeValue);
}
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
StatUtils.java
public class StatUtils {

    private static Pattern linePattern = Pattern.compile("_(\\w)");

    public static String chgListStrToInStr(String searchName, List<String> searchIds) {
if (!StringUtil.isBlank(searchName) && !CollectionUtil.isEmpty(searchIds)) {
StringBuffer retStr = new StringBuffer();
for(int i = 0; i < searchIds.size(); ++i) {
if (i % 1000 == 0) {
if (i == 0) {
retStr.append(searchName).append(" in (");
} else {
retStr.append(") or ").append(searchName).append(" in (");
}
} else {
retStr.append(" , ");
}
retStr.append("'").append((String)searchIds.get(i)).append("'");
}
retStr.append(")");
return retStr.toString();
} else {
return "";
}
} /**
* 下划线转驼峰
* @param str
* @return
*/
public static String lineToHump(String str){
str = str.toLowerCase();
Matcher matcher = linePattern.matcher(str);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
return sb.toString();
} /**
* 获取四舍五入
* @param value
* @return
*/
public static String roundHalfUp(double value, int scaleNum) {
String formatStr = addZeroForNum("0.", (scaleNum+2));
DecimalFormat df = new DecimalFormat(formatStr);
double result = new BigDecimal(String.valueOf(value)).setScale(scaleNum, BigDecimal.ROUND_HALF_UP).doubleValue();
return df.format(result);
} public static String addZeroForNum(String str, int strLength) {
int strLen = str.length();
StringBuffer sb = null;
while (strLen < strLength) {
sb = new StringBuffer();
sb.append(str).append("0");//右补0
str = sb.toString();
strLen = str.length();
}
return str;
} public static Object setFieldValueByFieldName(Object o, String fieldName, Object fieldValue) {
try {
Field f = o.getClass().getDeclaredField(fieldName);
f.setAccessible(true);
try {
f.set(o, fieldValue);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return o;
} /**
* 根据属性名获取属性值
*
* @param fieldName
* @param object
* @return
*/
public static Object getFieldValueByFieldName(String fieldName, Object object) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
//设置对象的访问权限,保证对private的属性的访问
field.setAccessible(true);
return field.get(object);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} public static Map<String, Object> objectToMap(Object obj) throws Exception {
if(obj == null){
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
} public static void main(String[] args) {
System.out.println(roundHalfUp(0.2000606, 6));
}
}

2.通过对象属性反射给对象赋值

 public static Object initObjects(Object obj,ResultSet rs) {

        Field[] fields = obj.getClass().getDeclaredFields();
for (int i = 0; i <fields.length ; i++) {
// 取消属性的访问权限控制,即使private属性也可以进行访问。
fields[i].setAccessible(true);
String fieldName = fields[i].getName();
//转大写
String biColumNameString = fieldName.toUpperCase();
String columValue;
try {
columValue = rs.getObject(biColumNameString) != null ? rs.getObject(biColumNameString).toString() : "";
fields[i].set(obj, columValue);
} catch (IllegalAccessException e) {
e.printStackTrace();
}catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return obj;
}
 

java反射机制实例的更多相关文章

  1. Java反射机制实例解析

    1.获取想操作的访问类的java.lang.Class类的对象     2.调用Class对象的方法返回访问类的方法和属性信息     3.使用反射API来操作      每个类被加载后,系统会为该类 ...

  2. [转]Java反射机制详解

    目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...

  3. 【转载】Java反射机制详解

    转自:http://baike.xsoftlab.net/view/209.html#3_8 1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对 ...

  4. Java 基础之详解 Java 反射机制

    一.什么是 Java 的反射机制?   反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...

  5. Java反射机制可以动态修改实例中final修饰的成员变量吗?

    问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...

  6. java反射机制简单实例

    目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...

  7. Java知识总结:Java反射机制(用实例理解)

    概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能 ...

  8. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  9. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

随机推荐

  1. 读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例

    在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.Arra ...

  2. DataGrid 查不出数据 注意事项

    总结以下几条:1.SQL文在数据控中查询成功在写入,表内字段名尽量复制,手打太容易错了.写SQL写错了,没有智能提示.2.DataGrid数据源先绑定.3.检查parameter顺序,条件的顺序也要考 ...

  3. python3 xml模块

    一.简介 xml是实现不通语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集.是一种用于标记电子文件使其具有结构性的标记语言.xml格式如下,是通过<>节点来区别数据 ...

  4. 设计模式C++学习笔记之十六(Observer观察者模式)

      16.1.解释 概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. main(), IObservable,被观察者接口 CHanFei ...

  5. 题解-CTSC2012 熟悉的文章

    Problem bzoj 题目大意:给定多个标准串和一个文本串,全部为01串,如果一个串长度不少于\(L\)且是任意一个标准串的子串,那么它是"熟悉"的.对于文本串\(A\),把\ ...

  6. python 前面几个单词含义

    切片 str[start:end:step] start:从xxx开始    (startswith) end:切到xxx为止  (endswith) 不包括 字符串操作 .capitalize()# ...

  7. appium+java(四)微信公众号自动化测试实践

    前言 随着手机阅读的普遍应用,微信公众号阅读,更为普遍,微信和qq一样,都是基于腾讯自研X5内核,不是google原生webview(其实就是进行了二次定制).实质上也是混合应用的一种,现在很多app ...

  8. PHP中get请求中参数的key不能是para

    &para会被转化成¶,然后就无法进行下去了. 仅作记录.

  9. bzoj3730 震波 [动态点分治,树状数组]

    传送门 思路 如果没有强制在线的话可以离线之后CDQ分治随便搞. 有了强制在线之后--可能可以二维线段树?然而我不会算空间. 然后我们莫名其妙地想到了动态点分治,然后这题就差不多做完了. 点分树有一个 ...

  10. 【MySql】删除操作

    删除表内数据,用 delete.格式为: delete from 表名 where 删除条件; 实例:删除学生表内姓名为张三的记录. delete from student where T_name ...