首页 > Web开发 > 详细

hibernate返回map结果

时间:2020-10-31 16:42:18      阅读:38      评论:0      收藏:0      [点我收藏+]

在我们公司的项目中,代码过于老旧,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;
	}

hibernate返回map结果

原文:https://www.cnblogs.com/season-qd/p/13905542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!