反射给javabean赋值

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

时间: 2024-08-04 10:49:31

反射给javabean赋值的相关文章

对超多属性的javaBean赋值怎么办?

问题描述 一个实体类其中有几百个变量假如在调用实体类时需要对所有属性赋值,问题来了:对每个属性都set容易出错,而且非常累,有没有好的办法?如果用SQL语句有的会出现数据类型不匹配,人太懒,不想一个一个赋值. 解决方案 难道阁下是用记事本写代码的?解决方案二:用hibernate映射,这样你只需执行查询语句就可以,hibernate会通过反射机制给对应的字段赋值,如果你的项目不适用的hibernate,那么只好自己写反射类了.解决方案三:1.可以用反射.自己懒得写的话,可以用apache Bea

java反射实现javabean转json实例代码_java

ObjectToJson.java 复制代码 代码如下: package com.ObjectToJson; import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Iterator; public class ObjectToJson {

C# 可以利用反射给只读属性赋值吗?

结论:可以 验证demo如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace IconTest { public partial class Form2 :

Java高级特性之反射学习总结

老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值 一. 什么是反射? 二.反射能做什么? 一. 什么是反射? 用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体.或对其fields设值.或唤起其methods. 如果你是一个Android Developer,前辈们都会教导你尽量少用反射,效率太低,

C#反射技术之读取和设置类的属性

要用C#反射技术的话,首先得引入System.Reflection 命名空间,这个命名空间里的类,具有动态加载程序集.类型,动态调用方法.设置和取得属性和字段的值.可以获取类型和方法的信息的功能. 要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法. 1 Class MyClass 2 { 3 private int field; 4 public int Field 5 { 6 get 7 { 8 return this.fi

JavaBean的应用

举例: 首先声明JavaBen的对象,并使用无参数构造方法进行实例化.     UserBean user=new UserBean(); 接着调用setUsername和setUserpass方法对两个属性 赋值:     user.  setUsername(username);     user.  setUserpass(userpass);   1.<jsp:JavaBean>标签         <jsp:javaBean>标签的作用就是声明一个对象,如果这个对象已经存

反射 # sp et-反射:反射是个什么东西,怎么用,什么时候用,具体用法。最好用通俗易懂的话讲解哈

问题描述 反射:反射是个什么东西,怎么用,什么时候用,具体用法.最好用通俗易懂的话讲解哈 反射:本人比木乃,是哪位大师详细讲解反射是个什么东西,能看得见,摸得着吗.怎么用,什么时候用,具体用法.最好用通俗易懂的话讲解哈 解决方案 反射简单来说就是RTTI(运行时刻类型识别)和DC(动态创建). RTTI的典型应用场景:比如说Visual Studio能列举出你引用的某个动态库中都有什么函数,参数是什么,这个动态库显然事先VS不知道它的存在.是运行的时候获取它的类型信息.这个就是RTTI DC的场

Java反射机制的实现详解_java

很多主流框架都使用了反射技术.像ssh框架都采用两种技术 xml做配置文件+反射技术. 与反射有关的类包. java.lang.reflect.*;和java.lang.Class; Java中所有类型(包括基本类型)都对应一个Class对象,这个Class就是java.lang.Class.即每一个类型,在Class中都有一个Class对象跟它对应.Class 没有公共构造方法.注意不是没有,是没有公共的. 如何获得Class对象 复制代码 代码如下: .针对每一个对象.getCalss(),

怎样不通过框架,将javabean映射到数据库中?

问题描述 是通过反射机制实现吗?面试的时候我说通过hibernate,他说效率比较低,因之前的项目没有自己做过映射到数据库.谢谢了! 解决方案 我写过这么一个工具,http://zyn010101.iteye.com/admin/blogs/1562103解决方案二:也许面试官想让你说内存数据库...解决方案三:首先写一段程序,通过读取配置文件的数据源配置(可能是java属性文件,xml 或者txt)判定需要链接的数据库类型(mysql,oracle或者mssql),然后读取数据库信息(需要链接