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

本文介绍了一种使用Hibernate框架执行原生SQL的方法,并演示了如何将查询结果转化为List<Map>格式,便于进一步的数据处理与展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过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")
	@Override
	public 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")
		@Override
		public V get(Object key) {
			if(key instanceof String) {
				return super.get((K) (((String)key).toLowerCase()));
			}
			return super.get(key);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值