"Hibernate学习笔记"
Hibernate是一个开源的Java框架,专门用于实现对象-关系映射(ORM)。ORM允许开发者将数据库中的表格与Java类的对象进行映射,使得在Java应用程序中可以直接操作对象,而无需编写大量的SQL代码。通过Hibernate,开发者可以避免与特定数据库系统的紧密耦合,提高代码的可移植性。
### Hibernate简介
传统的数据库编程通常需要手动编写SQL语句并与JDBC交互。尽管JDBC提供了一个标准接口,但仍然需要处理SQL和对象之间的转换。Hibernate作为一种ORM工具,简化了这个过程,通过自动化的映射机制,将Java对象与数据库表之间的关系进行了抽象。
### Hibernate的核心组件
1. **配置文件**:Hibernate的配置文件(通常是hibernate.cfg.xml)包含了数据库连接信息,如URL、用户名、密码以及实体类的映射信息等。
2. **映射文件**:使用Hibernate的XML映射文件(*.hbm.xml),定义Java类与数据库表之间的映射关系。
3. **Session**:Hibernate的核心接口,负责管理对象的状态和事务,提供保存、更新、删除对象和执行查询等功能。
4. **Criteria查询**:一种更加面向对象的查询方式,替代传统的HQL(Hibernate Query Language)或SQL,可以更方便地构建动态查询。
### 数据操作
1. **基本数据查询**:通过Session的`load()`或`get()`方法获取对象,`save()`或`saveOrUpdate()`用于持久化新对象,`update()`更新已存在的对象,`delete()`移除对象。
2. **Query接口**:提供对HQL或Criteria查询的支持,可以进行复杂的查询操作,包括分页、条件查询、排序等。
3. **事务管理**:Hibernate支持JTA(Java Transaction API)和JPA(Java Persistence API)的事务管理,确保数据的一致性。
### 映射类型
1. **继承映射**:支持单表继承、联合继承和表 per 类的继承策略,将类的继承关系映射到数据库的表结构。
2. **Component映射**:将复杂类型映射为单独的数据库字段,提供了一种内嵌对象的映射方式。
3. **集合映射**:如Set、List、Map等集合类型的映射,可以指定排序规则和关联关系。
4. **一对多、多对一、一对一**:这些关系映射允许对象之间建立关联,如一个用户有多个订单(一对多),一个订单属于一个用户(多对一),一个用户只有一个唯一的邮箱(一对一)。
5. **多对多映射**:通常涉及中间表,用于表示两个类之间的多对多关系。
### 状态与持久化
- **瞬时状态**:对象未与Session关联,不被Hibernate管理。
- **持久化状态**:对象已与Session关联,其变更会在适当的时候同步到数据库。
- **托管状态**:持久化对象已从Session中加载,但Session尚未关闭。
- **游离状态**:对象曾是持久化的,但Session已被关闭,对象与数据库的连接断开。
### 延迟初始化(LazyInitialization)
Hibernate支持懒加载,即关联对象在需要时才加载,而不是在初始加载实体时就加载所有关联数据,有助于减少内存消耗和提高性能。
### 锁定机制
- **悲观锁定**:在查询时就获取锁,确保其他事务不能修改数据,直到事务结束释放锁。
- **乐观锁定**:在更新数据时检查是否发生并发冲突,若有则抛出异常。
### 工具
- **SchemaExportTask**:从映射文件自动生成数据库表结构。
- **Hbm2JavaTask**:根据映射文件生成对应的Java实体类。
通过学习这些知识点,开发者可以高效地利用Hibernate开发数据库驱动的应用程序,提高开发效率并减少数据库相关的错误。