首页>代码>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日
今晚都别睡啦  LV9 2022年4月6日
wanglinddad  LV55 2022年3月17日
最近浏览更多
15719908287  LV10 6月19日
wwy000  LV2 4月29日
付洋麟  LV5 4月23日
zolscy  LV24 4月17日
新哥新奇士橙  LV5 1月26日
赵哈哈  LV1 2024年12月26日
momomo228  LV2 2024年11月21日
微信网友_7052861421883392  LV1 2024年6月25日
zhangmi8  LV1 2024年4月23日
lsglsg9  LV23 2024年3月27日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友