### Hibernate入门及基础知识点 #### 一、搭建第一个Hibernate项目 1. **创建Java项目**:首先在开发环境中创建一个新的Java项目。 2. **添加依赖库**:在项目的`lib`目录下添加以下JAR包: - `HIBERNATE_HOME/hibernate3.jar` - `HIBERNATE_HOME/lib/*.jar`(所有必需的支持库) - MySQL JDBC驱动 3. **创建Hibernate配置文件**:创建`hibernate.cfg.xml`文件,并在其中设置连接数据库的相关信息(如数据库URL、用户名、密码等),同时为了便于调试,还可以加入log4j配置文件。 4. **定义实体类**:根据数据库表结构设计Java实体类,每个实体类代表数据库中的一个表。 5. **定义映射文件**:为实体类创建`.hbm.xml`映射文件,用于描述实体类和数据库表之间的映射关系。例如,为`User`类创建`User.hbm.xml`。 6. **配置映射文件**:在`hibernate.cfg.xml`文件中加入实体类的映射文件路径,以便Hibernate能够识别并加载这些映射文件。 7. **开发工具类**:编写`hbm2ddl`工具类,用于根据实体类自动创建数据库表。 8. **开发客户端程序**:编写应用程序代码,调用Hibernate提供的API完成对数据库的操作。 #### 二、Hibernate基本概念 - **Hibernate CRUD操作**:Hibernate提供了增删改查(CRUD)操作的API,简化了Java应用程序与数据库交互的过程。 - **get与load的区别**: - `get`方法不支持延迟加载(Lazy Loading),如果指定ID的数据不存在,则返回`null`。 - `load`方法支持延迟加载,如果指定ID的数据不存在,则抛出异常。 - **对象状态**: - **Transient(瞬时状态)**:对象不在Session的管理范围内,没有与之匹配的数据库记录。 - **Persistent(持久化状态)**:对象被纳入Session的管理范围,数据库中有与之匹配的数据。 - **Detached(脱管状态)**:对象曾经被纳入Session管理但之后从Session中移除,此时仍然有与之匹配的数据库记录。 #### 三、实体类设计原则 - 实体类应实现一个无参构造方法。 - 提供标识属性(通常为主键),以便于唯一标识每一个实例。 - 使用非`final`类,便于扩展和继承。 - 为持久化字段声明访问器(getter/setter)。 #### 四、主键生成策略 - **UUID**:使用通用唯一标识符作为主键。 - **Native**:根据底层数据库系统默认的机制生成主键。 - **Assigned**:由应用程序显式地分配主键值。 #### 五、Session Flush测试 - **Session.flush()方法**:主要用于清理缓存并执行SQL语句。 - **自动Flush时机**:默认情况下,在事务提交时执行flush操作。 - **手动Flush**:可以通过显示调用`session.flush()`来触发。 - **查询前Flush**:在使用迭代器(iterate)进行查询之前,也会触发flush操作。 #### 六、Hibernate查询语言(HQL) - **HQL**:Hibernate Query Language,是一种面向对象的查询语言,用于在Hibernate中执行查询。 - **查询特性**: - 关键字不区分大小写,但属性和类名区分大小写。 - 支持简单的属性查询、实体对象查询以及条件查询。 - 可以使用HQL动态实例化对象。 - 支持直接使用SQL进行查询。 - 外置命名查询:可以在映射文件中定义命名查询,然后在代码中通过名称调用。 #### 七、单元测试与生命周期测试 - **JUnit简介**: - JUnit是一个常用的单元测试框架。 - 测试类需要继承`TestCase`。 - 测试方法必须以`test`开头,且不接受参数也不返回任何值。 - 单元测试代码建议单独存放于特定的目录中。 #### 八、总结 通过以上步骤和概念的介绍,我们可以看出,Hibernate不仅提供了一种简洁高效的方式来处理Java应用程序与数据库之间的交互,还提供了丰富的功能支持,如懒加载、主键生成策略、查询语言等。掌握这些基础知识,对于使用Hibernate开发项目至关重要。
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助