如果用hibernate執行原生sql進行數據查詢可以調用
SQLQuery query = getSession().createSQLQuery(sql);
然后再執行
query.list()
這樣便可以將結果查詢出來,查這樣查詢出來的結果。是由值數組組成的list。
可一般我們想要的結果應該是以字段名為key的map組成的list或者是表名對應的對象組成的list。
這兩種結果均可通過hibernate提供的api來實現
對於第一種想要的結果:
可以通過重寫AliasedTupleSubsetResultTransformer來實現,如果下面的代碼
AliasedTupleSubsetResultTransformer f = new AliasedTupleSubsetResultTransformer() { @Override public boolean isTransformedValueATupleElement(String[] arg0, int arg1) { return false; } @Override//重寫這個方法是關鍵 public Object transformTuple(Object[] tuple/*值數組*/, String[] aliases/*字段數組*/) { Map<String, Object> map = new HashMap<String, Object>(); for(int i = 0; i < aliases.length; i ++){ map.put(aliases[i].toLowerCase(), tuple[i]); } return map; } }; List<Map<String, Object>> resultList = query.setResultTransformer(f).list();
對於第二種想要的結果即轉換成對應類的對象list,這種留給有心人去實現吧,
這種應該通過擴展SQLQuery.setResultSetMapping()去實現的。
