Hibernate执行sql的时候返回的list封装

Hibernate执行sql的语法如下:

Query query = getHibernateTemplate().getSessionFactory()
				.getCurrentSession().createSQLQuery(sql);
		for (int i = 0; i < values.length; i++) {
			query.setParameter(i, values[i]);
		}

 备注:

values:为?参数
sql:要执行的sql

   此时只需要query.list()即可获取查询的结果,此时的list中每个元素为Object[] 对应的是select *中的列信息,那么

如果指定返回的list已经是封装好的vo元素呢?此时借助反射可以做到如下所示:

 for(int i=0;list!=null&&i<list.size();i++){
            Object ob=clazz.newInstance();
			Field[] fields=clazz.getDeclaredFields();
			Object[] objs=((Object[])list.get(i));
			for(int j=0;fields!=null&&objs!=null&&j<fields.length&&j<objs.length;j++){
				fields[j].setAccessible(true);
				logger.info("********fields[j].getName*******"+fields[j].getName());
				fields[j].set(ob,objs[j]);
			}
			relist.add(ob);
     }

 备注:

clazz:为要封装的类型
relist:为返回的封装好vo的list

 上述即可实现hibernate执行sql后自动封装成vo类

切忌:

clazz中声明的属性顺序要跟select中查询的列要一一对应
 

猜你喜欢

转载自snv.iteye.com/blog/1132979