自从学了JDBC用多了像一下这种代码:

 
ResultSet rs = this.executeQuery(sql, objs);
List<xxx> list = new Array<xxx>();
if(rs.next()){
xxx x = new xxx();
x.setxxx(rs.getString("xxx"));
x.setsss(rs.getString("sss"));
list.add(x);
}

这类相似的代码每天都在用,每天都在copy,相信大家早就已经烦了

今天!Today!Java程序员的福利来了

最近生病在家闲着无聊写了一个工具类:

  通过传入一个

  ResultSet对象和相应的实体类对象。可返回相应的List集合

  终于不用Ctrl+c  Ctrl+v了!!!!

用到技术:

  Java反射机制

  泛型类

实现思路:

  首先既然是工具类当然要做到 高可用,不然也没什么意义

  既然是通过一个ResultSet对象来返回一个实体集合,是个人都可以想到这个实体类一定是个不确定因素。

  ok , 想到 的是泛型类,定义一个虚拟类型T , 传参进来确切类型后然后通过反射来获得这个类的一系列信息

  然后进入赋值+list.add()操作

我给这个工具类起名叫:DBRsHelp  (发现自己命名水准越来越高了  小小自恋一下下())

废话不多说,上栗子(命名不规范,勿喷):

package cn.news.util;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; import cn.news.dao.BaseDAO;
import cn.news.entity.Users; /**
*
* @author: 房上的猫
*
* @time: 下午3:49:32
*
* @博客地址: https://www.cnblogs.com/lsy131479/
*
*/ //泛型类,T:虚拟类型
public class DBRsHelp<T> {
public List<T> util(T t, ResultSet rs) throws Exception {
// 创建一个对应的空的泛型集合
List<T> list = new ArrayList<T>(); // 反射出类类型(方便后续做操作)
Class c = t.getClass();
// 获得该类所有自己声明的字段,不问访问权限.所有。所有。所有
Field[] fs = c.getDeclaredFields();
// 大家熟悉的操作,不用多说
if (rs != null) {
while (rs.next()) {
// 创建实例
t = (T) c.newInstance();
// 赋值
for (int i = 0; i < fs.length; i++) {
/*
* fs[i].getName():获得字段名
*
* f:获得的字段信息
*/
Field f = t.getClass().getDeclaredField(fs[i].getName());
// 参数true 可跨越访问权限进行操作
f.setAccessible(true);
/*
* f.getType().getName():获得字段类型的名字
*/
// 判断其类型进行赋值操作
if (f.getType().getName().equals(String.class.getName())) {
f.set(t, rs.getString(fs[i].getName()));
} else if (f.getType().getName().equals(int.class.getName())) {
f.set(t, rs.getInt(fs[i].getName()));
}
} list.add(t);
}
}
// 返回结果
return list;
}
     //测试一下下
public static void main(String[] args) throws Exception {
DBRsHelp<Users> util = new DBRsHelp<Users>();
Users u = new Users();
String sql = "select * from news_users";
BaseDAO dao = new BaseDAO();
dao.rs = dao.executeQuery(sql);
List<Users> util1 = util.util(u, dao.rs);
for (Users users : util1) {
System.out.println("uname:" + users.getUname());
System.out.println("upwd:" + users.getUpwd());
System.out.println("ustart:" + users.getUstate());
System.out.println("usessionid:" + users.getUsessionid());
System.out.println("================================================");
}
}
}

成功!!!哈哈哈

写这个工具类还弄出一个笑话,跟大家分享一下:

因为生病的原因一开始写的时候 t.getClass(); 硬生生写成了 toString().getClass()

运行后控制台一直包这个错:

心里一直想着:是啊老子是没这个字段啊,而且实体类也没啊,,,纠结了一天没出结果,晚上睡了一觉,第二天早上起来拿出来代码一看

卧槽,我他妈真煞笔。。。

(C) 房上的猫 。 保留所有权利。
 https://www.cnblogs.com/lsy131479/

如需转载,请注明出处!!!

Java工具类 通过ResultSet对象返回对应的实体List集合的更多相关文章

  1. java工具类之按对象中某属性排序

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  2. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  3. 排名前 16 的 Java 工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  4. 排名前16的Java工具类

    原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...

  5. 干货:排名前16的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  6. 常用高效 Java 工具类总结

    一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...

  7. 几种高效的Java工具类推荐

    本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...

  8. 16 个超级实用的 Java 工具类

    阅读本文大概需要 4 分钟. 出处:alterem juejin.im/post/5d4a25b351882505c105cc6e 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用 ...

  9. 超级实用的 Java 工具类

    超级实用的 Java 工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取 ...

随机推荐

  1. EBS Concurrent Manager(并发管理器)异常处理[final]

    来自:http://blog.itpub.net/35489/viewspace-742191/ 有时候我们在通过 adstpall.sh 关闭应用后,然后再使用adstrtal.sh开启.发现并发 ...

  2. 小强的HTML5移动开发之路(3)——HTML5与HTML4比较

    来自:http://blog.csdn.net/dawanganban/article/details/17652873 在前面介绍了HTML5的新特性,新标签的使用,智能表单设计,引入多媒体对象,C ...

  3. AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题

    解决AngualrJS页面刷新导致异常显示问题 绪 俗话说,细节决定成败,编程亦是如此.编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方.今略举一例,与君共 ...

  4. 【一天一道LeetCode】#55. Jump Game

    一天一道LeetCode系列 (一)题目 Given an array of non-negative integers, you are initially positioned at the fi ...

  5. 【一天一道LeetCode】#42. Trapping Rain Water

    一天一道LeetCode系列 (一)题目 Given n non-negative integers representing an elevation map where the width of ...

  6. Java四种引用类型

    纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 Java从1.2版本开始引入了4种引用,这四种引用的级别由高到低依次为:强引用>软引用>弱引用 ...

  7. 关于oracle表名区分大小写的问题

    oracle不是区分大小写的,是建表的时候是没有去掉双引号.   CREATE TABLE TableName(id number); //虽然写的时候是有大写和小写,但是在数据库里面是不区分的.   ...

  8. Dynamics CRM 通过OData查询数据URI中包含中文的情况

    filter条件如下"?$filter=new_name eq '采购主管' and new_entityname eq 'new_purchaseenquiry' ",如果用这个 ...

  9. 【freeradius】使用radclient调试radius协议

    freeradius 自带了非常好的客户端程序 radtest, radclient 用来模拟和调试设备和通信过程.radtest多用于认证,radclient更为强大一些,认证,计费,coa都可以模 ...

  10. PHP 查询脚本

    POST查询以表格传参数支持中文,GET不支持. POST查询: <?php $id=$_POST["id"];//id(中括号)为传来的参数,$id为php中的变量 //l ...