我需要為我的代碼簡化提供建議。我正在使用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" /span>;
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"].
uj5u.com熱心網友回復:
有兩種方法可以將列名映射到只包含值的行資料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),它從第二個映射中回傳一個Object。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327138.html
標籤:
