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. python - 中文编码/ASCII

    Python 中文编码 为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5.    GB2312(1980年)一共收录了7445个字符,包括6763个汉子和682个其他符号. ...

  2. centos7图形化界面安装KVM虚拟机

    一.检查kvm和libvirt 是否安装 查看内核模块中是否含有kvm lsmod | grep kvm 查看cpu是否支持虚拟化 egrep -c '(vmx|svm)' /proc/cpuinfo ...

  3. EasyGui的一个小例子

    EasyGui的安装:首先下载easyGui安装包,地址链接:https://pan.baidu.com/s/1D8f_eXWn7l8xhcTuEsqZmA 密码:e5z5 安装步骤: 1.进入eas ...

  4. 2017-2018-2 20165325 实验二《Java面向对象程序设计》实验报告

    一.面向对象程序设计-1 1.检查点要求 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 参考 http://www.cnblo ...

  5. mysql5.7 版本中 timestamp 不能为零日期 以及sql_mode合理设置

    ---恢复内容开始--- 摘要: mysql5.7版本相比较之前的版本有很多的特性的增加以及默认配置的改变,在使用中难免会遇到与之前的使用习惯或者项目需求不符的情况.就需要调整相应的变量的值,比如sq ...

  6. Libevent源码分析系列【转】

    转自:https://www.cnblogs.com/zxiner/p/6919021.html 1.使用libevent库     源码那么多,该怎么分析从哪分析呢?一个好的方法就是先用起来,会用了 ...

  7. Mudo C++网络库第二章学习笔记

    线程同步的精要 并发有两种基本的模型: 一种是message passing(消息传递); 另一种是shared memory(共享内存); 在分布式系统中(有多台物理机需要通信), 运行在多台机器上 ...

  8. 029_mac下nginx管理

    一. brew info nginx #查看nginx信息 nginx: stable 1.13.12 (bottled), HEAD Docroot is: /usr/local/var/www T ...

  9. MySQL的数据文件存储

    MySQL的数据文件存储 MyISAM引擎分为:静态.动态和压缩MyISAM三种: 静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型.因为数据表中每一条记录所 ...

  10. CF D. One-Dimensional Battle Ships

    一个set水 + 区间判断个数问题.... #include<iostream> #include<cstdio> #include<cstring> #inclu ...