JDBC的一个简单工具类

package com.zh.dao;

import com.zh.util.DBUtil;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

public class BaseDao {
    //全查询
    public static  <T> List<T> findAll(String sql, Class<T> cla, Object... obj){
        //获取数据库连接
        Connection conn = DBUtil.getConnection();
        //定义预处理对象
        PreparedStatement ps = null;
        //定义结果集对象
        ResultSet rs = null;
        //定义返回集合
        ArrayList<T> list=new ArrayList<>();
        try {
            //实例化预处理对象
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < obj.length; i++) {
                //如果有参数传过来,那么就写入
                ps.setObject(i+1,obj[i]);
            }
            //执行,返回结果集
            rs = ps.executeQuery();
            //如果结果集里面有数据那么就一直拿
            while (rs.next()){
                //实例化指定对象
                T t=rsToBean(rs,cla);
                //将指定对象放入集合
                list.add(t);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭资源
            DBUtil.close(conn,ps,rs);
        }
        return list;
    }
    //单个查询
    public static  <T> T findOne(String sql, Class<T> cla, Object... obj){
        List<T> list = findAll(sql, cla, obj);
        if (list.size()>0){
            return list.get(0);
        }
        return null;
    }
    //增删改
    public static int editBase(String sql,Object... obj){
        //获取数据库连接
        Connection conn = DBUtil.getConnection();
        //定义预处理对象
        PreparedStatement ps=null;
        try {
            //实例化预处理对象
            ps = conn.prepareStatement(sql);
            //将参数写入
            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i+1,obj[i]);
            }
            //增删改执行
            return ps.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭资源
            DBUtil.close(conn,ps);
        }
        return -1;
    }

    //将指定对象写入对应的数据
    private static <T> T rsToBean(ResultSet rs, Class<T> cla) {
        T t=null;
        try {
            //实例化指定对象
            t=cla.newInstance();
            //获取源数据
            ResultSetMetaData metaData = rs.getMetaData();
            //获取到列数
            int columnCount = metaData.getColumnCount();
            //循环将每列数据放入对应的列名里
            for (int i = 0; i < columnCount; i++) {
                //获取列名
                String columnLabel = metaData.getColumnLabel(i + 1);
                //通过列名得到对应的数据
                Object object = rs.getObject(columnLabel);
                //通过反射将列名与javaBean属性对应
                Field declaredField = cla.getDeclaredField(columnLabel);
                //操作权限
                declaredField.setAccessible(true);
                //将数据写入
                declaredField.set(t,object);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return t;
    }
}

 

 

以上注释纯属个人理解,若有错误欢迎指正

posted @ 2020-12-31 11:49  ZHBlog  阅读(57)  评论(0编辑  收藏  举报