package dao;
import Utils.DruidUtils;
import Utils.JDBCUtils;
import bean.Student;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import javax.lang.model.type.PrimitiveType;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Handler;
public abstract class BaseDAO<T> {
private QueryRunner queryRunner = new QueryRunner();
private Class<T> clazz;//父类泛型类型
{
//获取当前对象的父类泛型类型操作
Type genericSuperclass = this.getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) genericSuperclass;//参数化类型
Type[] actualTypeArguments = pt.getActualTypeArguments();//获取实际存在的类型参数
clazz = (Class<T>) actualTypeArguments[0];
}
/**
* 通用的增删改方法
*
* @param conn 连接
* @param sql sql命令
* @param args 占位符填充参数
* @return 影响行数
*/
public int update(Connection conn, String sql, Object... args) {
try {
return queryRunner.update(conn, sql, args);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 查询一条数据
*
* @param conn 连接
* @param sql sql命令
* @param args 占位符填充参数
* @return 返回一个对象结果
*/
public T queryOne(Connection conn, String sql, Object... args) {
try {
return queryRunner.query(conn, sql,new BeanHandler<>(clazz),args);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 查询多条数据
*
* @param conn 连接
* @param sql sql命令
* @param args 占位符填充参数
* @return 返回一个对象的集合
*/
public List<T> queryList(Connection conn, String sql, Object... args) {
try {
return queryRunner.query(conn,sql,new BeanListHandler<T>(clazz),args);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public <E> E query(Connection conn,String sql,Object ...args){
try {
return queryRunner.query(conn,sql,new ScalarHandler<>(),args);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
获取父类泛型操作&通用的操作数据库增删改方法
于 2023-11-13 16:54:39 首次发布