此內容源自企業學員需求。許多時候我們希望執行 SQL/HQL 並直接輸出 HTML 表格,且當 SQL 變動時仍能自動顯示所有別名欄位與資料。
優先考慮 Hibernate 實現。實體映射查詢可用 Query.getReturnAliases() 獲取別名,但複雜 SQL 需用 SQLQuery,該方法在 Hibernate 3.2 中未實現(3.3 版未測試)。以下為 DAO 實現範例:
public List queryAllForReport(final String hql, final Object... args) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
List list = query.list();
list.add(0, query.getReturnAliases()); // 將別名列表放在首位
return list;
}
});
return list;
}
此法將別名與資料結合返回,前端 JSP 即可動態渲染表格表頭與資料列。