public abstract class DAO<T> {
//QueryRunner: 实现sql的操作
private QueryRunner runner = new QueryRunner();
//定义一个变量接受
public Class<T> clazz = null;
{
//获取T 的Class对象,获取运行时类对象,在被子类继承时候才确定
//获取子类的类型(继承:在子类中)
Class clazz2 = this.getClass();
//获取父类的泛型(我们本身继承的就是带泛型的父类,可以强制转换)
Type genericSuperclass = clazz2.getGenericSuperclass();
//带泛型的类型
ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
//一个类可能有多个泛型k v t ,获取真是泛型返回的一个数组,
// 我们明确自己只有一个泛型,直接取第一个即可
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
//取出第一元素,获取具体泛型的类型 (建立起联系,给强转提供必要条件)
clazz = (Class<T>) actualTypeArguments[1];
}
/***
* DBUtils 实现通用增删改操作
* @param conn
* @param sql
* @param args
* @return 记录增删改操作(mysql被影响行数)
* @throws Exception
*/
public int update(Connection conn, String sql, Object... args) {
int count = 0;//记录增删改操作数(被影响行数)
try {
count = runner.update(conn, sql, args);
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
/*
下面是ResultSetHandler的接口的各种实现类的用法(7个实现类)
beanHandler(); //针对JavaBean
beanListHandler(); //针对多个JavaBean
arrayHandler(); //针对数组
arrayListHandler(); //针对数组
mapHandler(); //针对Map
mapListHandler(); //针对Map
scalarHandler(); //针对Long
* */
/**
* 返回一个bean 对象
* @param conn
* @param sql
* @param args
* @return
*/
public T getBean(Connection conn, String sql, Object... args) {
BeanHandler<T> handler = new BeanHandler<>(clazz);
T t = null;
try {
t = runner.query(conn, sql, handler, args);
} catch (SQLException e) {
e.printStackTrace();
}
return t;
}
/**
* 获取多个bean 对象 list
* @param conn
* @param sql
* @param args
* @return list<T>
*/
public List<T> getBeanList(Connection conn, String sql, Object... args) {
BeanListHandler<T> handler = new BeanListHandler<T>(clazz);
List<T> list = null;
try {
list = runner.query(conn, sql, handler, args);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 获取单一值,专门用来执行像 select count(*)...这样的sql语句
* @param conn
* @param sql
* @param args
* @return
*/
public Object getValue(Connection conn, String sql, Object... args) {
ScalarHandler<T> handler = new ScalarHandler<>();
Object count = null;
try {
count = runner.query(conn, sql, handler, args);
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
}
11-15
1543
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-19
630
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交