`

第二个hibernate

阅读更多

在 第一個 Hibernate 中介紹如何使用Hibernate在不使用SQL的情況下,以Java中操作物件的習慣來插入數據至資料庫中,當然儲存數據之後,更重要的是如何將資料讀 出,Hibernate中也可以讓您不寫一句SQL,而以Java中操作物件的習慣來查詢數據。

直接來看個範例:
 

  • HibernateDemo.java
package onlyfun.caterpillar;

import java.util.Iterator;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;

public class HibernateDemo {
    public static void main(String[] args) {
        Session session = HibernateUtil.getSessionFactory().openSession(); 

        Criteria criteria = session.createCriteria(User.class);
        // 查詢user所有欄位
        Iterator users = criteria.list().iterator();
        System.out.println("id \t name/age");
        while(users.hasNext()) {
            User user = (User) users.next(); 
            System.out.println(user.getId() +
                                " \t " + user.getName() +
                                "/" + user.getAge()); 
        }

        // 查詢user中符合條件的欄位
        criteria.add(Expression.eq("name", "caterpillar"));
        users = criteria.list().iterator(); 
        System.out.println("id \t name/age");
        while(users.hasNext()) {
            User user = (User) users.next(); 
            System.out.println(user.getId() +
                " \t " + user.getName() +
                "/" + user.getAge()); 
        }
 
        session.close();
        
        HibernateUtil.shutdown();
    }
}


Criteria對SQL進行封裝,對於不甚瞭解SQL的開發人員來說,使用Criteria也可以輕易的進行各種數據的檢索,您也可以使用 Expression設定查詢條件,並將之加入Criteria中對查詢結果作限制,Expression.eq()表示設定符合條件的查詢,例如 Expression.eq("name", "caterpillar")表示設定查詢條件為"name"欄位中為"caterpillar"的資料。

先來看一下執行結果:
 

Hibernate: 
    select
        this_.id as id0_0_,
        this_.name as name0_0_,
        this_.age as age0_0_ 
    from
        T_USER this_
id      name/age
1      caterpillar/30
2      bush/20

Hibernate: 
    select
        this_.id as id0_0_,
        this_.name as name0_0_,
        this_.age as age0_0_ 
    from
        T_USER this_ 
    where
        this_.name=?
id      name/age
1      caterpillar/30


Criteria是物件導向式的查詢方式,讓不瞭解SQL的開發人員也可以輕易進行各項查詢,但Criteria的API目前還不是很完善,而 Hibernate鼓勵的查詢方式,是透過HQL(Hibernate Query Language)來進行,直接來看個實例:

  • HibernateDemo.java
package onlyfun.caterpillar;

import java.util.Iterator;

import org.hibernate.Query;
import org.hibernate.Session;

public class HibernateDemo {
    public static void main(String[] args) {
        Session session = HibernateUtil.getSessionFactory().openSession(); 
        
        // 使用HQL建立查詢
        Query query = session.createQuery("from User");
        Iterator users = query.list().iterator();
        System.out.println("id \t name/age");
        while(users.hasNext()) {
            User user = (User) users.next(); 
            System.out.println(user.getId() +
                    " \t " + user.getName() +
                    "/" + user.getAge()); 
        }
 
        System.out.println();
 
        // 使用HQL建立查詢
        query = session.createQuery("from User user where user.name like ?");
        // 設定查詢參數
        query.setParameter(0, "caterpillar");
        users = query.list().iterator();
        System.out.println("id \t name/age");
        while(users.hasNext()) {
            User user = (User) users.next(); 
            System.out.println(user.getId() +
                                " \t " + user.getName() +
                                "/" + user.getAge()); 
        }
 
        session.close();
        
        HibernateUtil.shutdown();
    }
}


執行結果:

Hibernate: 
    select
        user0_.id as id0_,
        user0_.name as name0_,
        user0_.age as age0_ 
    from
        T_USER user0_
id      name/age
1      caterpillar/30
2      bush/20

Hibernate: 
    select
        user0_.id as id0_,
        user0_.name as name0_,
        user0_.age as age0_ 
    from
        T_USER user0_ 
    where
        user0_.name like ?
id      name/age
1      caterpillar/30


透過Query介面,您可以先設定查詢參數,之後透過setXXX()等方法,將指定的參數值填入,而不用每次都撰寫完整的HQL,Query的 setParameter()方法第一個參數是指定 ? 出現的位置,從 0 開始,第二個參數則是設定查詢條件。

分享到:
评论

相关推荐

    hibernate3入门

    - **第二个Hibernate程序实例**:进一步探索更复杂的映射和查询操作。 #### 四、配置Hibernate Hibernate作为ORM解决方案,底层依赖于JDBC来操作数据库。因此,首先需要获取相应的JDBC驱动程序。本例中使用MySQL...

    hibernate第一个hibernate

    在开始第一个Hibernate项目之前,你需要下载Hibernate的JAR包,并将其添加到项目的类路径中。同时,还需要配置Hibernate的主配置文件`hibernate.cfg.xml`,其中包含数据库连接信息、方言等设置。 3. 实体类与映射...

    我的第一个Hibernate 程序

    【我的第一个Hibernate程序】这篇文章是关于初学者如何创建并运行第一个Hibernate程序的详细教程。Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的编程,简化了数据...

    10Hibernate 程序设计

    2. **第二个Hibernate案例**: - 进一步扩展,不仅添加记录,还包括更新、删除和查找操作,展示了Hibernate的完整CRUD功能。 ### 总结 Hibernate通过ORM技术将Java对象与关系数据库无缝连接,简化了开发流程,...

    菜鸟快速运行第一个hibernate

    标题“菜鸟快速运行第一个hibernate”表明了这是一个针对初学者的教程,旨在帮助他们快速上手并成功运行他们的第一个Hibernate项目。Hibernate是一个强大的Java ORM(对象关系映射)框架,它简化了数据库操作,使得...

    学习hibernate第二天

    本篇将基于“学习Hibernate第二天”的主题,结合“源码”和“工具”这两个标签,深入探讨Hibernate的一对一主键关联双向映射,以及如何在实际开发中利用这一特性。 在Java对象关系映射(ORM)框架中,数据模型通常...

    hibernate第一个例子

    【hibernate第一个例子】 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本示例将引导初学者了解如何使用Hibernate进行简单的数据库连接和操作。 首先,我们需要...

    Hibernate二级缓存

    2. **编写测试代码**:例如,在测试代码中,当执行两次相同的查询时,第二次查询将直接从查询缓存中获取结果,而不是再次执行数据库查询。 然而,需要注意的是,查询缓存可能引发“n+1”问题。当从查询缓存中获取...

    第一个手写Hibernate

    "第一个手写Hibernate"项目旨在帮助开发者深入理解Hibernate的工作原理,通过手动编写相关代码,以实践的方式来学习和掌握Hibernate的核心概念。 **一、Hibernate简介** Hibernate是一个开源的ORM框架,它允许...

    深入浅出Hibernate(PDF)第二部分

    本书由互联网上影响广泛的开放文档OpenDoc系列自由文献首份文档“Hibernate开发...深入浅出hibernate(PDF)第二部分,深入浅出hibernate(PDF)第三部分全部下载,并解压到一个地方才可以正常解压阅读.给大家带来不便望谅解.

    Hibernate实战第二版

    《图灵程序设计丛书·Hibernate实战(第2版)》通过一个应用将数百个例子融合起来,不仅深入剖析了Hibernate 3.2和Java Persistence丰富的编程模型。还深刻阐述了数据库设计、ORM和优化等方面的基本原则、策略和最佳...

    spring-hibernate 4个版本

    3. spring-hibernate2-2.0-m2.jar:这是第二个主要版本的第二个里程碑,版本号为2.0。 4. spring-hibernate2-2.0-m1.jar:与上面的文件类似,但这里是第二个里程碑的首个版本。 这些jar文件包含了Spring与Hibernate...

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    hibernate实战 英文版

    #### 二、书籍内容概述 本书不仅是一本教程和参考指南,还深入介绍了如何开发和优化工业级别的Hibernate应用程序。作者们按照从简单到复杂的顺序逐步介绍概念,并通过丰富的实例来解释每一个细节。以下是本书覆盖的...

    hibernate第二次测试机试题

    在本题目中,我们需要使用 Hibernate 框架来开发一个基于 WEB 的招标管理系统。以下是针对这个项目的详细知识点和实现步骤: 1. **Hibernate 框架**:Hibernate 是一个 Java ORM(对象关系映射)框架,它允许开发者...

    孙卫琴hibernate source code2

    《孙卫琴Hibernate源码解析第二部分》 在IT领域,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者与数据库之间的交互。孙卫琴老师的“Hibernate源码解析”系列深入剖析了Hibernate的内部...

    Hibernate 的第一个例子

    在本文中,我们将深入探讨如何创建Hibernate的第一个例子,帮助初学者快速入门。** **一、Hibernate 简介** Hibernate 提供了丰富的API,简化了Java应用程序与关系数据库之间的交互。它通过XML配置文件或注解来定义...

    第一个Hibernate代码, Hello Hibernate

    "第一个Hibernate代码, Hello Hibernate" 这个标题表明我们将要探讨的是一个初学者级别的Hibernate教程,可能是通过一个简单的项目或示例来介绍如何使用Hibernate框架。Hibernate是一个开源的对象关系映射(ORM)...

    hibernate入门--第一个实例

    - Hibernate提供了第一级缓存(Session缓存)和第二级缓存(可选),以提高性能并减少对数据库的访问。 在学习这个实例的过程中,你需要理解每个步骤的目的和作用,同时熟悉Hibernate的主要API。实践是掌握知识的...

    hibernate二级缓存示例源码

    二级缓存通常由第三方插件如Ehcache、Infinispan等提供,这些插件实现了JCache(JSR-107)标准,与Hibernate无缝集成。 ### 3. 二级缓存配置 在Hibernate配置文件(hibernate.cfg.xml)中,我们需要添加二级缓存...

Global site tag (gtag.js) - Google Analytics