(3)JDBC——————回想大学写的JDBC,我酸了

大学期间自己写的jdbc和工作后写的jdbc看完后我酸了!接下来介绍一下这个模板的层次结构和代码的解析。

  • 这是一套比较完整的JDBC模板,用的是德鲁伊连接池,项目结构为:
    在这里插入图片描述
    在这里插入图片描述
  • 主要层次结构为:
    在这里插入图片描述
  • 代码如下
  • 【BaseDAO.java】
package com.dao;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * 定义一个用来被继承的对数据库进行基本操作的Dao
 *
 * @author Tommey周
 * @create 2020-04-11 13:02
 */
public abstract class BaseDao<T> {
   

    private QueryRunner queryRunner = new QueryRunner();

    // 定义一个变量来接收泛型的类型
    private Class<T> type;

    // 获取T的Class对象,获取泛型的类型,泛型是在被子类继承时才确定
    public BaseDao() {
   
        // 获取子类的类型
        Class clazz = this.getClass();
        // 获取父类的类型,ParameterizedType表示的是带泛型的类型,getGenericSuperclass()用来获取当前类的父类的类型
        ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass();
        // 获取具体的泛型类型 getActualTypeArguments获取具体的泛型的类型,这个方法会返回一个Type的数组
        Type[] types = parameterizedType.getActualTypeArguments();
        // 获取具体的泛型的类型
        this.type = (Class<T>) types[0];
    }

    /**
     * 通用的增删改操作
     */
    public int update(Connection conn, String sql, Object... params) {
   
        int count = 0;
        try {
   
            count = queryRunner.update(conn, sql, params);
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return count;
    }

    /**
     * 查询一个对象
     */
    public T queryBean(Connection conn, String sql, Object... params) {
   
        T t = null;
        try {
   
            t = queryRunner.query(conn, sql, new BeanHandler<T>(type), params);
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return t;
    }

    /**
     * 查询所有对象
     */
    public List<T> queryBeanList(Connection conn, String sql, Object... params) {
   
        List<T> list = null;
        try {
   
            list = queryRunner.query(conn, sql, new BeanListHandler<T>(type), params);
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 查询单一值的方法,例如:count(1)这样的sql语句
     */
    public Object queryValue(Connection conn, String sql, Object... params) {
   
        Object count 
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值