hibernate学习笔记
需积分: 0 36 浏览量
更新于2013-03-14
收藏 301KB DOCX 举报
Hibernate 是一个开源的对象关系映射框架,它允许开发者将Java对象和关系数据库的数据进行映射,从而简化数据库操作。在本篇文章中,我们将深入探讨 Hibernate 的核心概念和使用方法。
创建 Hibernate 项目的步骤包括新建 Java 项目,然后设置 User Library 并加入必要的 JAR 包,例如 Hibernate 的主库 hibernate3.jar 和所有相关的 lib/*.jar,以及 MySQL JDBC 驱动。接下来,我们需要创建 hibernate.cfg.xml 配置文件,这是 Hibernate 连接数据库和进行其他配置的主要文件。同时,为了便于调试,通常会包含 log4j 的配置。
在定义实体类时,每个 Java 类代表数据库中的一个表,类的属性与表的字段相对应。例如,我们可以定义一个 User 类,并为其创建对应的映射文件 User.hbm.xml,这样 Hibernate 就知道如何将 User 类实例转换为数据库中的记录。在 User.hbm.xml 文件中,我们通过 <class>, <property> 等标签指定类与表的映射规则。
为了将实体类自动映射到数据库表,可以编写一个工具类,如 ExportDB,它使用 SchemaExport 类读取配置文件并生成数据库表。通过 Configuration 和 SchemaExport 类,我们能够根据实体类创建数据库表结构。
在实际操作数据库时,我们需要经历以下步骤:
1. 读取配置文件,创建 Configuration 对象。
2. 使用 Configuration 创建 SessionFactory。
3. 打开 Session。
4. 开启事务。
5. 使用 Session 进行数据操作,如 save() 方法用于保存实体对象。
6. 提交事务。
在 Hibernate 中,对象有三种状态:瞬时对象(Transient Object)、持久对象(Persist Object)和离线对象(Detached Object)。瞬时对象未被 Session 管理,且在数据库中无对应记录。持久对象在数据库中有记录,并由 Session 管理。离线对象则是已存在数据库记录,但不再受 Session 管理。
测试实体对象的生命周期通常使用 JUnit,创建测试类并编写以 test 开头的方法。了解 CRUD(Create, Read, Update, Delete)操作是数据库操作的基础。get 和 load 方法的区别在于对懒加载(lazy loading)的支持,get 直接加载数据,而 load 支持延迟加载。如果 get 无法找到数据,则返回 null;load 则会抛出异常。
transient 状态的特征是数据库中没有对应记录,且对象未纳入 Session 管理。persistent 状态的对象有数据库记录,被 Session 管理,并在清理缓存时与数据库同步。detached 状态的对象也有数据库记录,但未被 Session 管理。
实体类映射到数据库表时,通常使用 <class> 和 <property> 标签。如果实体类或属性与 SQL 关键字冲突,可以使用 table 或 column 属性重命名。设计实体类时,应提供无参构造函数、标识属性,并为持久化字段声明访问器。主键生成策略有多种,如 uuid、native 和 assigned。
在多对一映射示例中,User 类有一个名为 group 的属性,表示用户所属的组,这在数据库中可能对应一个 Group 表。这种映射关系允许我们在 User 类中直接访问 Group 对象,简化了数据操作。
通过以上内容,我们对 Hibernate 的基本使用和核心概念有了深入了解,包括配置、对象状态管理、对象关系映射以及数据操作等。在实际开发中,熟练掌握这些知识能有效提高数据库操作的效率和代码的可维护性。