JDBC----学习(8)--DAO设计模式

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;
	}

猜你喜欢

转载自blog.csdn.net/lsh15846393847/article/details/89208819