Hibernate查询方式 一

Hibernate查询方式

说到hibernate的查询方式,我们自然而然就想到了它——hql,hibernate query language.hql是使用hibernate框架的变成配朋友们使用最多的一种方式,它以自身的独特的优势:屏蔽数据库,书写灵活的优点,备受大家的青睐。但是Hibernate不仅给我们提供了这一种查询方式,这时候悠然要说来,是不只一种,还有sql,对,确实还有sql,但是还有一种,就是Criteria 查询。那么今天,我们就来聊一聊hibernate的几种查询方式。

Hibernate的查询方式有六种:Hql,Sql,Criteria,DetachedCriteria,QBE(query by example),命名查询。这里我们就说说种Hibernate常用的查询方式的使用及其利弊。

一、 HQL查询

hql是最常用的,有如下优点:

  • 写起来灵活直观;
  • 与大家熟悉的SQL的语法差不太多,所以上手快。

    条件查询、分页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,其它的,包括一些查询函数(count(),sum()等)、查询条件的设定等,也都跟SQL语法差不太多。

  • 与SQL的不同的就是把表名换成了类名。

    如以前我们查询的是t_user表,现在我们使用User这个实体就可以找到t_user表,这也是ORM框架的最大的特色,面向对象

弊端:

  • 仅适用于hibernate框架,适用面小。

PS: 在hql中关键字不区分大小写,但是属性和类名区分大小写。

接下来,我们看示例代码:

static void queryTest(String name)
{
  Session s=null;
  try
  {
    s=HibernateUtil.getSession();
    //from后面是对象,不是表名
   String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
   Query query=s.createQuery(hql);
   query.setString("name", name);
   List<Admin> list=query.list();
   for(Admin admin:list)
   {
     System.out.println(admin.getAname());
    }
  }finally{
    if(s!=null)
    s.close();
   }
  }

二、对象化查询Criteria方法

这种方式比起HQL来说更加的面向对象,不需要我们写任何的查询语句,hql也好,sql也好,我们就只需要告诉session,我们要查询什么,条件是什么。

一般需要以下三个步骤:

1、 使用Session实例的createCriteria()方法创建Criteria对象

2、使用工具类expression的方法为Criteria对象设置查询条件;

Order工具类的方法设置排序方式;

Projections工具类的方法进行统计和分组。

3、使用Criteria对象的list()方法进行查询并返回结果

这种查询的优点是:

  • 面向对象操作。

    革新了以前的数据库操作方式,易读。

缺点:

- 适用面相对于HQL来说有限。

因为面向对象 了,那么封装严了,同时灵活性方面就相对的减少了,因为目前提供的工具类中还不能像直接写hql语句那么灵活。

以下是操作示例:

static void qbc(String name,String password){
   Session session=null;
   try{
    session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(Admin.class);
    //eq是等于,gt是大于,lt是小于,or是或
    criteria.add(expression.eq("aname",name));
    criteria.add(expression.eq("apassword", password));
    List<Admin> list=criteria.list();
    for(Admin admin:list){
    System.out.println(admin.getAname());
    }
   }finally{
    if(session!=null)
    session.close();
   }
  }

以上两种查询方式的优点:

  • 都是对数据库透明的操作方式,即我们不必为后期换数据库而担心,付出维护sql的工作量。

缺点:

  • 有些数据特性的东西无法利用。

SQL 查询

这种查询方式,我就不需要过多的解释了,就是我们原生的SQL语句进行查询。看例子

static List sql() {

   Session s = HibernateUtil.getSession();
   Query q = s.createSQLQuery("select * from user").addEntity(User.class);
   List<User> rs = q.list();
   s.close();
   return rs;
  }

优点:

  • 随心所欲写出需求的sql的语句,完全灵活。

缺点:

  • 对数据库不透明。

    对于不同的数据库,写出来的sql是不同的,如果需要换数据库,那就得重写sql。

使用场合:系统不需要换数据库的情况下,还是sql使用方便,效率高。

以上是三种查询方式,下篇博客我们继续DetachedQuery,命名查询方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-10 00:06:22

Hibernate查询方式 一的相关文章

hibernate 查询方式汇总

主要摘自  http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html ,http://blog.csdn.net/xingtianyiyun/article/details/7703429 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种.但是细分可以有如下几种: 一.HQL查询方式     这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来

Hibernate查询方式

Hibernate查询方式 1 对象导航查询 (1)根据id查询某个客户,再查询这个客户里面所有的联系人   2 OID查询 (1)根据id查询某一条记录,返回对象   3 HQL查询 (1)Query对象,写hql语句实现查询   4 QBC查询 (1)Criteria对象   5 本地sql查询 (1)SQLQuery对象,使用普通sql实现查询 对象导航查询 1 查询某个客户里面所有联系人过程,使用对象导航实现   2 代码 OID查询 1 根据id查询记录 (1)调用session里面的

(十)Hibernate 查询方式

 所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2,OID 查询方式: 3,本地SQL 查询方式: 4,HQL 查询方式: 5,QBC 查询方式:(Query By Criteria) 第二节:本地SQL 查询方式 Student.java 1 package com.wishwzp.model; 2 3 public class Student

Hibernate查询方式---HQL方式

这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样.###注意:     在hql中关键字不区分大小写,但是属性和类名区分大小写示例1: static void query(String name){ Session s=null; try{ s=Hiber

Hibernate查询方式(补)

-----------------siwuxie095 Hibernate 查询方式 1.对象导航查询 根据已经加载的对象,导航到它的关联对象 以客户和联系人为例(一对多),如下: 根据 id 查询某个客户,再查询这个客户中的所有联系人 2.OID 查询 根据 id 查询某一条记录,返回对象 3.HQL 查询 Query 对象:使用 hql 语句实现查询 4.QBC 查询 Criteria 对象:直接调用方法实现查询(不需要写语句) 5.本地 SQL 查询 SQLQuery 对象:使用普通 sq

Hibernate学习10——Hibernate 查询方式

本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name;

hibernate入门---Hibernate查询方式(for循环、构造器、对象数组等)【第三天,相当于总结整合】

Hibernate查询方式[内连接和外连接不在此篇] 本文讲述的是HQL以及各种情况输出对象的for循环以及构造器的例子,当然这是Hibernate结合一起完成的任务.技术上,离开一些方法,不掌握一些基本的方法,灵活使用,是会带来诸多不便的. 查询方式都在例子里的方法里,我把全部都写在了一个类里,基本思路: 类:Customer->CustomerManager->Demo 配置文件:hibernate.cfg.xml->Customer.hbm.xml 关系: (我们不去考虑什么ses

Hibernate 查询方式、JPA查询方式

hibernate 查询方式: OID 查询 对象导航查询 HQL 方式查询 QBC方式查询 原生SQL方式查询 JPA 查询方式: OID 查询 对象导航查询 JPQL 方式查询 CriteriaBuild方式查询 https://blog.csdn.net/ID_Kong/article/details/70225032#criteria-%E6%9F%A5%E8%AF%A2 原生SQL方式查询 原文地址:https://www.cnblogs.com/linhuaming/p/117831

Hibernate 查询方式(HQL/QBC/QBE)汇总

作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点眼花缭乱,配置使用起来也稍微有点复杂. 但是丝毫掩盖不了它迷人的地方,本篇博客试着汇总 Hibernate 所有的查询方式. 萝卜青菜各有所爱,工作中可以根据自己的喜好选择其中的几种进行编程. 1. HQL 方式,参数使用问号占位(4.1 版本中已被废弃) public List<UserPO>