【Java学习】使用泛型和反射 创建通用的数据库查询方法

原创 2016年08月29日 23:16:40

开始接触数据库编程的时候可能会觉得,不同的数据库表的查询应该对应不同的查询方法,但是这样会非常耗时并且没有意义,这里可以通过反射和泛型来创建一个通用的数据库查询方法。当查询不同的表时,只需要改变查询方法中的参数,当使用不同的数据库时,只需要改变相应文件中URL和DRIVER配置。下面是具体的代码:(注意:实体类中的私有属性名要和数据库表中的属性名完全一致)

public <T> List<T> opQuery(String sql,List<Object> params,Class cls){
    // 装载对象的集合
    List<T> list=new ArrayList<T>();
    // 准备链接
    Connection=null;
    // 准备sql语句的操作对象
    PrepareStatement ps=null;
    // 结果集
    ResultSet rs=null;
    try{
        // 获得链接
        conn=getConnection();
        ps=conn.PrepareStatement();
        // 如果传递的参数不为空
        if(params!=null){
            for(int i=0;i<params.size();i++){
                ps.setObject(i+1,params.get(i));
            }
        }
        // 执行sql语句
        rs=ps.execQuery();
        // 从结果集中获取元数据
        ResultSetMetaData rm=rs.getMetaData();
        // 依次取出数据
        while(rs.next()){
            // 使用反射创建无参数对象
            T m=cls.newInstance();
            //只针对于一行,也就是仅仅创建一个对象  
            for(int i=0;i<rm.getColumnCount;i++){
                // 获得列名
                String clunmnName=rm.getColumnName(i+1);
                // 取出表中数据
                Object value=rs.getObject(i+1);
                // 获取对象的属性
                Filed filed=cls.getDeclaredField(columnName);
                // 赋予操作对象私有属性的权限
                field.setAccessible(true);
                // 给私有对象赋值
                field.set(m,value);
            }
            // 向集合中添加赋值完毕的对象
            list.add(m);

        }
    }catch(Exception e){
        e.printSpacee();
    }finally{
        // 关闭
        closeAll(rs,conn,ps);
    }
    // 返回包含表中所有数据的集合对象
    return list;
}

简要概括:

  • 参数:String sql-查询语句,不同的表查询语句不同,所以这里作为参数;List params-sql语句中可能存在占位符,这个集合就是给占位符提供参数; Class cls-使用反射,要操作的实体类class。
  • 步骤:

    (1)获得数据库连接 Connection conn=DriverManager.getConnection();
    (2) 获得操作sql语句的对象 PrepareStatement ps=conn.prepareStatement();
    (3)结果集对象:ResultSet rs=ps.executeQuery();
    (4)从结果集中获取元数据对象(获得数据库表中列的信息)
    (5)根据表中列名获得对象属性 并将表中值赋给该对象属性
    (6)将对象添加都集合中返回

一般这段代码是作为数据库底层操作的方法,通常被其他数据库操作类调用,如下:

    public List<Users> search(){
        // 准sql语句
        String sql="select * from users;";
        List<Users> list=null;
        list=opQuery(sql, null, Users.class);
        return list;
    }

这样,在业务逻辑层中,就可以直接调用了,调用代码如下(假设已经创建了一个Users实体类):

        List<Users> list=studentDao.search();
        for(Users users:list){
            System.out.println(users.toString());
        }
版权声明:本文为博主原创文章,未经博主允许不得转载。

从配置文件读取数据连接信息,利用泛型和java反射机制,写一个公共的增删改查数据库操作类

背景: 最近在学习java,然后就看了spring jdbc。对于菜鸟来说,看得实在头大,然而还有强迫症作祟最是要不得。又要导入common的相关jar包,又要导入mysql的jar包,还要导入spr...
  • mona1990
  • mona1990
  • 2016年06月16日 16:47
  • 1793

JDBC(六) 编写通用的更新和查询方法

对于C(创建),U(更新),D(删除)都属于更新操作,对于R(读取查询)属于查询操作。这里编写两个通用的更新和查询方法。更新更新简单,只需要传入对应的sql和sql的占位符,然后执行更新就可以了。/*...
  • qq_25201665
  • qq_25201665
  • 2016年08月23日 13:37
  • 2160

Java反射及其在开发数据库上面的运用

一、什么是反射机制          简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,      那么就可以通过反射机制来获得类的所有信息。  二、哪里用到反...
  • bigtree_3721
  • bigtree_3721
  • 2016年03月14日 14:21
  • 795

java使用反射实现对数据库的增删改查

CurrentUtil 是一个分页工具类  在查找的时候使用 接口 package com.dao; import java.util.List; import com.u...
  • baidu_37789214
  • baidu_37789214
  • 2017年06月20日 19:14
  • 1138

java通过反射实现数据库的编写

通过反射机制实现数据库的编写: package com.demo.db; import java.lang.reflect.Field; import java.lang.reflect.Invo...
  • u012083681
  • u012083681
  • 2013年12月23日 22:28
  • 1096

java反射实现数据库操作Dao

  • 2014年05月08日 23:10
  • 10KB
  • 下载

利用java的反射机制实现通用dao

java的反射机制前面已经讲过,这里不再赘述,这篇文章将会利用反射,来实现一个通用的dao层。 1 一般情况下的dao层我们先来看一下,通常,我们是如何写dao的。public class Perso...
  • qq_31655965
  • qq_31655965
  • 2016年08月15日 17:27
  • 1873

用DapperExtensions和反射来实现一个通用搜索

前言   搜索功能是一个很常用的功能,当然这个搜索不是指全文检索,是指网站的后台管理系统或ERP系统列表的搜索功能。常见做法一般就是在搜索栏上加上几个常用字段来搜索。代码可能一般这样实现 St...
  • feng020a
  • feng020a
  • 2017年03月08日 20:31
  • 1066

java的hibernate框架操作数据库使用泛型T

此篇文章主要是演示使用java的泛型T来写一个公共的BaseDao实现对数据库的基本操作,增删改查,由于博主水平有限,有错之处望指出改正 hibernate框架版本3.3 package co...
  • qq_32502511
  • qq_32502511
  • 2017年02月19日 19:39
  • 511

Java数据库通用查询及封装

Java数据库通用查询及封装 时常在网上看到,有关Java数据通用查询及封装的技术文章,前些日我在看书时突然想起以前怎么写jdbc查询的,好像当时没理顺,昨天晚上花了点时间,复习了一下写了两种通用数...
  • yangxueyong
  • yangxueyong
  • 2011年01月12日 00:37
  • 3606
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java学习】使用泛型和反射 创建通用的数据库查询方法
举报原因:
原因补充:

(最多只允许输入30个字)