首页>代码>jsp+mysql开发尚硅谷图书后台管理系统项目源码>/项目实战:尚硅谷书城/阶段源码/book03-登录注册完成/src/com/atguigu/dao/impl/BaseDaoImpl.java
package com.atguigu.dao.impl;

import java.lang.reflect.ParameterizedType;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.atguigu.util.JDBCUtils;

/**
 * 我们使用的是DBUtil操作数据库
 * 
 * @author wzg
 *
 * @param <T>
 */
public abstract class BaseDaoImpl<T> {

	/**
	 * DBUtils操作数据库需要使用的类
	 */
	protected QueryRunner queryRunner;
	/**
	 * 保存BaseDaoImpl类的泛型对象class类型
	 */
	protected Class<T> type;

	@SuppressWarnings("unchecked")
	public BaseDaoImpl() {
		// 创建一个QueryRunner对象实例
		queryRunner = new QueryRunner();
		// 获取父类中带有泛型的父类的class类型
		ParameterizedType supperClass = (ParameterizedType) getClass()
				.getGenericSuperclass();
		// 获取泛型中的具体的类型的class
		type = (Class<T>) supperClass.getActualTypeArguments()[0];
	}

	/**
	 * 执行update,delete,insert语句
	 * 
	 * @param sql
	 *            要执行的sql语句
	 * @param params
	 *            执行的sql语句的参数
	 * @return 返回影响的行数
	 */
	public int update(String sql, Object... params) {
		Connection connection = null;
		int updateCount = 0;
		try {
			connection = JDBCUtils.getConnection();
			updateCount = queryRunner.update(connection, sql, params);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.closeConnection(connection);
		}
		return updateCount;
	}

	/**
	 * 执行查询语句,只返回第一个记录
	 * 
	 * @param sql
	 *            要执行的sql语句
	 * @param params
	 *            执行的sql语句的参数
	 * @return 返回查询对象的具体实例 <br/>
	 *         如果查询的数据不存在,则返回null<br/>
	 *         查询失败也返回null
	 */
	public T queryOne(String sql, Object... params) {
		Connection connection = null;

		try {
			// 获取数据库连接
			connection = JDBCUtils.getConnection();
			// 执行查询语句
			return queryRunner.query(connection, sql, new BeanHandler<T>(type),
					params);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.closeConnection(connection);
		}

		return null;
	}

	/**
	 * 执行查询语句,返回查询后的对象实例集合
	 * 
	 * @param sql
	 *            要执行的sql语句
	 * @param params
	 *            sql语句的参数
	 * @return 返回的是查找到的对象集合<br/>
	 *         查询失败返回null
	 */
	public List<T> queryList(String sql, Object... params) {
		Connection connection = null;

		try {
			// 获取数据库连接
			connection = JDBCUtils.getConnection();
			// 执行查询语句
			return queryRunner.query(connection, sql, new BeanListHandler<T>(
					type), params);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.closeConnection(connection);
		}

		return null;
	}

}
最近下载更多
2021900  LV1 2023年9月14日
dsfewrfwef  LV4 2022年12月22日
酒酒清欢  LV8 2022年12月2日
893698834  LV1 2022年11月17日
mmy12345  LV1 2022年9月29日
levelhspdf  LV7 2022年6月22日
邬松桥  LV11 2022年6月15日
CHENHAOJUDA  LV10 2022年6月14日
今晚都别睡啦  LV8 2022年4月6日
wanglinddad  LV54 2022年3月17日
最近浏览更多
zhangmi8  LV1 4月23日
lsglsg9  LV22 3月27日
duoduo1234  LV2 1月16日
暂无贡献等级
WBelong  LV7 2023年12月27日
17693282606  LV11 2023年12月26日
asddwh  LV12 2023年12月26日
微信网友_6786215447367680  LV4 2023年12月23日
Aban-beautiful 2023年12月16日
暂无贡献等级
komorebi123987  LV5 2023年12月13日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友