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传到前台

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值