热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在hibernate中,如何把原生sql查询出来的结果映射到实体bean

大家都知道hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。个人觉得,hibernate自带的hql语句却不见得很好用。现实工作中,有

大家都知道hibernate是一个开放源代码的对象关系映射框架它对JDBC进行了非常轻量级的对象封装。


个人觉得,hibernate自带的hql语句却不见得很好用。


现实工作中,有很多场景是用到原生sql进行查询的,比如oracle的递归、复杂语句查询等。或许hql也能进行递归、复杂语句的查询,但像我这种用惯ibatis的,很是不爽hql。


简单举个例子说一下,hql与sql的区别.

hql :  select u from SysUser u where u.userName = '' order by u.id   

sql :  select *  from sys_user u where u.user_name = '' order by u.id    其中SysUser 为类名,对应表名为 sys_user; userName 为类的属性名,对应表的字段名user_name


Hibernate中有没有用用原生sql查询并把结果集映射到实体bean呢?


查了一下资料,原来Hibernate可以用createSQLQuery.addEntity(xxx.class)来进行映射。


顺便说一下,hibernate中的createQuery与createSQLQuery两者的区别:

1.前者用的事hql语句进行查询,后者可以用sql语句查询。

2.前者以hibernate生成的bean为对象装入list返回,后者则是以对象数组进行存储。


好了,其实很简单。代码贴上:

public List getListEntityBySql(String sql,E entity) {
Session session = this.getSession();
Query query = session.createSQLQuery(sql).addEntity(entity.getClass());
return query.list();
}
这个方法是DAO层的,因为获取到hibernate的session一般都是在DAO层。


注:本人用的是hibernate3.6.4


先简单说这么多,纯属工作笔记。如不对,欢迎指正。





推荐阅读
author-avatar
喵喵浮游生物
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有