package com.yj.dao.impl; // 定义包名,组织相关的类 import com.yj.utils.JDBCUtils; // 导入JDBC工具类,用于获取数据库连接 import org.apache.commons.dbutils.QueryRunner; // 导入DbUtils的QueryRunner类,用于简化JDBC操作 import org.apache.commons.dbutils.handlers.BeanHandler; // 导入BeanHandler,用于将结果集的第一行数据封装为JavaBean对象 import org.apache.commons.dbutils.handlers.BeanListHandler; // 导入BeanListHandler,用于将结果集的每一行数据封装为JavaBean对象,并存储在List集合中 import org.apache.commons.dbutils.handlers.ScalarHandler; // 导入ScalarHandler,用于返回结果集的一行一列数据 import java.sql.Connection; // 导入Connection接口,用于数据库连接 import java.sql.SQLException; // 导入SQLException类,处理SQL异常 import java.util.List; // 导入List接口,用于存储数据集合 /** * @author yj // 类的作者 * @create 2020-08-21 11:32 // 类的创建时间 */ public abstract class BaseDao { // 定义一个抽象类BaseDao,作为数据访问层的基类 // 使用DbUtils操作数据库 private QueryRunner queryRunner = new QueryRunner(); // 初始化QueryRunner对象,用于执行SQL语句 /** * update()方法用来执行Insert\Update\Delete语句 * @param sql 要执行的SQL语句 * @param args SQL语句中的参数值,可变参数 * @return 如果返回-1则失败,成功返回影响的行数 */ public int update(String sql, Object ... args) { Connection connection = JDBCUtils.getConnection(); // 调用JDBCUtils工具类获取数据库连接 try { // 使用QueryRunner的update方法执行更新操作,并返回影响的行数 return queryRunner.update(connection, sql, args); } catch (SQLException e) { e.printStackTrace(); // 打印SQL异常堆栈信息 throw new RuntimeException(e); // 将SQL异常转换为运行时异常抛出 } finally { // 注意:原代码中缺少了关闭连接的逻辑,应在此处添加(但在实际使用中,JDBCUtils的getConnection可能已负责关闭) // JDBCUtils.close(connection); // 关闭数据库连接 } } /** * 查询返回一个Javabean的SQL语句 * @param type 返回的对象类型 * @param sql 执行的SQL语句 * @param args SQL语句对应的参数值,可变参数 * @param 返回的类型的泛型 * @return 返回查询结果的第一行数据封装成的JavaBean对象 */ public T queryForOne(Class type, String sql, Object ... args) { Connection connection = JDBCUtils.getConnection(); // 获取数据库连接 try { // 使用QueryRunner的query方法执行查询操作,并将结果集的第一行数据封装为指定的JavaBean对象 return queryRunner.query(connection, sql, new BeanHandler(type), args); } catch (SQLException e) { e.printStackTrace(); // 打印SQL异常堆栈信息 throw new RuntimeException(e); // 将SQL异常转换为运行时异常抛出 } finally { // 注意:同样缺少了关闭连接的逻辑,应在实际使用中添加 } } /** * 查询返回多个Javabean的SQL语句 * @param type 返回的对象类型 * @param sql 执行的SQL语句 * @param args SQL语句对应的参数值,可变参数 * @param 返回的类型的泛型 * @return 返回查询结果的每一行数据封装成的JavaBean对象列表 */ public List queryForList(Class type, String sql, Object ... args) { Connection connection = JDBCUtils.getConnection(); // 获取数据库连接 try { // 使用QueryRunner的query方法执行查询操作,并将结果集的每一行数据封装为指定的JavaBean对象,存储在List集合中返回 return queryRunner.query(connection, sql, new BeanListHandler(type), args); } catch (SQLException e) { e.printStackTrace(); // 打印SQL异常堆栈信息 throw new RuntimeException(e); // 将SQL异常转换为运行时异常抛出 } finally { // 注意:同样缺少了关闭连接的逻辑,应在实际使用中添加 } } /** * 执行返回一行一列的SQL语句 * @param sql 执行的SQL语句 * @param args SQL语句对应的参数值,可变参数 * @return 返回查询结果的一行一列数据 */ public Object queryForSingleValue(String sql, Object ... args) { Connection connection = JDBCUtils.getConnection(); // 获取数据库连接 try { // 使用QueryRunner的query方法执行查询操作,并返回结果集的一行一列数据 return queryRunner.query(connection, sql, new ScalarHandler(), args); } catch (SQLException e) { e.printStackTrace(); // 打印SQL异常堆栈信息 throw new RuntimeException(e); // 将SQL异常转换为运行时异常抛出 } finally { // 注意:同样缺少了关闭连接的逻辑,但在实际中,JDBCUtils的getConnection可能已负责关闭连接 } } }