1. 程式人生 > >hibernate使用原生sql查詢,返回List Map String, Object ,並重命名返回資料列名稱

hibernate使用原生sql查詢,返回List Map String, Object ,並重命名返回資料列名稱

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傳到前臺