如何将结果集字段映射到类字段



我在寻找更多"改进的方法";为此,我有这个方法从一个id中获取所有记录,然后是maps"然后进入一个班级,我有大约200个标签;为了映射,它将是一个非常非常长的if链…例子:

Connection conn = ServerJDBCConnection.getInstance().getConnection(....);
PreparedStatement pstmt = null;
ResultSet rs = null;
StringBuffer SQL = new StringBuffer("");
SQL.append(" select tag,value from dms_table where id =?"); 
pstmt = conn.prepareStatement(SQL.toString());
pstmt.setString(1, myid);

DMSClass dmsClass = new DMSClass(myid);
String tag   = "";

rs = pstmt.executeQuery();
while (rs.next()) {
tag   =rs.getString("TAG").trim();

if (tag.equals("Q1"))
dmsClass.setQ1(rs.getString("value"));

if (tag.equals("Q2"))
dmsClass.setQ2(rs.getString("value"));

if (tag.equals("Q3"))
dmsClass.setQ3(rs.getString("value"));

if (tag.equals("Q4"))
dmsClass.setQ4(rs.getString("value"));
.....
}

你可以使用反射,你可以在应用程序运行时创建一个映射,在整个应用程序生命周期中,你可以使用它来设置字段值,像这样-

public class Main {
static final Map<String, Field> fieldMap = new HashMap<>();
public static void main(String[] args) {
for (Field field : DMSClass.class.getDeclaredFields()) {
field.setAccessible(true);
fieldMap.put(field.getName(), field);
}
}
public static void getFromDB(){
..........
.........
while (rs.next()) {
tag   =rs.getString("TAG").trim();
fieldMap.get(tag).set(dmsClass, rs.getString("value"));
}
}
}

最新更新