hibernate使用原生sql查詢,返回List Map String, Object ,並重命名返回資料列名稱
阿新 • • 發佈:2019-02-12
hibernate使用原生sql查詢時返回的欄位不能重新命名
例如使用如下sql查詢時報錯
sql = "SELECT t.type_name as `name`,SUM(o.circulation) FROM "
+ " t_info_product o "
+ " LEFT JOIN t_info_type t ON o.media_type = t.type_id"
+ " where o.del_state= 0 "
+ " GROUP BY o.media_type";
因為hibernate會自動給hibernate自動取別名
後面放棄了對type_name取別名,對SUM(o.circulation)列取別名竟然成功了,這也是預料之中的,查出來的欄位太複雜,必然存在可重新命名功能
下面是正確的
sql = "SELECT t.type_name ,SUM(o.circulation) as `sum` FROM "
+ " t_info_product o "
+ " LEFT JOIN t_info_type t ON o.media_type = t.type_id"
+ " where o.del_state= 0 "
+ " GROUP BY o.media_type";
由此便可以想到對 t.type_name重名的的方法了,需要一個sql函式
CONCAT()對就是他
sql = "SELECT CONCAT(t.type_name) as 'name' ,SUM(o.circulation) as `sum` FROM "
+ " t_info_product o "
+ " LEFT JOIN t_info_type t ON o.media_type = t.type_id"
+ " where o.del_state= 0 "
+ " GROUP BY o.media_type";
設定資料型別為List
public List<Map<String, Object>> listMap(final String sql) {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public List<T> doInHibernate(Session session) // 此處的session可以不用管,自動獲得
throws HibernateException, SQLException {
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //設定返回型別
// query.setCacheable(true); //使用快取
return query.list();
}
});
}
查出來的資料可以直接轉json傳到前臺