java封装resultset_ResultSet自动封装到javaBean | 学步园

以前再查询数据库记录集的时候,常常要对所返回的rs记录集封装到对应的javaBean,对于这一些繁琐而又简单的事情,不想为而为之,如果所查询出来的字段非常的多,那么我们在封装的时候就会写一大堆看似重复的代码。

于是,本人就想,能不能把这些大量重复的代码,写一个通用的类,把他们封装起来呢?~经过本人的研究,的确有办法的,那就是要用到以前本人基本没基础的反射和范型----------------------

/**

* @泛型类

* @author 陈罗志

* @创建日期: 2011-8-1

* @联系邮箱:646749375@qq.com

* @功能说明1: 利用反射机制从ResultSet自动绑定到JavaBean。

*/

public class ReflectHelper {

/**

*

* @param clazz 所要封装的javaBean

* @param rs 记录集

* @return ArrayList 数组里边装有 多个javaBean

* @throws Exception

* @说明:利用反射机制从ResultSet自动绑定到JavaBean;根据记录集自动调用javaBean里边的对应方法。如果javaBean与数据库字段类型不匹配,按String类型封装

*/

public List getList(Class clazz, ResultSet rs) {

Field field = null;

List lists = new ArrayList();

// 取得类里边的所有方法

try {

// 取得ResultSet列名

ResultSetMetaData rsmd = rs.getMetaData();

// 获取记录集中的列数

int counts = rsmd.getColumnCount();

// 定义counts个String 变量

String[] columnNames = new String[counts];

// 给每个变量赋值

for (int i = 0; i < counts; i++) {

columnNames[i] = rsmd.getColumnLabel(i + 1);

}

// 变量ResultSet

while (rs.next()) {

T t = clazz.newInstance();

// 反射, 从ResultSet绑定到JavaBean

for (int i = 0; i < counts; i++) {

// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了

Object value = rs.getObject(columnNames[i]);

//这里是获取数据库字段的类型

Class> dbType = value.getClass();

//设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型

field = clazz.getDeclaredField(columnNames[i]);

Class> beanType = field.getType();

//如果发生从数据库获取到得类型跟javaBean类型不同,按String类型取吧

if(beanType!=dbType){

value = rs.getString(columnNames[i]);

}

String setMethodName = "set" + firstUpperCase(columnNames[i]);

// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;

Method m = t.getClass().getMethod(setMethodName,beanType);

// 第二个参数是传给set方法数据;如果是get方法可以不写

m.invoke(t, value);

}

lists.add(t);

}

} catch (Exception e) {

e.printStackTrace();

return null;

}

return lists;

}

//首写字母变大写

public static String firstUpperCase(String old){

return old.substring(0, 1).toUpperCase()+old.substring(1);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值