概述
由Java反射到赋值再到查询的流程图:
通用获取查询方法:
* 利用泛型再简化:
* 1. 利用SQL进行查询,得到结果集
* 2. 利用发射创建实体类的对象,创建Student对象
* 3. 获取结果集的列的别名flowId idCard examCard studentName
* 4. 再获取结果集每一列的值,结合3得到一个Map,Map有一组键值对,
* 键:列的别名, 值:列的值
* 5. 利用反射为2对应的属性赋值:属性即为Map的键,值即为Map的值
/**
* @param clazz:描述对象类型
* @param sql:SQL语句,可能带占位符
* @param args:填充占位符的可变参数
* @return
*/
public <T> T get( Class<T> clazz, String sql, Object ...args) {
T entity = null;
Connection connection = null;
java.sql.Statement statement = null;
ResultSet resultSet = null;
try {
//1. 得到ResultSet对象
connection = JDBCTools.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
//2. 得到ResultSetMetaData对象
ResultSetMetaData rsmd = (ResultSetMetaData) resultSet.getMetaData();
//3. 创建一个Map<String, Object>对象,键:SQL查询语句列的别名, 值:列的值
Map<String, Object> values = new HashMap<>();
//4. 处理结果集, 利用ResultSetMetaData填充3对应的Map对象
if(resultSet.next()) {
for(int i = 0; i < rsmd.getColumnCount(); i++) {
String columnLabel = rsmd.getColumnLabel(i + 1);
Object columnValues = resultSet.getObject(i + 1);
values.put(columnLabel, columnValues);
}
}
//5. 若Map不为空集, 利用反射创建clazz对应的对象
if(values.size() > 0) {
entity = clazz.newInstance();
}
//6. 遍历Map对象,利用反射为Class对象的对应的属性赋值
for(Map.Entry<String, Object> entry: values.entrySet()) {
String fieldName = ((Entry<String, Object>) entity).getKey();
Object value = entry.getValue();
// ReflectionUtils.setFieldValues(entity, fieldName, value);//利用反射赋值
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.release(resultSet, statement, connection);
}
return entity;
}
调用方法:
@Test
public void testGet() {
//flowId idCard examCard studentName为数据表列的别名
String sql = "SELECT flow_id flowId, type, id_card idCard, exam_card examCard, student_name studentName, "
+ "location, grade FROM examstudent "
+ "WHERE flow_id = ?";//?表示占位符
// System.out.println(sql);
Student student = get(Student.class, sql, 2);
System.out.println(student);
}
其中
ReflectionUtils.setFieldValues(entity, fieldName, value);
此方法代码过长,这里就具体给出,详见Spring ReflectionUtils的方法……
最后
以上就是紧张发卡为你收集整理的JDBC利用反射及JDBC元数据编写通用的查询操作的全部内容,希望文章能够帮你解决JDBC利用反射及JDBC元数据编写通用的查询操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复