SubList分页-007-Dao类

1.这个类封装了基本的CRUD 操作,以供子类使用。
- C reate new records
- R etrieve existing records
- U pdate existing records
- D elete existing records.)

2.当前DAO直接在方法中获取数据库连接
3. 整个DAO采取DBUtils解决方案

测试代码

package top.itcourse.page.dao;

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

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 top.itcourse.page.utils.JDBCUtils;


/**
 * 1.
 * 这个类封装了基本的CRUD(
 *  C reate new records
 *  R etrieve existing records
 *  U pdate existing records
 *  D elete existing records.)
 * 操作,以供子类使用。
 * 
 * 2.
 * 当前DAO直接在方法中获取数据库连接
 *
 *3.
 *整个DAO采取DBUtils解决方案
 *
 * @param <T>:当前DAO处理的实体类型
 */

/*
 * 
 */
public class DAO<T> {
    //dbutils对象
    private QueryRunner queryRunner = new QueryRunner();

    //对应查询的返回结果的类的class
    private Class<T> clazz;

    //在构造函数里初始化clazz(用的时候是子类在用)
    public DAO() {
        //一、getSuperclass   返回直接继承的父类(由于编译擦除,没有显示泛型参数)
        //二、getGenericSuperclass  返回直接继承的父类(包含泛型参数)
        Type superClass = getClass().getGenericSuperclass();

        //ParameterizedType是一个接口,这个类可以用来检验泛型是否被参数化
        if( superClass instanceof ParameterizedType ) { //被参数化了
            ParameterizedType pt = (ParameterizedType)superClass;
            //getActualTypeArguments:返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class,因为可能有多个,所以是数组。
            Type[] typeArgs = pt.getActualTypeArguments();
            if( typeArgs != null && typeArgs.length > 0 ) {
                if( typeArgs[0] instanceof Class ) {
                    clazz = (Class<T>) typeArgs[0];
                }
            }
        }
    }

    /**
     * 该方法包含了INSERT、DELETE、UPDATE操作。
     * @param sql:执行的SQL语句
     * @param args:填充SQL语句的占位符
     */
    public void update(String sql,Object ... args) {
        Connection con = null;
        try {
            con = JDBCUtils.getConnection();
            //dbutils里面封装的update方法,很刺激:连接,SQL,参数
            queryRunner.update(con, sql, args);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtils.relase(con);
        }
    }

    /**
     * 
     * @param sql:执行的SQL语句
     * @param args:填充SQL语句的占位符
     * @return:返回查询结果的一个实体类对象
     */
    public T get(String sql,Object ... args) {
        Connection con = null;
        try {
            con = JDBCUtils.getConnection();
            //dbutils中封装的方法:连接,SQL,需要返回的class(new BeanHandler<>(Class对象),占位参数
            return queryRunner.query(con, sql, new BeanHandler<>(clazz), args);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtils.relase(con);
        }
        return null;
    }

    /**
     * 
     * @param sql:执行的SQL语句
     * @param args:填充SQL语句的占位符
     * @return:返回查询结果的多个实体类对象
     */
    public List<T> getForList( String sql,Object ... args ) {
        Connection con = null;

        try {
            con = JDBCUtils.getConnection();
            //返回查询结果的List
            return queryRunner.query(con, sql, new BeanListHandler<>(clazz), args);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtils.relase(con);
        }
        return null;
    }

    /**
     * 
     * @param sql:执行的SQL语句
     * @param args:填充SQL语句的占位符
     * @return:返回查询结果的某一个字段的值(一个类是一条完整的记录)
     */
    public <E> E getForValue(String sql, Object ... args ) {
        Connection con = null;

        try {
            con = JDBCUtils.getConnection();
            //返回某个值的查询操作
            return (E) queryRunner.query(con, sql,new ScalarHandler(),args);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

}

源码下载

关注下方的微信公众号,回复:java_div_page.code





欢迎加入交流群:451826376


更多信息:www.itcourse.top

完整教程PDF版本下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值