专栏首页个人随笔Java工具类 通过ResultSet对象返回对应的实体List集合

Java工具类 通过ResultSet对象返回对应的实体List集合

自从学了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()

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 玩转SpringCloud(F版本) 四.路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的...

    房上的猫
  • 初识Windows程序

    window 操作系统中,处处是窗体 简单 强大 方便 灵活 步骤 新建项目  项目类型 visual C#项目 模板 window应用程序 用partial ...

    房上的猫
  • ADO.NET查询和操作数据库

    stringbuilder 类 stringbuilder类:用来定义可变字符串 stringbulider Append(string value)   在结...

    房上的猫
  • 项目里使用MVP和Dagger的有福了!!!绝对提升效率

    原文地址: http://www.jianshu.com/p/56cf17ab896d

    用户2965681
  • Elasticsearch聚合 之 Ip Range IP地址范围聚合

    相对于range和date range,这个聚合就是能够表示IP的范围。 普通IP模式 DSL命令: { "aggs":{ "ip...

    用户1154259
  • 竞争优势的来源 ——全渠道物流服务生态系统

    “世界潮流,浩浩荡荡,顺之者昌,逆之者亡!”借用孙中山先生的这句话来形容当今“互联网+”的汹涌潮流最贴切不过,传统行业正在以裂变的速度接受着新一轮互联网浪潮的冲...

    数商云
  • 树莓派玩耍记

    这篇文章是自己入手树莓派之后的一些使用记录 前些天看 v2ex 上有人讨论树莓派,于是出于好奇在淘宝上淘了一只树莓派来玩玩 体积超级小… ? 一个板子,...

    lestat
  • dotnet 使用 Qpush 快速从电脑到手机推送文字

    在手机打字总不是方便,于是就有了 Qpush 这个工具,通过这个工具可以快速从电脑到手机推送文字。 但是这个工具没有找到客户端,于是我就给他写了一个库,通过这个...

    林德熙
  • webpack实战——打包优化【上】

    在打工过程中,非常耗时的一个工作是使用loader将各种资源进行转译处理,例如常见的使用babel-loader将ES6+语法代码转译为ES5等。代码转移的工作...

    流眸
  • Webpack4教程:使用loader处理scss,图片以及转换JS(第二章)

    今天继续我们的Webpack 4入门教程。在介绍了Webpack的基本概念之后,是时候更深入一点了。这次我们会涉及Webpack中非常强大的一个东西:loade...

    Javanx

扫码关注云+社区

领取腾讯云代金券