`
tianhei
  • 浏览: 211621 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate API、对象状态、HQL、Criteria

阅读更多

一、Hibernate中对象状态

学习Hibernate API之前要知道Hibernate中对象的几种状态,这样对API的学习会更加深入。

 

对象状态:

瞬时(transient):刚new出的对象,没有跟Session关联。数据库中没有此条记录。

持久(persistent):此对象跟Session有关联,Session没有关闭,事务没有提交。数据库中已有此数据。

                            对象发生变化 时Hibernate还会检测到。

脱管(detached):跟Session已经没有关联,数据库中有此数据。对象发生变化时Hibernate不会检测到。也叫游离。

 

二、介绍一下Hibernate中主要的API:

 

1、org.hibernate.cfg.Configuration类

作用:配置并启动Hibernate。读取配置文件、读取映射文件。创建单实例的SessionFactory。

configure():读取"/hibernate.cfg.xml"配置文件。

buildSessionFactory():创建SessionFactory

setProperty(String key,Object value):通过代码给Hibernate设置属性值

 

2、org.hibernate.SessionFactory接口

作用:初始化Hibernate,负责创建Session。使用了工厂模式。

SessionFactory是线程安全的,一个数据库对应一个SessionFactory,生命周期长,一般在整个生命周期中有效;SessionFactory保存着和数据库连接的相关信息(url,user,password)和映射信息,以及Hibernate运行时要用到的一些信息。

openSession():创建数据库连接,并且返回一个Session。

getCurrentSession():获得当前线程的Session。在使用此方法时需要在配置文件中配置:current_session_context_class,其值为thread或jta。

 

3、org.hibernate.Session接口

作用:执行对持久化对象的CRUD操作。包含了很多常见的SQL语句。

Session是非线程安全的,生命周期短,代表一个和数据库的连接,在B/S系统中一般不会超过一个请求;内部维护一级缓存和数据库连接,如果session长时间打开,会长时间占用内存和数据库连接。

(1)、beginTransaction():开始一个事务,并且返回一个事务的实例。

(2)、save(Object):创建一条记录。

(3)、persist(Object) :同save(Object)方法类似。

(4)、saveOrUpdate(Object):创建或更新一条记录。

(5)、merge(Object):

(6)、get(Class, Serializable):根据id查询。

(7)、load(Object, Serializable):根据id查询 。查询返回的是代理对象,不会立刻访问数据库,是懒加载的。当真正去使用对象的时候才会访问数据库。

用load的时候会发现不会打印出查询语句,而使用get的时候会打印出查询语句。

使用load时如果在session关闭之后在查询此对象,会报异常:could not initialize proxy - no Session。处理办法:在session关闭之前初始化一下查询出来的对象:Hibernate.initialize(user);

使用load可以提高效率,因为刚开始的时候并没有查询数据库。但很少使用。

(8)、delete(Object) :删除一条记录

(9)、flush():把一级缓存和数据库同步一次。

(10)、clear():清空一级缓存

(11)、createSQLQuery("select * from user"):执行纯sql语句的查询。Hibernate中不建议使用sql查询。

(12)、getNamedQuery(""):命名查询,查询语句配置在.hbm.xml配置文件中。

 

4、org.hibernate.Transaction接口

作用:负责事务的操作。

commit():事务提交

rollback():事务回滚

 

5、org.hibernate.Query接口

作用:Query可以使用HQL语言来查询数据库。

list():返回查询结果集。返回结果是List。

uniqueResult() :查询唯一的结果。返回结果是Object。

setXXX():给参数设置值

executeUpdate():批量更新

分页:

setFirstResult(int):设置分页时开始的位置。不论哪个数据库都通用

setMaxResult(int):设置分页时返回的结果数。不论哪个数据库都通用

 

6、org.hibernate.Criteria接口

作用:条件查询,比Query更加面向对象。

add(Criterion):添加约束条件

 

7、org.hibernate.criterion.Restrictions类

作用:

 

8、org.hibernate.StatelessSession接口

作用:无状态Session,不和一级缓存、二级缓存打交道。通过使用该接口会把数据立刻写入到数据库。

StatelessSession s = sessionFactory.openStatelessSession();

 

三、HQL语言(Hibernate Query Language)

HQL是面向对象的查询语言。HQL查询的是对象而不是表。

HQL主要通过org.hibernate.Query来操作。Query的创建方式:

Query q = session.createQuery(hql);

String hql = "from User as user where user.name=?"; 

q.setString(0,"zhangsan");

List<User> list = q.list();

Object o = q.uniqueResult();

 

命名参数方式:

String hql = "from User as user where user.name=:n"; //冒号加上变量的名字

q.setString("u","zhangsan");

 

四、Criteria查询方式(条件查询)

Criteria是一种比HQL更加面向对象的查询方式。

Criteria c = session.createCriteria(User.class);  //参数是要查询的类

c.add(Restrictions.eq("name",n));  //添加约束条件。第一个参数是类的字段名,第二个参数是匹配的值

List<User> list = q.list();

Object o = q.uniqueResult();

 

 

 

1
1
分享到:
评论

相关推荐

    Hibernate的HQL与Criteria资料

    4. **可组合性**:可以将多个Criteria对象组合在一起,形成复杂的查询结构。 5. **易于单元测试**:因为是程序化的查询,所以更容易在单元测试中模拟和控制。 HQL和Criteria API各有优势,选择哪种取决于具体场景。...

    Hibernate数据检索(HQL)笔记

    Hibernate 数据检索(HQL)笔记提供了一个简单的示例,展示了如何使用 Hibernate 的 Criteria API 进行数据检索。通过学习本笔记,您将掌握使用 Hibernate 进行数据检索的基本知识,并能够应用于实际项目中。

    Hibernate中的查询:HQL、Criteria、原生SQl

    本篇文章将深入探讨Hibernate中的三种主要查询方式:HQL(Hibernate Query Language)、Criteria API以及原生SQL。 一、HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL...

    Hibernate数据检索(HQL)笔记

    - **解释**:此代码片段展示了如何使用 `Criteria` API 来构建一个查询,其中 `Expression.eq("name", "张三")` 表示按照 `name` 属性等于“张三”来过滤结果。最后通过 `cri.list()` 获取所有匹配的对象列表。 - ...

    Hibernate API

    老版本的Hibernate提供了Criteria API,允许通过构建Criteria对象来执行动态查询,虽然在新版本中被JPA Criteria API取代,但在某些场景下仍具有使用价值。 10. **org.hibernate.transform package** 提供了结果...

    Hibernate注解方式、HQL查询

    在Java世界中,Hibernate是一个非常流行的...同时,Hibernate还提供了Criteria API和Querydsl等其他查询方式,提供了更多灵活性和选择。通过深入学习和实践,可以更好地利用Hibernate优化数据库交互,提高开发效率。

    HibernateApi.zip

    2.5 Criteria API和HQL:提供动态构建查询的能力,相比原生SQL更具有面向对象的特性,降低了代码的耦合度。 三、Hibernate API使用流程 3.1 配置:设置数据库连接参数,包括URL、用户名、密码等,以及实体类的映射...

    Hibernate api

    10. **StatelessSession**: 虽然Session是主要的工作接口,但Hibernate也提供了无状态的Session(StatelessSession),不跟踪对象状态,适合进行大量数据的批量操作,性能更优,但不支持缓存和事务。 了解和熟练...

    Hibernate数据检索(HQL).rar

    除了HQL,Hibernate还提供了Criteria API,它提供了一种类型安全的、面向对象的查询方式。Criteria查询更动态,适合在编程时构建查询条件,而HQL更适合静态的、预先定义的查询。两者各有优势,可以根据项目需求和...

    Hibernate 中文api文档下载.zip_API_Hibernate API _hibernate api

    Hibernate通过不同的方法管理对象的状态,如makeTransient()使对象变为瞬时态,saveOrUpdate()根据对象状态决定是保存还是更新,load()和get()分别用于按ID加载已持久化的对象。 总结,Hibernate中文API文档详尽地...

    spring2.5 hibernate api

    Hibernate还提供了Criteria API,使得动态构建查询变得更加便捷,同时还有HQL,这是一种面向对象的查询语言,类似于SQL,但更适应于ORM环境。 结合Spring和Hibernate,开发者可以实现声明式事务管理,这使得在...

    Hibernate 中文api 等学习资料

    3. **查询语言**:学习HQL(Hibernate Query Language)和Criteria API,进行对象级别的查询。 4. **缓存机制**:理解一级缓存和二级缓存的概念,以及如何配置和优化缓存策略。 5. **关联映射**:熟悉一对一、一对...

    hibernate api 中文

    它提供了事务管理和对象状态管理功能,可以在Session中进行CRUD(创建、读取、更新、删除)操作。 二、Hibernate API关键组件 1. SessionFactory:这是Hibernate的顶级接口,用于创建Session实例。SessionFactory是...

    api.zip_hibernate api_hibernate api chm

    13. **状态转换**:Hibernate对象有瞬时态、持久态、脱管态和临时态四种状态,它们在不同操作下会发生转换。 14. **映射文件(hbm.xml)**:除了使用注解,还可以通过XML文件定义实体类和数据库表的映射关系。 ...

    hibernate api

    开发者可以通过构建Criteria对象,添加限制条件、排序和分组,来执行动态查询。 4. **HQL (Hibernate Query Language)**: 类似于SQL,但面向对象的查询语言。HQL可以用于获取对象或对象集合,支持复杂的查询表达式...

    Hibernate中对象的三种状态

    Hibernate提供两种查询语言,一是面向对象的Hibernate Query Language(HQL),二是Criteria API。两者都允许开发者以面向对象的方式执行数据库查询,简化了SQL的使用,使得代码更易维护。 7. 持久化类的设计: ...

    hibernate api 3.6.0 javadoc

    Hibernate提供了两种查询语言:HQL(Hibernate Query Language)和Criteria API。HQL类似于SQL,但面向对象,允许开发者以类和属性的方式进行查询。Criteria API提供了一种更加面向对象的查询方式,可以动态构建查询...

    hibernate-api

    一级缓存是每个Session内的缓存,自动管理对象状态;二级缓存则是SessionFactory级别的,可配置第三方缓存服务如Ehcache,用于存储多个Session间共享的数据。 7. **Events and Listeners**:Hibernate允许注册事件...

    hql criteria分页

    本文将详细介绍如何在Hibernate框架中实现分页功能,特别是通过HQL(Hibernate Query Language)和Criteria API两种方式。 #### 二、HQL分页简介 HQL是Hibernate提供的面向对象的查询语言,它类似于SQL但更接近于...

Global site tag (gtag.js) - Google Analytics