1. 程式人生 > >幾種hibernate原生sql查詢返回值

幾種hibernate原生sql查詢返回值

1.---SELECT  new map(main.id AS id3333,main.startdate AS startdate) from WeekData main
上述返回值是List<Map<String, Object>>---map的key為as後面的別名,value為實際查詢結果
2.---SELECT  new map(main.id,main.startdate) from WeekData main
上述返回值是List<Map<String, Object>>---map的key為語句中的序號(從0開始),value為實際查詢結果

總結1和2 --  如果部分使用alias,部分不使用,則使用了alias的將使用alias作為key,沒有使用的則仍然使用序號代替,

3.---String hql=“select s.name,s.id from Student s”;
    上述返回值是List<Object[]>;----object陣列是返回列name和id這樣的構成的陣列
4.---public class Department(Department d, Integer employeeSize)
SELECT new Department(department, count(employee.id)) FROM .....
5.---SELECT  new list(main.id AS id3333,main.startdate AS startdate) from WeekData main
--把所有查詢出的列放進一個list(類似3的Object[])

返回值[["005e8a63a01249a1aec0abba8d6cc5b6!WeekData",1453824000000],["00a01540d6684344ad76692fc11ac33e!WeekData",1442937600000]]

6.--利用hibernateTemplate執行sql

比如 map.put("year", year[]) ---> in (:year) ---> 此時需要判斷map的value值obj然後相應的setParameterList和setParameter,,if(obj instanceof Collection<?>){  query.setParameterList(key, (Collection<?>)obj);  

public List queryBySql(final String queryString, final Map<String, Object> paramsMap) {
		logger.info("queryBySql sql == " +  queryString);
		logger.info("paramsMap = " + ReflectionToStringBuilder.toString(paramsMap, ToStringStyle.MULTI_LINE_STYLE));
		List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(final Session session) throws HibernateException, SQLException {
				Query query = session.createSQLQuery(queryString)
						.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
				if (paramsMap != null) {
					for (String key : paramsMap.keySet()) {
						Object obj = paramsMap.get(key);
						if(obj instanceof Collection<?>){  
		                    query.setParameterList(key, (Collection<?>)obj);  
		                }else if(obj instanceof Object[]){  
		                    query.setParameterList(key, (Object[])obj);  
		                }else{  
		                    query.setParameter(key, obj);  
		                }  
					}
				}
				return query.list();
			}
		});
		return list;
	}