package net.lamp.blog.base;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
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 sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
/**
* 操作数据表数据dao的基类
* 利用dbutil中的
* QueryRunner:重点在查询上,将查询的结果封装成对象(对象的集合)
* ResultSetHandler:结果集的处理器
* BeanHandler:封装成指定类型的对象-new BeanHandler<T>(clazz) 如果得到多条记录,根据第1条生成对象
* BeanListHandler:封装成指定类型的对象的list new BeanListHandler<T>(clazz)
* ScalarHandler:返回一 个单一的值, 取第一条记录的第一个字段的值(你也可以指定字段)
* @author zhaoxinguo
*/
public abstract class BaseDao<T> {
private QueryRunner runner = new QueryRunner();
private Class<T> tClass;
public BaseDao(){
Class childClass = this.getClass();//是实现类的class对象
Type type = childClass.getGenericSuperclass();
ParameterizedTypeImpl typeImpl = (ParameterizedTypeImpl) type;
Type types = typeImpl.getActualTypeArguments()[0];
tClass = (Class<T>)types;
}
/**
* 对数据表的insert,delete,update
* @param conn
* @param sql
* @param params
*/
public void update(Connection conn,String sql,Object...params){
try {
runner.update(conn, sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 查询一条:返回一个对象:
* @param conn
* @param sql
* @param params
* @return
*/
public T Query(Connection conn,String sql,Object...params){
try {
T t = runner.query(conn, sql, new BeanHandler<T>(tClass), params);
return t;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 查询所有:返回以供集合:
* @param conn
* @param sql
* @param params
* @return
*/
public List<T> queryForList(Connection conn,String sql,Object...params){
try {
return runner.query(conn, sql, new BeanListHandler<T>(tClass), params);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 查询总记录数:
* @param conn
* @param sql
* @return
* @throws SQLException
*/
public Integer queryCount(Connection conn,String sql ,Object...obj) throws SQLException{
Integer count = runner.query(conn,sql, new ResultSetHandler<Integer>(){
@Override
public Integer handle(ResultSet rs) throws SQLException {
rs.next();
return rs.getInt(1);
}
},obj);
return count;
}
}
最近下载更多
cheung524071 LV8
2023年8月23日
你们的代码都是我的了 LV16
2022年12月5日
SQ2930501923 LV14
2022年10月14日
你好呀123456 LV1
2022年10月13日
bafjkdnvgj LV1
2022年6月26日
微信网友_5944522042150912 LV1
2022年5月4日
dxp0216 LV1
2021年8月31日
蔡 LV10
2021年6月12日
万分史密斯 LV1
2021年6月12日
云生123456 LV6
2021年6月8日
最近浏览更多
Eddie233 LV6
2024年8月28日
lilitu LV6
2024年5月29日
pangzhihui LV14
2023年12月23日
cheung524071 LV8
2023年8月23日
wanglongfei2 LV2
2023年6月15日
mishidelu
2023年5月28日
暂无贡献等级
微信网友_6488247163490304 LV1
2023年5月23日
tang0209 LV1
2023年5月15日
information LV2
2023年4月27日
yubuzhuo LV2
2023年2月27日

