You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BookStore/src/com/yj/dao/impl/BaseDao.java

124 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 <T> 返回的类型的泛型
* @return 返回查询结果的第一行数据封装成的JavaBean对象
*/
public <T> T queryForOne(Class<T> type, String sql, Object ... args) {
Connection connection = JDBCUtils.getConnection();
// 获取数据库连接
try {
// 使用QueryRunner的query方法执行查询操作并将结果集的第一行数据封装为指定的JavaBean对象
return queryRunner.query(connection, sql, new BeanHandler<T>(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 <T> 返回的类型的泛型
* @return 返回查询结果的每一行数据封装成的JavaBean对象列表
*/
public <T> List<T> queryForList(Class<T> type, String sql, Object ... args) {
Connection connection = JDBCUtils.getConnection();
// 获取数据库连接
try {
// 使用QueryRunner的query方法执行查询操作并将结果集的每一行数据封装为指定的JavaBean对象存储在List集合中返回
return queryRunner.query(connection, sql, new BeanListHandler<T>(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可能已负责关闭连接
}
}
}