联合 table 的代码简化建议

Advice for code simplification for joint table

我需要有关简化代码的建议。我正在使用 Struts 2、Spring 和 Hibernate 作为框架。

文件 DAO:

public List<Model> getData() throws HibernateException {

    List<Model> list = new ArrayList<Model>();
    List<Object[]> res = new ArrayList<Object[]>();
    String query = "SELECT table1.*, table2.* FROM table1, table2 WHERE table1.bridge_id = table2.bridge_id";
    res = this.sessionFactory.getCurrentSession()
            .createSQLQuery(query)
            .list();

    for (Object[] row : res) {
        Model model = new Model();
        model.setName((String) row[1]);
        model.setDate((Date) row[2]);

        list.add(model);
    }
    return list;
}

我尝试使用

while(res.next()){ ... }

但是 next() 在我的项目中不起作用,就像我使用 size() 来计算列表的大小而不是 length 数组。

出于某种原因,我不喜欢使用 row[0] 在循环中定义函数值,我想要的是将值定义为 row["name"].

有两种方法可以映射列名以用于仅包含值的行数据Object[]

  1. 将列名称映射到索引。
    Map<String, int> map = new HashMap<>()
    map.put("name", 0); 
    map.put("date", 1);
    for (Object[] row : res) {
        Model model = new Model();
        model.setName((String) row[map.get("name")]);
        model.setDate((Date) row[map.get("date")]);
        list.add(model);
     }
  1. Object[] 映射到 Map<String, Object> 并使用之前的映射
    Map<String, int> map = new HashMap<>()
    map.put("name", 0); 
    map.put("date", 1);
    
    for (Object[] row : res) {
        Model model = new Model();
        Map<String, Object> map2 = new HashMap<>();
        map2.put("name", row[map.get("name")]);
        map2.put("date", row[map.get("date")]
        model.setName((String) map2.get("name"));
        model.setDate((Date) map2.get("date"));
        list.add(model);
     }

您可以为 row 创建一个包含两个映射的适配器 class。适配器将 Object[] 作为构造函数参数。然后使用函数 getValue(String),其中 returns 来自第二张地图的 Object