鉴于之前的查询方法,在这里我们可以写一个通用的方法
/** * 鉴于 student、和customer查询的方法有好多相同之处,在此可以写一个通用的方法 */ public <T> T get(Class<T> clazz, String sql, Object... args) { // 不知道具体类型可以使用泛型!!! T entity = null; // 1.获取连接 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JDBCTools.getConnection(); ps = conn.prepareStatement(sql); // 填充占位符 for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } rs = ps.executeQuery(); // 2、得到ResultSetMatedata类的对象 ResultSetMetaData rsmd = rs.getMetaData(); // 3、创建一个Map<Sring,Object>,键:SQL查询的列的别名 值:列的值 Map<String, Object> values = new HashMap<String, Object>(); // 4、 处理结果集利用 ResultSetMetaData 填充3 对应的Map对象 if (rs.next()) { for (int i = 0; i < rsmd.getColumnCount(); i++) { String columnLabel = rsmd.getColumnLabel(i + 1);// 别名 Object columnValue = rs.getObject(i + 1); values.put(columnLabel, columnValue);// 填充 } } // 5、 若Map不为空,利用反射创建clazz对应的对象!!!利用反射赋值 if (values.size() > 0) { entity = clazz.newInstance();// 反射 for (Map.Entry<String, Object> entry : values.entrySet()) { String fieldName = entry.getKey(); Object fieldValue = entry.getValue(); ReflectionUtils .setFieldValue(entity, fieldName, fieldValue); } } } catch (Exception e) { e.printStackTrace(); } finally { JDBCTools.close(rs, ps, conn); } return entity; }
转: https://blog.csdn.net/YL1214012127/article/details/48312823