当前位置: 首页 > 知识库问答 >
问题:

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

凌和颂
2023-03-14

我在寻找更“改进的方法”来实现这一点,我有一种方法,从一个id中获取所有记录,然后“映射”到一个类中,我有大约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"));
                                    .....
                    }
 

共有1个答案

田晨
2023-03-14

然后,您可以使用反射,在应用程序运行时和整个应用程序生命周期中创建映射,ypu可以将其用于设置如下字段值-

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"));
    }
}
}
 类似资料:
  • 我有一个用户类,有16个属性,比如名字,姓氏,出生日期,用户名,密码等...这些都存储在MySQL数据库中,当我想要检索用户时,我使用ResultSet。我想将每一列映射回用户属性,但我这样做的效率似乎非常低。例如,我正在做: 也就是说,我检索所有的列,然后通过将所有的列值插入用户构造函数来创建用户对象。 有人知道更快、更整洁的方法吗?

  • Navicat 会依源表或集合对字段类型和长度作出假设。你可以从下拉式列表选择你所需的类型。 【提示】导入多个表或集合时,你可以从“源表”或“源集合”下拉式列表选择其他表或集合。 如果你导入数据到现有的表或集合,你则需要手动映射源字段名到目标,或右击并从弹出式菜单选择“智慧配对全部字段”、“直接匹配全部字段”和“全部取消匹配”来进行快速匹配。 如果你透过 ODBC 导入,“条件式查询”按钮会打开“

  • Navicat 会依源表或集合对字段类型和长度作出假设。你可以从下拉式列表选择你所需的类型。 【提示】导入多个表或集合时,你可以从“源表”或“源集合”下拉式列表选择其他表或集合。 如果你导入数据到现有的表或集合,你则需要手动映射源字段名到目标,或右击并从弹出式菜单选择“智慧配对全部字段”、“直接匹配全部字段”和“全部取消匹配”来进行快速匹配。

  • 我试图找到一种方法,在JPQL查询中放置一个计算字段,以映射到Spring Boot中的实体。 我刚才的例子列出了一个静态数字,但我打算将来也将其用于聚合。 我在尝试运行查询时不断收到以下消息: “类[Ljava.lang.Object;不能强制转换为类com.School([Ljava.lang.Object;位于加载器“bootstrap”的模块java.base中;com.School位于加

  • Navicat 会依源表或集合对字段类型和長度作出假设。你可以从下拉式菜单选择你所需的类型。 【提示】导入多个表或集合时,你可以从下拉式菜单选择其他表或集合。 如果你导入数据到现有的表或集合,你则需要手动映射源字段名到目标,或按住 Control 键并点按字段,然后选择“智慧匹配全部字段”、“按次序匹配全部字段”和“全部取消匹配”来进行快速匹配。 如果你透过 ODBC 导入,“条件式查询”按钮会打

  • 我需要将源类中的字段值映射到字段属性。我可以使用Mapstruct使用@mapper注释的'expression'参数来完成 有没有其他方法可以不使用“表达式”来进行映射?