`

Hibernate查询的六种实现方法

阅读更多
   hibernate查询的6种方法。分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询 。
   如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。

HQL查询

HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:

static   void  query(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();
  }
 }

适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。

对象化查询Criteria方法 :

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

适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。

动态分离查询DetachedCriteria
static  List dc(DetachedCriteria dc) {

  Session s  =  HibernateUtil.getSession();
  Criteria c  =  dc.getExecutableCriteria(s);
  List rs  =  c.list();
  s.close();
   return  rs;
 }
DetachedCriteria dc  =  DetachedCriteria.forClass(User. class );
   int  id  =   1 ;
   if  (id  !=   0 )
   dc.add(Restrictions.eq( " id " , id));
  Date age  =   new  Date();
   if  (age  !=   null )
   dc.add(Restrictions.le( " birthday " , age));
  List users  =  dc(dc);
  System.out.println( " 离线查询返回结果: "   +  users);

适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。  缺点:适用面较HQL有限。

例子查询

static  List example(User user) {
  Session s  =  HibernateUtil.getSession();
  List < User >  users  =  s.createCriteria(User. class ).add(
    Example.create(user)).list();
   //  List<User>
   //  users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
   //  .createCriteria("child").add((Example.create(user))).list();
   return  users;
 }

适用情况:面向对象操作。   缺点:适用面较HQL有限,不推荐。


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;
 }

适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法   缺点:破坏跨平台,不易维护,不面向对象。

命名查询


static  List namedQuery( int  id) {
  Session s  =  HibernateUtil.getSession();
  Query q  =  s.getNamedQuery( " getUserById " );
  q.setInteger( " id " , id);
   return  q.list();
 }



<? xml version="1.0" encoding="utf-8" ?>
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

< hibernate-mapping >
     < class  name ="com.sy.vo.User"  table ="user"  catalog ="news" >
     </ class >
     <!--  命名查询:定义查询条件  -->
     < query  name ="getUserById" >
      <![CDATA[ from User where id=:id ]]>
     </ query >
     <!--  命名查询中使用sql,不推荐使用,影响跨数据库
    <sql-query name="getUserById2">
     <![CDATA[select * from User where  ]]>
    </sql-query>  -->
</ hibernate-mapping >

适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。  缺点:不面向对象。基于hql和sql,有一定缺陷。
分享到:
评论

相关推荐

    六种方式实现hibernate查询

    六种方式实现Hibernate查询 Hibernate是一个功能强大的持久层框架,它提供了多种方式来查询数据库。下面我们将详细介绍六种方式实现Hibernate查询。 HQL查询 HQL(Hibernate Query Language)是Hibernate自己的...

    hibernate实现动态SQL查询

    本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...

    hibernate多表联合查询

    在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...

    hibernate通用查询

    2. HQL(Hibernate Query Language):这是一种面向对象的查询语言,类似于SQL,但更贴近于Java对象。HQL可以方便地进行对象间的关联查询,支持聚合函数和子查询。 3. Query API:这是基于HQL的查询接口,提供了...

    hibernateHQL关联查询

    通过本文的介绍,我们不仅回顾了数据库表连接的基础知识,还深入了解了Hibernate HQL关联查询的实现原理及应用方法。对于开发者而言,掌握HQL关联查询不仅可以提高查询效率,还能让代码更加简洁易懂。希望本文能帮助...

    hibernate自定义查询

    Hibernate支持使用`createSQLQuery`方法创建SQL查询,并返回结果集。例如: ```java Session session = sessionFactory.openSession(); SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM USER WHERE ...

    hibernate实现增删改查

    2. **查询(Read)**:使用`Session`的`get()`或`load()`方法获取对象,或者使用`createQuery()`或`createSQLQuery()`方法执行HQL(Hibernate Query Language)或SQL查询。 ```java Student student = session.get...

    hibernateCriteria查询

    Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria...

    hibernate-3.2源代码

    4. Criteria查询:提供了一种面向对象的方式来构建查询,比HQL更为灵活。 5. Query和Criteria API:提供了强大的查询能力,支持复杂的查询条件和结果集处理。 三、配置与初始化 Hibernate的配置文件(hibernate.cfg...

    hibernate annotation hibernate3

    在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行数据持久化,提高开发效率。 一、...

    Eclipse Hibernate基本配置及简单实现

    Eclipse Hibernate的基本配置和简单实现涉及了环境搭建、实体类设计、SessionFactory的获取、CRUD操作、事务处理、查询方式以及实体关系映射。理解并熟练掌握这些概念和操作,可以帮助开发者更高效地进行Java数据库...

    hibernate权威整理文档!

    Hibernate提供了简单易用的API来实现这些操作,如根据主键查询对象、更新对象状态、删除对象等。同时,可以使用HQL(Hibernate Query Language)或SQL进行更复杂的查询。 四、Hibernate体系及执行过程 Hibernate的...

    hibernate5.2.7-src源码

    4. QueryTranslator:HQL查询的解析器,将HQL语句转化为SQL语句,是Hibernate查询处理的关键环节。 五、源码剖析 1. SessionImpl:实现Session接口的具体类,是与数据库交互的入口,包含了诸如save、update、...

    Hibernate入门-搭建框架实现基本的增删改查(源码)

    **Hibernate入门:搭建框架实现基本的增删改查** Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在本教程中,我们将深入理解Hibernate的基本概念,并通过实例演示如何...

    传智播客_hibernate

    1. **对象关系映射(ORM)**: Hibernate是ORM的一种实现,它将Java对象与数据库表进行映射,使开发者可以用面向对象的方式来操作数据库。 2. **Configuration**: Hibernate配置文件(hibernate.cfg.xml)用于设置...

    hibernate分页查询

    Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults属性来实现分页。FirstResult表示从结果集的第几个元素开始获取,MaxResults...

    hibernate+spring实现分页

    // 实现方法... } ``` - **说明**: 在该类中实现了 `PaginateInterface` 的方法,并利用Hibernate和Spring进行具体的数据库操作。 #### 五、关键代码解析 1. **计算总页数**: ```java if (pageSize != 0) { ...

    Hibernate执行持久层访问步骤

    1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...

    hibernate持久化技术在网上购书系统中的设计与实现-毕业论文.doc

    2. 介绍了Hibernate的六个核心接口的作用和使用方法。 3. 应用Hibernate持久化技术在网上购书系统中的设计和实现。 4. 介绍了Hibernate持久化技术在网上购书系统中的应用场景和优点。 Hibernate持久化技术在网上...

    hibernate 开发文档发布

    除了HQL,Hibernate还提供了Criteria API,提供了一种动态构建查询的方式。Criteria API允许开发者在运行时构造查询,灵活地处理复杂的查询需求。在3.1.x版本中,Criteria API进一步完善,增加了更多的检索条件和...

Global site tag (gtag.js) - Google Analytics