/创建一个BaseCao的增加的方法
public class BaseDao {
//parameters 参数写错了, 创建一个update的方法
public int updata(String sql, Object[] parameters) {
//1.JdbcUtil调用get.Connection的方法; 调用数据库方法
Connection connection = JdbcUtil.getConnection();
PreparedStatement preparedStatement = null;
try {
//2.调用预搬运工方法 connection.pS;
preparedStatement = connection.prepareStatement(sql);
//3.通过搬运工调用得到参数元数据,调得到元素个数 pS.gPM.gPC
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
//if 后面括号里填写参数;(参数 parameters!=null 参数单词写错
//4.if判断,预搬运工赋值 if(判断)for(循环并赋值)
if (parameters != null && parameters.length == parameterCount) {
for (int i = 1; i <= parameterCount; i++) {
preparedStatement.setObject(i, parameters[i - 1]);
}
}
//5.启动搬运方法 pS.eU();
int i = preparedStatement.executeUpdate();
return i;
} catch (Exception e) {
e.printStackTrace();
} finally {
//6.关闭方法 J.close();
JdbcUtil.close(preparedStatement, connection);
}
return 0;
}
//public<T> 这是泛型,所以这个<T>,必须带,因为不知道类是什么,
//Object[] Parameters 这个是Object[] 值数组,是为了赋给搬运工里面的问号的?
//Class<T> cls 反射类对象 Class大写, Work work
public <T> List<T> query(String sql, Object[] parameters, Class<T> cls) {
//1.连接数据库
Connection connection = JdbcUtil.getConnection();
//防止局部变量不能出方法
ResultSet resultSet =null;
PreparedStatement preparedStatement = null;
try {
//2.调用预处理搬运工 sql
preparedStatement = connection.prepareStatement(sql);
//3.搬运工调用有参元素据,再调用参数的个数
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
//增加代码的健壮性
if (parameters != null && parameters.length == parameterCount) {
//4.给参数赋值
for (int i = 1; i <= parameterCount; i++) {
preparedStatement.setObject(i, parameters[i - 1]);
}
}
//5.调用executeQuery 方法,并得到resultSet集合;
resultSet = preparedStatement.executeQuery();
//6.创造集合
List<T> list = new ArrayList<>();
//7.获取元数据,通过原数据获得,字段表的个数和名字
ResultSetMetaData metaData = preparedStatement.getMetaData();
//8.通过元数据获得列数
int columnCount = metaData.getColumnCount();
System.out.println(columnCount);
//9.遍历集合
//控制行
while (resultSet.next()) {
//10.创建一个class对象,获取值 ,通过。cls.getConstructor,获取无参构造.newInstance,得到一个实例
T t = cls.getConstructor(null).newInstance(null);
for (int i = 1; i <= columnCount; i++) {//控制列
//11.获取列(字段)的名字 (i) 代表哪一个
String columnName = metaData.getColumnName(i);
System.out.println(columnName);
// 12.通过字段的名字获取值名字
Object value = resultSet.getObject(columnName);
//? 为什么必须打印才可调用
System.out.println(value);
//13.通过BeanUtils.调方法
BeanUtils.setProperty(t, columnName, value);
list.add(t);
}
}
//14.赋值给集合
return list.size() != 0 ? list : null;
} catch (Exception e) {
e.printStackTrace();
}finally {
//15.关源
JdbcUtil.close(resultSet,preparedStatement,connection);
}
return null;
}
}
封装BaseDao一个类的详解,这个类中只需要写两个方法 一个是增删改 一个查
最新推荐文章于 2025-11-26 21:22:25 发布
该文章详细描述了如何在Java中创建一个BaseDao类,包含update和query方法,使用PreparedStatement进行预处理SQL,处理参数,以及通过反射和BeanUtils将结果集转换为对象列表。
1096

被折叠的 条评论
为什么被折叠?



