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

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

大家都知道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<E> 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


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




eclipse 通过hibernate实体类生成数据库对应表 通过hibernate插件 直接将实体映射生成对应的数据库表 立即下载

相关推荐

FOC-滑膜控制器SMC/滑膜观测器SMO

三相PMSM是一个非线性、强耦合的多变量控制系统,对于外界的扰动或者电机自身的参数发生变化时,传统的PI控制并不能满足实际的要求。因此可以引入滑模控制SMC,它对扰动和参数不敏感,响应速度也够快。简单来说就是,滑膜观测器就是通过采样与坐标变换得到的Ualpha,Ubeta,Ialpha,Ibeta四个参数值,获取。SMO叫滑膜观测器(Sliding Mode Observer),用于获取转子位置信息与转速信息。2、作为滑膜观测器SMO,获取电机角度与转速信息。之间的误差来设计滑膜观测器,并通过该误差。

小胡同学的工程师学习之路 1万+

Mybatis结果映射,你用对了吗?

什么是结果映射? 简单的来说就是一条SQL查询语句返回的字段如何与Java实体类中的属性相对应。 如下一条SQL语句,查询患者的用户id,科室id,主治医生id: <selectid='selectPatientInfos'resultType='com.xxx.domain.PatientInfo'> selectuser_id,dept_id,doc_idfrompatient_info; </select> Java实体类...

Pastxu的小屋 411

从零构建AI辅助逆向分析环境:JADX-MCP与LLM的实战集成指南

本文详细介绍了如何从零构建AI辅助逆向分析环境,通过集成JADX-MCP与LLM技术,提升Android应用逆向工程效率。文章涵盖环境搭建、插件安装、MCP服务器配置及实战案例分析,帮助开发者快速掌握AI在代码理解、漏洞挖掘和自动化文档生成中的应用。

weixin_27875131的博客 788

hibernate 原生sql查询映射实体bean

StringBuffer sql=new StringBuffer(); sql.append("select customer.id,customer.COMPANY_FULLNAME,customer.COMPANY_SHORTNAME,customer.COMPANY_PROFESSION,a.display from cus_customer_info customer," +

小菜鸟的博客 1万+

HibernateSQL查询结果集转变成JavaBean的方法

在使用到Hibernate的应用中,不只是进行单表查询,很多时候的查询条件会关联到多张表,同时结果集也不是所有表中的全部属性,而是根据需要进行部分查询。对此Hibernate提供了对应的解决办法 1,使用ResultTransformer      Hibernate的addScare()方法可以明确指定属性或者返回值的类型,如: session.createSQLQuery("SELECT

qqliang1314的专栏 3693

hibernate通过sql语句查询出的结果集封装到bean里面去

相关的语句有   String sql="select t_personalbaseinfoentity.realName," + "t_personalbaseinfoentity.mobilePhone," + "t_personalba

huang_hws的专栏 4144

hibernate使用原生SQL查询返回结果集的处理

hibernate使用原生SQL查询返回结果集的处理 今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果hibernate中使用createSQLQuery拉来来实现SQL语句的查询,具体用法:session.createSQLQuery(sql),对于用SQL返回的结果集是...

anyuta5577的博客 266

hibernate里createSQLQuery

一、addEntity()和setResultTransformer()方法 1. 使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式: List cats = sess.createSQLQuery( " select * from cats " ).

唐僧打怪兽 1万+

hibernate将本地SQL查询结果封装成对象

hibernate将本地SQL查询结果封装成对象     不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL查询(如:复杂统计等),然而使用native查询后,结果会被放到object里,要想拿到对应的数据只能由object来强制转换,真的好烦人。因为工作原因,笔者(sourcefour)正在做大量的统计而每次都要进行强制转换,这其实是很麻烦的。我在想如果native S

sourceFour的专栏 8902

hibernate 原生sql返回结果执行AddEntity方法

参看博文:http://blog.csdn.net/forandever/article/details/4520787                     http://blog.csdn.net/yangfanend/article/details/7165086 总结:   1、使用Hibernate 原生SQL查询,当多个表的关联时,或者返回多个表的字段时,最好要添加别名,

沉底的石头 1万+

hibernatesql查询实体映射

1、“强”表间关系实体映射 主要是指设置了外键或其他关联键的相关表,po内已经加入了关联的实体成员,hbm中也配置了many-to-one、one-to-one等 此类表的查询上经常会采用hql的查询写法,这种映射直接使用hql相对很容易 如po UserInfo包含User成员,查询即可如下写法: StringBuffer sb = new StringBuffer("from Us

1113

hibernate原生sql查询映射java bean问题,出现Ljava.lang.object错误

如果bean不是持久化对象,即普通vo对象,单纯通过query.list()强转会出现错误,因为createSQLQuery返回的list中存放的是object[ ],即对象数组 解决方法有两种 1、遍历object[ ]来装配bean对象  List employeeData = query.list(); 返回的employeeData 中的数据是object[],这样取值:

qq_26941053的博客 995

hibernate查询返回实体、createSQLQuery的addEntity()和setResultTransformer(),解决CHAR字段只出一位字符的问题

hibernate SQL 查询返回实体、Map类型 1. 使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式: Listcats = sess.createSQLQuery( " select * from cats " ).addEntity(Cat...

qiudechao1的博客 1095

Hibernatesql联合多个表查询,并将结果映射成多个实体,再取实体的属性封装到一个bean中...

hibernate中可以用addEntity("o", Order.class)将查询结果映射实体,这些实体存放在list中, 具体操作如下 String querysql = "select {o.*},{e.*} from " +sql + " order by o.O...

707

Hibernate执行原生sql查询结果直接转为VO

Hibernate原生sql查询查询结果直接转换为VO,不必非要指定属性大写

Mungo的专栏 4530

Hibernate3.2.6 原生sql 查询使用方法,将查询结果直接转换为POJO,不必非要指定属性大写

1.由于SQL语法本身的复杂,及各种数据库原生功能的多样性,HQL和QBC不能涵盖所有的查询特性,这时就需要采用原生SQL达到期望的目的。Hibernate 完全支持直接使用数据库SQL语言进行查询,并将查询结果进行了简单的封装。不必再对ResultSet进行烦琐的操作,因为查询结果依然是由持久化对象的集合。仍然可以用面向对象的思想进行编程。2.Hibernate 为执行本地查询提供了专门的

houlc的专栏 3853

hibernate 原生sql查询结果集处理

主要是谈怎么拼装 转换结果 其中涉及的主要是怎么理解 Object[] ojbArr 这个是Object[] 是说结果集的每一列 是一个 Object数组。而不是说所有的结果集整个是个Object数组。 直接看我的代码例子吧,好理解些。 [code="java"] @Transactional(propagation=Propagation.REQUIRED, rea...

iteye_8719的博客 304

Hibernate sql语句中字段转存实体类对象

sql语句中 \" 可以不用写了

Java小白的博客 3085

Hibernate SQLQuery 返回List<Bean>结果

Hibernate hql查询语句: list=getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql).list(); Hibernate sql查询语句: getHibernateTemplate().getSessionFactory().getCurrentSession().cre

hly_rain的专栏 4588
上一篇: fmt详解--实例
下一篇: 如何在ie8下调试js代码
芋头yy
博客等级 码龄18年 162粉丝 79原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值