hibernate返回map结果

在我们公司的项目中,代码过于老旧,hibernate返回的结果是数组而不是map或者数据表对象。
这会导致一个问题,我们需要通过数据得下标获取数据,我觉得这很不便于维护,数据量过多的时候,过多的下标容易导致各种问题。
我的目标是hibernate返回一个map,我可以通过key进行获取数据,或者呢,直接把map转成对象,这样子更健壮一些
代码:

/**
	 * 分页查询,返回结果为map<br>
	 * @param pageData 分页对象
	 * @param originalSql 原始的查询sql
	 * @param needCount 是否需要计数
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private PageData<Map<String, Object>> listPageBySql(PageData<Map<String, Object>> pageData, String originalSql, boolean needCount) {
		
		if (pageData == null) { // 判断数据是否为空
			pageData = new PageData<Map<String, Object>>();
		}

		if (needCount && pageData.getTotalCount() == 0 ) { // 需要进行count查询语句,拼接外层sql
			StringBuilder countSql = new StringBuilder("select count(*) from ( ");
			countSql.append(originalSql);							
			countSql.append(" ) t_count ");
			SQLQuery countQuery = getSession().createSQLQuery(countSql.toString());
			Object count = countQuery.uniqueResult();
			pageData.setTotalCount(Integer.valueOf(String.valueOf(count)));
			if (pageData.getTotalCount() == 0) {
				pageData.setResult(new ArrayList<Map<String, Object>>());
				return pageData;
			}
		} else {
			pageData.setTotalCount(pageData.getTotalCount());
		}
		
		// 设置返回结果为map,而不是Object[]
		SQLQuery query = getSession().createSQLQuery(originalSql);
		query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
		
		// 设置页码
		query.setFirstResult((pageData.getPageNo()-1)*pageData.getPageSize());
		query.setMaxResults(pageData.getPageSize());
		
		// 查询结果
		List<Map<String, Object>> resultList = query.list();
		
		pageData.setResult(resultList);
		return pageData;
	}
posted @ 2020-10-31 11:11  season-qd  阅读(959)  评论(0编辑  收藏  举报