文档章节

Hibernate 的三种查询方式:HQL、Criteria、Sql

风中帆
 风中帆
发布于 2014/06/18 08:44
字数 524
阅读 22142
收藏 17

第一种方式:HQLHibernate Query LangugeHibernate 查询语言)查询

是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式

语法:[select/update/delete……] from Entity [where……] [group by……] [having……] [order by……]

 

(1).没使用Spring框架的写法:

使用HQL需要四步

得到Session、编写HQL语句、创建Query对象(Query接口是HQL 查询接口。它提供了各种的查询功能)、执行查询,得到结果

    sessionFactory =

        new Configuration().configure().buildSessionFactory();

    session = sessionFactory.openSession();

    String hql = “from Street”;

    Query query = session.createQuery(hql);

    List<Street> list = query.list();

 

(2).使用Spring框架的写法:

String queryString = "select form entity ....";

List list=getHibernateTemplate().find(queryString);

 

 

第二种方式:Criteria 查询

Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;

就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件

Hibernate 自动产生SQL 查询语句

 

(1).没使用Spring框架的写法;

CriteriaHibernate Session进行创建

SessionFactory sessionFactory = new Configuration().configure()

              .buildSessionFactory();

      Session session = sessionFactory.openSession();

      Criteria criteria = session.createCriteria(User.class);

      List result = criteria.list();

      Iterator it = result.iterator();

 

 (2)使用Spring框架的写法:

import org.hibernate.criterion.DetachedCriteria;

 

DetachedCriteria criteria=DetachedCriteria.forClass(ObjectEntity.class);

criteria.add(Restrictions.eq("propertyName", propertyValue));

List result=getHibernateTemplate().findByCriteria(criteria);

 

 

第三种方式:使用SQL语句查询(以下都是使用了Spring框架的写法)

1).这是把执行结果放到了一个类里:(这个类通常使用VO实体,VO实体一般就只用来接收查询结果)

List list = getHibernateTemplate().executeFind(new HibernateCallback() {

          public Object doInHibernate(Session session) throws HibernateException, SQLException {

                            StringBuffer hqlBuffer = new StringBuffer("");

                            hqlBuffer.append("select column_Name  from ...");//里面是SQL语句

                                              

                         SQLQuery sqlQuery = session.createSQLQuery(hqlBuffer.toString());

                 sqlQuery.addScalar("propertyName",Hibernate.STRING);//propertyName        ObjectVO实体的一个属性

                            sqlQuery.setResultTransformer(Transformers.aliasToBean(ObjectVO.class));    

                      List list = sqlQuery.list();

                      return list;//此处list集合中存放的是ObjectVO对象

                            }

                 });

 

2).返回结果放到list中的:

           final String queryString = "";//sql语句

           List resultList=getHibernateTemplate().executeFind(new HibernateCallback() {

                 public List doInHibernate(Session session) throws HibernateException, SQLException {

                      SQLQuery sqlQuery = session.createSQLQuery(queryString);

                      List list=sqlQuery.executeUpdate();

                      return list;

                 }

           });

 

 

3).无返回结果:

               final String queryString = "";//SQL语句

           getHibernateTemplate().executeFind(new HibernateCallback() {

                 public Object doInHibernate(Session session) throws HibernateException, SQLException {

                      SQLQuery sqlQuery = session.createSQLQuery(queryString);

                      sqlQuery.executeUpdate();

                      return null;

                 }

           });

© 著作权归作者所有

共有 人打赏支持
风中帆
粉丝 14
博文 197
码字总数 17695
作品 0
青岛
私信 提问
关于Hibernate的Criteria查询

如同大家所了解的Hibernate框架技术是现今的主流SSH之一的技术,Cirteria查询诞生让的我们看到一种全新的方式(不得不说独特),不用自己编写的SQL或HQL(Hibernate Query Languae)语句 (这...

梦游先生
2013/12/10
0
0
Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略; 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja...

别叫小伙
2017/03/09
0
0
(J2EE学习笔记)六种方式实现hibernate查询

对Hibernate的底层调用数据库查询并不是很了解,引用了这位前辈的一篇博文。 注明文章出处:http://www.cnblogs.com/shiyangxt/archive/2009/01/13/1375151.html 实现hibernate查询的六种方式...

w1sw
2016/04/15
0
0
Hibernate使用小记

在使用Hibernate开发的过程中,遇到场景in条件查询,查询条件里的个数超过1w甚至更高(且不讨论这种方式是否合理),在生成hql,执行查询的时候发现执行list()方法的时候特别慢。后经从网查询...

Only_小白
2016/05/10
178
0
Java程序员从笨鸟到菜鸟之(六十四)细谈Hibernate(十五)HQL与QBC查询方式详解

首先来看一下,hibernate提供的几种检索方式: 1.导航对象图检索方式 :根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以...

长平狐
2012/11/12
178
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 风扇写着先生请自爱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @蚂蚁哈哈哈 :分享陈奕迅的单曲《落花流水》 《落花流水》- 陈奕迅 手机党少年们想听歌,请使劲儿戳(这里) @车谷 :我发现每天上班都好困 ...

小小编辑
今天
17
2
centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
8
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部