`

Hibernate核心类

 
阅读更多

Hibernate核心编程

 

ORM:指的是对象关系映射(object/Relation Mapping)。

 

Hibernate:指的是对象关系映射的一种框架工具。

 

PO:持久化对象(Persistent Object),作用是完成持久化操作,即以面向对象的方式操作(增删改查)数据库。

 

POJO:(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans.

 

注意:为了使其具有持久化能力,还需创建该它的映射文件xml,如user.xml

 

同时在Hibernate.cfg.xml中添加<mapping resource="user.xml"/>

 

PO有3个状态:瞬时、持久化、脱管。


一、核心类
Session接口:负责持久化对象的CRUD操作
SessionFactory接口:负责初始化Hibernate
Configuration接口:负责配置并启动Hibernate
Transaction接口:负责事务
Query接口和Criteria接口:负责执行各种数据库查询
注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成
它就被丢弃了。
二、Session的3个状态
(1)自由状态(瞬时态):不曾持久化,未与任何Session相关联
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系
session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。 
(2)持久化对象:仅与一个Session相关联
1. 和session实例关联; 
2. 在数据库中有与之关联的记录
hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。 
当一个session执行close()或clear()、evict()之后,持久对象变成托管对象,此时持久对象会变成托管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
(3)游离状态(托管态):已经进行过持久化,但当前未与任何Session相关联
托管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。 
1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收; 
2. 比瞬时对象多了一个数据库记录标识值
三、Session操作
保存对象
save()
装载对象
load()
装载对象
get()
强制提交并刷新
flush()
提交游离状态的对象
update()
移除持久化对象
delete()
强制装载对象
refresh()
四、Query查询
不带参数查询
session.createQuery("from user");
带参数的查询
session.createQuery("from user where userid=:userid");
query.setString("userid","admin");
带集合的查询
session.createQuery("from user where userid in(:userList)");
query.setString("userList",userList);//userList是一个List
取得List结果集
query.list();
取得iterator
query.iterate();
取得一个对象
query.uniqueResult();
标量查询
session.createQuery("select u.username from user u group by u.username");
分页查询
Query query=session.createQuery("from user");
query.setFirstResult(10);//设置起始范围
query.setMaxResult(20);//设置结束范围
List list=query.list();
创建SQL查询
List users=session.createSQLQuery("select {u.*} from User {u}").list();
五、使用Criteria进行条件查询
创建Criteria实例
Criteria criteria=session.createCriteria(User.class);
criteria.setMaxResult(50);
List users=criteria.list();
添加查询条件
Criteria criteria=session.createCriteria(User.class);
criteria.add(Restrictions.like("username","admin%"));
criteria.add(Restrictions.between("ID",1,10));
List users=criteria.list();
或直接用sql
Criteria criteria=session.createCriteria(User.class)
.add(Restrictions.sql("lower({alias}.username) like lower(?)","admin%",Hibernate.STRING));
添加排序条件
Criteria criteria=session.createCriteria(User.class);
.add(Restrictions.like("username","admin%"))
.addOrder(Order.asc("username"))
.addOrder(Order.desc("password"))
.setMaxResult(50)
.list();
构造条件查询
User user=new User();
user.setUsername("admin");
List results=session.createCriteria(User.class).add(Example.create(user)).list();

 

 

六、hibernate主键生成机制
1) assigned
主键由外部程序负责生成,无需Hibernate参与。

2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。

6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。

7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

8) uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。

10) foreign
使用外部表的字段作为主键。一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。

另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制

分享到:
评论

相关推荐

    Hibernate核心类和接口的详细介绍

    Hibernate核心类是Hibernate框架的核心组件,负责将Java对象与数据库表进行映射。这些核心类包括: * org.hibernate.Session:提供了对数据库的访问接口,用于执行数据库操作。 * org.hibernate.Query:提供了对...

    hibernate核心jar包

    3. **SessionFactory**:SessionFactory是Hibernate的核心组件,它是线程安全的,负责创建Session对象。Session是与数据库交互的入口点,提供了持久化对象的实例化、查询、更新和删除等功能。 4. **Transaction管理...

    hibernate核心代码

    它是Hibernate的核心组件,通过配置文件创建: ```java Configuration config = new Configuration().configure(); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings...

    Hibernate核心接口

    "Hibernate核心接口" Hibernate 是一种流行的 Java 持久化框架,它提供了多种核心接口来实现数据的持久化操作。这些核心接口是 Hibernate 的基础组件,任何 Hibernate 应用程序都需要使用它们。下面将详细介绍这五...

    hibernate 核心技术

    其核心组件包括ActionForm、Action、ActionServlet、Tiles等。ActionForm用于接收用户请求数据,Action处理业务逻辑并调用模型,ActionServlet负责请求分发,而Tiles则帮助构建复杂的页面布局。 Hibernate是一个...

    Hibernate核心配置文件对照表

    `hibernate.properties`是Hibernate的核心配置文件,用于设定与数据库连接、缓存策略、事务管理等相关的重要参数。下面我们将详细探讨这个配置文件中的关键知识点。 1. **数据库连接配置** - `hibernate....

    Hibernate 核心类库

    《Hibernate核心类库详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层数据存储。本篇文章将详细探讨`hibernate-release-...

    hibernate基础jar包

    2. Hibernate核心组件: - hibernate-core.jar:这是Hibernate的核心库,包含了实体管理、会话工厂、查询语言(HQL和Criteria API)等关键功能。 - hibernate-entitymanager.jar:提供JPA(Java Persistence API)...

    Hibernate教程03_Hibernate核心开发接口介绍

    SessionFactory是Hibernate的核心组件,它是线程安全的,负责管理所有数据库会话的创建。SessionFactory由Configuration类实例化,通常在应用启动时创建一次并缓存,因为创建过程涉及读取配置信息、加载映射文件等较...

    hibernate的jar包

    下面将详细介绍Hibernate框架的核心组件、功能以及如何在项目中使用Hibernate的jar包。 1. Hibernate核心组件: - Hibernate Core:这是Hibernate的核心模块,包含了对持久化对象的基本支持,如Session接口、...

    hibernate_jar包

    Hibernate核心组件** - Session:这是与数据库交互的主要接口,提供了事务管理、缓存管理和对象持久化的操作。 - Transaction:负责数据库事务的开始、提交和回滚。 - Query和Criteria API:用于执行数据库查询,...

    hibernate 4.3.10.Final

    1.2 Hibernate核心价值:Hibernate通过JDBC接口与数据库交互,提供了缓存机制、事务管理、查询语言HQL(Hibernate Query Language)等,大大降低了开发的复杂性,提高了代码的可读性和可维护性。 二、Hibernate ...

    hibernate所有开发包

    总结,这个压缩包包含了Hibernate开发所需的全部jar包,包括Hibernate核心库、JTA事务管理、JPA规范实现等,使用这些jar包,开发者可以轻松实现Java项目中的ORM功能,利用Hibernate的强大功能进行数据库操作,同时...

    Hibernate 3.2核心包

    这个核心包包含了实现ORM功能所需的所有基本组件,使得开发者能够将Java类与数据库表进行映射,从而在Java应用中操作数据库变得更加方便。SSH(Struts、Spring、Hibernate)是Java Web开发中的经典三层架构,其中...

    hibernate完整开发包

    3. **Hibernate核心组件**:包括Session接口、SessionFactory、Entity、Criteria API等,这些都是Hibernate框架的核心组成部分,用于实现对象的持久化。 4. **映射机制**:Hibernate使用XML或注解的方式定义对象与...

    hibernate最新版本5.2.3所有jar包

    1. **Hibernate核心组件**: - `hibernate-core.jar`:这是Hibernate的核心库,包含了ORM的主要功能,如实体管理、会话管理、查询语言(HQL)等。 - `hibernate-entitymanager.jar`:提供了JPA(Java Persistence ...

    Hibernate最小功能包

    "Hibernate最小功能包"指的是仅包含实现基本持久化服务所需的核心组件和依赖的包集合。这个压缩包旨在提供一个轻量级的解决方案,便于快速集成到项目中,同时降低不必要的依赖。** ### Hibernate核心组件 1. **...

    hibernate3所需jar包

    2. **Hibernate核心组件**:Hibernate3的核心组件包括`hibernate-core.jar`,这个包包含了Hibernate的主要API,如SessionFactory、Session、Query等。它提供了对实体对象的管理、事务处理、缓存管理等功能。 3. **...

Global site tag (gtag.js) - Google Analytics