首页>代码>java基于MVC的简单博客系统>/Blog/src/net/lamp/blog/base/BaseDao.java
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日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友