1. DAO : Data Access Object
2.访问数据信息类。包含了对数据的CRUD(create,read,update,delete)
3.实现功能的模块化,有利于代码的维护和升级。
4.获取单独一条记录的步骤。
public <T> T get(Class<T> clazz,String sql, Object ... args) throws Exception {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
ResultSetMetaData resultSetMetaData =null;
T entity = null;
try {
//1.获取连接
connection = JDBCTools.getConnection();
//2.获取preparedStatement
preparedStatement = connection.prepareStatement(sql);
for(int i = 0;i < args.length;i++){
//3.填充占位符
preparedStatement.setObject(i+1, args[i]);
}
//4.进行查询,获取结果集
resultSet = preparedStatement.executeQuery();
//5.若结果集中有记录,准备Map<String,Object>键:存放列别名 值:存放对应的值
if(resultSet.next()){
Map<String,Object> map = new HashMap<String,Object>();
//6.得到元数据对象(ResultSetMetaData)
resultSetMetaData = resultSet.getMetaData();
//7.处理结果集(resultSet),把指针向下移动一个单位
//8.由resultSetMetaData对象获取结果集中有多少列
int count= resultSetMetaData.getColumnCount();
//9.由resultSetMetaData得到每一列的别名,由resultSet得到每一列的具体值。
for(int n = 0; n < count;n++){
String lable = resultSetMetaData.getColumnLabel(n+1);
Object value = resultSet.getObject(lable);
//10.填充map
map.put(lable, value);
}
//11.用反射创建Class对象。
entity = clazz.newInstance();
//12.遍历map对象,用反射填充对象的属性值,属性名为map中的key,属性值为map中的value
for(Map.Entry<String, Object> entry : map.entrySet()){
String lable = entry.getKey();
Object value = entry.getValue();
ReflectionUtils.setFieldValue(entity, lable, value);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.colse(preparedStatement, connection, resultSet);
}
return entity;
}