反射给javabean赋值
2016-08-28 14:08
169 查看
package org.acooly.thrift.demo.client;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class reflect {
public static void main(String[] args) throws Exception {
getBean(Student.class);
}
// 泛型方法
public static <T> List<T> getBean(Class<T> clazz) throws Exception {
ArrayList<T> list = new ArrayList<T>();
Connection con = null;
// 注册JDBC驱动,JAVA1.5以后 JDBC自动加载驱动了 所以这句代码可以省略;
Class.forName("com.mysql.jdbc.Driver").newInstance();
// 提供地址用户名密码并获得连接对象
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test",
"root", "");
// 有Connection对象创建PreparedStatement
PreparedStatement ps = con
.prepareStatement("select * from orderitem o where o.itemid >?");
// 设置参数,参数索引位置是从1开始(Hibernate参数索引位置是从0开始)
ps.setInt(1, 10);// 过滤itemid大于10的记录
ResultSet rs = ps.executeQuery();
// 循环读取结果集的每一行的每一列
Field[] fields = clazz.getDeclaredFields();
while (rs.next()) {
// 获得无参构造对象方法创建实例
T javabean = clazz.getConstructor(new Class[] {}).newInstance();
for (Field field : fields) {
String fieldName = field.getName();
Object value = null;
System.out.println(field.getType());
System.out.println(String.class);
System.out.println(Date.class);
// 根据字段类型决定结果集中使用哪种get方法从数据中取到数据
if ((String.class).equals(field.getType())) {
value = rs.getString(fieldName);
if (value == null) {
value = "";
}
}
if (field.getType().equals(int.class)) {
value = rs.getInt(fieldName);
}
if (field.getType().equals(Date.class)) {
value = rs.getDate(fieldName);
}
// 获得属性的首字母并转换为大写,与setXXX对应
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setMethodName = "set" + firstLetter
+ fieldName.substring(1);
Method setMethod = clazz.getMethod(setMethodName,
new Class[] { field.getType() });
setMethod.invoke(javabean, new Object[] { value });// 调用对象的setXXX方法
}
list.add(javabean);
}
// 关闭
con.close();
ps.close();
return list;
}
}
参考文章:
http://blog.csdn.net/yu445375039/article/details/7578847
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1732029
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class reflect {
public static void main(String[] args) throws Exception {
getBean(Student.class);
}
// 泛型方法
public static <T> List<T> getBean(Class<T> clazz) throws Exception {
ArrayList<T> list = new ArrayList<T>();
Connection con = null;
// 注册JDBC驱动,JAVA1.5以后 JDBC自动加载驱动了 所以这句代码可以省略;
Class.forName("com.mysql.jdbc.Driver").newInstance();
// 提供地址用户名密码并获得连接对象
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test",
"root", "");
// 有Connection对象创建PreparedStatement
PreparedStatement ps = con
.prepareStatement("select * from orderitem o where o.itemid >?");
// 设置参数,参数索引位置是从1开始(Hibernate参数索引位置是从0开始)
ps.setInt(1, 10);// 过滤itemid大于10的记录
ResultSet rs = ps.executeQuery();
// 循环读取结果集的每一行的每一列
Field[] fields = clazz.getDeclaredFields();
while (rs.next()) {
// 获得无参构造对象方法创建实例
T javabean = clazz.getConstructor(new Class[] {}).newInstance();
for (Field field : fields) {
String fieldName = field.getName();
Object value = null;
System.out.println(field.getType());
System.out.println(String.class);
System.out.println(Date.class);
// 根据字段类型决定结果集中使用哪种get方法从数据中取到数据
if ((String.class).equals(field.getType())) {
value = rs.getString(fieldName);
if (value == null) {
value = "";
}
}
if (field.getType().equals(int.class)) {
value = rs.getInt(fieldName);
}
if (field.getType().equals(Date.class)) {
value = rs.getDate(fieldName);
}
// 获得属性的首字母并转换为大写,与setXXX对应
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setMethodName = "set" + firstLetter
+ fieldName.substring(1);
Method setMethod = clazz.getMethod(setMethodName,
new Class[] { field.getType() });
setMethod.invoke(javabean, new Object[] { value });// 调用对象的setXXX方法
}
list.add(javabean);
}
// 关闭
con.close();
ps.close();
return list;
}
}
参考文章:
http://blog.csdn.net/yu445375039/article/details/7578847
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1732029
相关文章推荐
- 利用反射实现JavaBean的自动赋值
- 利用反射实现JavaBean的自动赋值(六)
- 反射给javabean赋值
- 利用反射实现JavaBean的自动赋值
- java读取xml获得list并通过反射赋值给javabean
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
- c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值
- 用反射解决 MVC4 非自增主键赋值后 无法保存的问题
- java jsp8 javabean 反射
- 反射的应用--根据控件名取得控件,获取值及赋值
- 基础加强_JavaBean,反射和内省,BeanUtils工具
- 利用反射机制批量获取request中的参数,并赋值
- 利用Java反射快速封装JavaBean属性
- 反射 界面控件赋值
- 反射机制的概述和字节码对象的获取方式 JavaBean的概述&BeanUtils的使用 反射操作构造方法、成员方法、成员属性
- 利用反射把DataTable自动赋值到Model实体(自动识别数据类型)
- C#中字段、属性、只读、构造函数赋值、反射赋值的相关
- 黑马程序员--Java基础加强--10.【PropertyDescriptor操作JavaBean VS 反射操作Java类】【个人总结】
- java使用反射机制进行对象间数据赋值获取
- 反射技术实现DataTable到实体类的赋值操作