BaseDao 自己要封装的一个类,
这个类对数据库的数据进行增删改查的
在这个类中只需要写两个方法 一个是增删改 一个查
import org.apache.commons.beanutils.BeanUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class BaseDao {
//增删改方法
public int update(String sql,Object[] parameters){
Connection connection = JdbcUtil.getConnection();//1.获取数据库的连接对象,从JdbcUtil工具中
PreparedStatement preparedStatement=null;//2.获取预处理的搬运工对象去预处理sql语句
try {
preparedStatement =connection.prepareStatement(sql);//预处理sql语句
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();//3.依靠元数据获取参数的个数
if (parameters != null && parameters.length==parameterCount) { //保证传进来的集合的元素个数与元数据的个数相等
for (int i = 1; i <=parameterCount ; i++) { //4.循环赋值
preparedStatement.setObject(i,parameters[i-1]); //把传进来的集合的值赋给搬运工
}
}
int i =preparedStatement.executeUpdate(); //5.执行sql语句
return i; //返回的是受影响的行数
} catch (SQLException e) {
e.printStackTrace();
}finally { //保证关闭
JdbcUtil.close(preparedStatement,connection); //关闭搬运工和连接
}
return 0; //返回的是受影响的行数
}
//查找
public <T>List<T> query(String sql,Object[] parameters,Class<T> cls){ //返回值是一个集合 ,传参分别是sql语句
Connection connection = JdbcUtil.getConnection();//1.获取连接数据的对象
PreparedStatement preparedStatement=null; //2.设置预处理的搬运工对象
ResultSet resultSet =null;//设置结果集对象
try {
preparedStatement =connection.prepareStatement(sql);//预处理sql语句
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();//3.获取元数据参数的个数
if (parameters != null && parameters.length==parameterCount) { //赋值的条件 传进来的集合的元素和必须与元数据参数的个数相等
for (int i = 1; i <=parameterCount ; i++) { //4.循环赋值
preparedStatement.setObject(i,parameters[i-1]);//把传进来的集合的数据赋值给搬运工对象
}
}
resultSet = preparedStatement.executeQuery();//5.执行sql语句
List<T> list = new ArrayList<>();//6.创建空集合
ResultSetMetaData metaData = resultSet.getMetaData();//7.获取结果集元数据,通过元数据的字段个数和名字
int columnCount = metaData.getColumnCount();//8.通过元数据获取对象字段的个数
while (resultSet.next()){//9.遍历数据 while控制的是数据的行
T t=cls.getConstructor(null).newInstance(null);//10.通过Class对象获取所对应的对象类
for (int i = 1; i <=columnCount ; i++) { //控制列获取字段的
String columnName = metaData.getColumnName(i); //11.获取列(字段)的名字
Object value = resultSet.getObject(columnName); //12.通过字段获取值
System.out.println(value); //打印值
BeanUtils.setProperty(t,columnName,value); //13.获取数据元数据之后,将数据赋值给一个对象
//BeanUtils.setProperty(对象, 属性, 值)
}
list.add(t);//14.把每次获取的值 存到集合中
}
return list.size()!=0?list:null; //获取的值的长度如果不是零,返回list,如果长度为0返回null
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtil.close(resultSet,preparedStatement,connection);//15关闭资源
}
return null;//返回值是list集合,如果上面不执行返回null
}
}