BaseDAO类
概念:
-
封装了针对于数据表的通用操作
-
因为我们后续不会去造BaseDAO的对象,所以声明为抽象类--->不能够造该对象
该类包含的函数:
-
通用的增、删、改操作
-
通用的查询一条数据操作
-
通用的查询多条数据操作
-
支持使用
MySQL
内置函数操作
package JDBCDAO;
import JDBCStatementCRUD.JDBCUtils;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 封装了针对于数据表的通用的操作
* 因为我们后续不会去造BaseDAO的对象,所以声明为抽象类--->不能够造该对象
* Data(base) Access Object:数据库访问对象
* @since JDK 1.8
* @date 2021/10/12
* @author Lucifer
*/
public abstract class BaseDAO {
//外部传入连接
//通用的增删改查方法--->version 2.0(考虑了事务以后的操作)
public int update(Connection conn, String sql, Object ...args) {
PreparedStatement ps = null;
try {
//获取链接
conn = JDBCUtils.getConnection();
//预编译sql
ps = conn.prepareStatement(sql);
//填充占位符--->使用流的形式
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
//执行语句
return ps.executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}finally {
//关闭资源
/*
1、由于是外部传入的连接,所以不需要关闭Connection连接
*/
JDBCUtils.closeResource(null, ps);
}
return 0;
}
/*
1、将其设置为事务的处理方式。--->将事务作为参数传入函数当中
注意:
1、不要再次创建链接Connection
2、关闭的时候不要关闭连接
通用查询操作,用于返回数据表中的一条数据(考虑事务操作)
*/
//仅返回一个对象
public <T> T getInstance(Connection conn, Class<T> clazz, String sql, Object ...args) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
//预编译sql
ps = conn.prepareStatement(sql);
//填充占位符
for (int i=0; i<args.length; i++) {
ps.setObject(i+1, args[i]);
}
//执行sql保存为结果集对象
rs = ps.executeQuery();
//获取结果集元数据
ResultSetMetaData rsmd = rs.getMetaData();
//获取列数
int