联合 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[]
。
- 将列名称映射到索引。
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);
}
- 将
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
。
我需要有关简化代码的建议。我正在使用 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[]
。
- 将列名称映射到索引。
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);
}
- 将
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
。