java - 联表代码简化建议
问题描述
我需要关于我的代码简化的建议。我使用 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
您可以创建一个包含这两个映射的适配器类。适配器Object[]
作为构造函数参数。然后使用从第二个地图getValue(String)
返回 an的函数。Object
推荐阅读
- php - 在现有 Drupal 7 中找不到管理 URL
- pandas - 如何从示例数据帧的 created_time 列中获取小时数并将其计数为另一个数据帧
- javascript - 将嵌套数组覆盖到同一个对象中
- python - 如何将 pandas.core.series.Series 和 numpy.int32 合并到 pandas.core.frame.DataFrame?
- react-native - 可以这样堆叠搜索结果吗?
- python - 如何在 python 中正确填充 4d 数组/矩阵?
- php - CodeIgniter 控制器中的函数(download_report())在本地机器上运行,但在服务器上不运行
- c#-7.0 - ValueTuple 的基本类型
- python-sphinx - 转义 reStructuredText Sphinx 中的特殊字符
- excel - 我有一个很长的公式数组,替换函数没有填充单元格