JAVA从数据库查出来的数据放到实体类想用反射的方法给他们赋值,怎么做?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA从数据库查出来的数据放到实体类想用反射的方法给他们赋值,怎么做?相关的知识,希望对你有一定的参考价值。

说一个大概思路吧:
1.读取数据:从数据库中读取数据的同时,拿到元数据,即metadata;
2.实例化:通过类名,利用反射 实例你的实体类(类名可以和表名保持一致,这样就不用写额外的
映射了),如果你只是想通过反射赋值的话,你也可以直接new个类;
3.方法调用:通过元数据,利用反射 得到你的set方法(方法名可以和字段名保持一致,否则你要写
出映射关系);追问

为什么直接过去get方法可以,过去set时报错怎么办。。

追答

可否把错误信息贴出来
兄弟,我看你的问题很眼熟,你是不是在百度知道问过好几次反射的问题呀,另外,我猜你用的是小米手机 ^^

追问

连手机都可以猜到,大哥不要黑我呀,我是个苦逼的程序猿。。

追答

争取帮你搞定
把你的testBean这个类的源码贴出来,尤其是set方法这块儿

追问

字段就是private类型的所以才建的get和set方法

追答

你的用法有问题,这样写

//因为你的set方法是有参数的,这里要写上参数类型
Method chap = testBean.class.getDeclaredMethod("setS1",String.class);
//同理,你要把值传给set方法
Object obj1 = chap.invoke(sod,"小米手机");

参考技术A so esay
String path="com.wm.model.User";
Class clazz = class.forName(path);
User a=(User)clazz.new.newinstance(); //User类一定要有个无参构造函数
Method a = clazz.getMethod("SetName", String.class);
a.invoke(a,"张三");
这样就把值传到name里了追问

哥哥clazz.new.newinstance()是什么。。
我这个复制过来报错!

java反射实现前端接收实体对象,去除“null”字符串

从前台输入的的json 格式数据。转换成对应的实体类后。 可能会出现把null 转换成“null”字符串。这样的数据在存入数据库是可能会因为数据格式,存入时会有问题。实体字段多,修改有很麻烦。所以需要统一编辑处理下。

实体类
package com.tansun.ider.model.vo;

public class XXXXVO {
private String returnCode;
private String customerNo;
public String getReturnCode() {
return returnCode;
}
public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
}
public String getCustomerNo() {
return customerNo;
}
public void setCustomerNo(String customerNo) {
this.customerNo = customerNo;
}

@Override
public String toString() {
    return "XXXXVO [returnCode=" + returnCode + ", customerNo=" + customerNo + "]";
}

}

数据转换类

/**
 * 把vo类中String类型的参数的null值或"NULL","null"转化成空字符串
 * @param obj
 * @return
 */
public static Object getReflectObjectTransString(Object obj) throws Exception{
    Class<? extends Object> classz = obj.getClass();
    Field[] fields=classz.getDeclaredFields();
    for(Field field:fields){
        if(String.class == field.getType()){
            // 属性参数值首字母转成大写
            char[] cs=(field.getName()).toCharArray();
            cs[0]-=32;
            String methodGetName = "get"+String.valueOf(cs);
            String methodSetName = "set"+String.valueOf(cs);
            Method getMethod = classz.getMethod(methodGetName, null);
            Method setMethod = classz.getMethod(methodSetName, String.class);
            Object value = getMethod.invoke(obj, null);
            if(null == value || "NULL".equals((String)value) || "null".equals((String)value))
            {
                setMethod.invoke(obj, "");
            }
        }
    }   
    return obj;
}

以上是关于JAVA从数据库查出来的数据放到实体类想用反射的方法给他们赋值,怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

从数据库读取数据后利用反射为对应的实体类的属性赋值

javaWeb中使用反射机制为数据库中表生成的实体类的的对象赋值?

想用java实现一个无限级树型菜单,数据库是这样设计的:id,pid(父id),name.用递归调用,要一次性加载.

Java的SpringMVC框架操作数据库,一定要建立对应的实体类吗,能不能通过直接嵌入sql命令方式操作数据库?

在mysql数据库中查出来的只有时间日期而没有时间

django 利用ORM对单表进行增删改查