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
8月28日
lilitu LV6
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日