首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

Hibernate 运用SQL查询生成Entity对象

2012-08-25 
Hibernate 使用SQL查询生成Entity对象昨天项目中有几个比较复杂的查询 ,故使用了createSQLQuery方法。 以前

Hibernate 使用SQL查询生成Entity对象
昨天项目中有几个比较复杂的查询 ,故使用了createSQLQuery方法。
以前用它调用SQL语句进行查询,返回List<Object[]>,然后我在Action里一个一个的set语句生成Entity对象,那个累就不用说了。昨天朋友告诉我,Hibernate可以给我生成Entity对象,试了下果然好用,故我也贴出来。万分感谢。

一:直接使用SQLQuery的addEntity方法

SQLQuery query = this.session.createSQLQuery(sql).addEntity(DbCourse.class);query.setString("courseId", courseId);List retList = query.list();

关键是在addEntity(DbCourse.class)这里,我以前是通过createSQLQuery直接返回Query对象,哎,悲哀。效率提升很多。

二:使用SQLQuery的setResultTransformer方法,返回一个Map
try {  SQLQuery query = this.session.createSQLQuery(sql);  //返回一个map,KEY:为DB中名称一致(大小写一致)  query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);  query.setString("courseId", courseId);  getList = query.list();  if (null != retList) {    Map recMap = null;    DbCourse course = null;    for (int i = 0; i < getList.size(); i++) {       recMap = (Map)getList.get(i);       course = new DbCourse();       BeanUtils.populate(course, recMap);//对象组装       retList.add(course);    }  }} catch (Exception e) {}

关于 BeanUtils.populate 可以参考  http://ferreousbox.iteye.com/blog/141330 1 楼 finallygo 2010-11-27   1.第一个你说的效率提升很多,应该说的是开发效率吧,程序的效率可是下降了
2.还有第一种有个限制条件DbCourse.class一定要知道映射规则才能这样吧
3.貌似BeanUtils的方式需要map中key与对象属性名完全一致,并且不支持深度赋值吧,还有就是java.util.Date的类型也不支持?

热点排行