Hibernate执行原生sql,list转换问题

来源:互联网 发布:淘宝商城赚钱的吗 编辑:程序博客网 时间:2024/05/29 15:34
通过Hibernate执行原生sql。把List转换成List<Map>
/** * 通过关键词查询标王信息 * @author zhaodong.wang * findBidKingByKeyWord(这里用一句话描述这个方法的作用) * TODO(这里描述这个方法适用条件 – 可选) */private List<Map> findBidKingInfoByKeyWord(String keyWord){final String sql = "select bid.key_word,u.company_id from cm_bid_king bid left join t_reg_user u on(bid.login_name=u.login_name)";return executeSQL(sql);}@SuppressWarnings("unchecked")@Overridepublic List<Map> executeSQL(final String sql) {  return (List<Map>) dao.getHibertemplate().execute(new HibernateCallback() {            @Override            public List<Map> doInHibernate(Session session)                throws HibernateException, SQLException {                SQLQuery query = session.createSQLQuery(sql);                query.setResultTransformer(            new ResultTransformer() {        private static final long serialVersionUID = 7178852496845637376L;        @Override        public Object transformTuple(Object[] values, String[] aliases) {        if(ObjectUtils.isEmpty(aliases)) {        return null;        }        Map rowMap = new StringKeyCaseInsensitiveMap();                for(int i = 0 ; i < aliases.length; i ++) {        rowMap.put(aliases[i], values[i]);        }        return rowMap;        }                @SuppressWarnings("rawtypes")        @Override        public List transformList(List collection) {        return collection;        }            });        return Collections.unmodifiableList(query.list());            }        });}
以下是内部类,提供键值对转换
private static class StringKeyCaseInsensitiveMap extends HashMap {private static final long serialVersionUID = 1L;@SuppressWarnings("unchecked")public V put(K key, V value) {if(key instanceof String) {super.put((K) (((String)key).toLowerCase()), value);} else {super.put(key, value);}return value;};@SuppressWarnings("unchecked")@Overridepublic V get(Object key) {if(key instanceof String) {return super.get((K) (((String)key).toLowerCase()));}return super.get(key);}}
原创粉丝点击