勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

Hibernate的HelloWorld项目

什么是Hibernate

一个 Java 领域的持久化ORM框架

Hibernate是连接java应用程序与关系数据库的中间件。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

 

对象的持久化

狭义的理解,“持久化”仅仅指把对象永久保存到数据库中。

广义的理解,“持久化”包括和数据库相关的各种操作:

  • 保存:把对象永久保存到数据库中。
  • 更新:更新数据库中对象(记录)的状态。
  • 删除:从数据库中删除一个对象。
  • 查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。
  • 加载:根据特定的OID(注),把一个对象从数据库加载到内存中。(为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识-Object identifier-OID)

ORM(Object/Relation Mapping): 对象/关系映射

  • –ORM 主要解决对象-关系的映射
  • ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。
  • ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中.

ORM原理图:

 

HolleHibernate

本文所涉及的源码见https://github.com/llanc/SSH_Learn/tree/master/Hibernate_01_HolleWord

准备

  • 所需jar包(可从项目源码中获取)
  • 开发步骤

 

步骤实践

创建持久化 Java 类

  • 提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类
    提供一个标识属性(identifier property): 通常映射为数据库表的主键字段. 如果没有该属性,一些功能将不起作用,如:Session.saveOrUpdate()
  • 为类的持久化类字段声明访问方法(get/set):Hibernate对JavaBeans 风格的属性实行持久化。
  • 使用非 final 类:在运行时生成代理是 Hibernate 的一个重要的功能. 如果持久化类没有实现任何接口, Hibnernate 使用 CGLIB 生成代理. 如果使用的是 final 类, 则无法生成 CGLIB 代理.
  • 重写 eqauls 和 hashCode 方法: 如果需要把持久化类的实例放到 Set 中(当需要进行关联映射时), 则应该重写这两个方法。

注意:Hibernate 不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染。所以Hibernate被称为低侵入式设计框架。

创建对象-关系映射文件

  • Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句
  • 映射文件的扩展名为 .hbm.xml
  • Student.xml解析

创建 Hibernate 配置文件

Hibernate 从其配置文件中读取和数据库连接的有关信息, 这个文件应该位于应用的 classpath 下.

hibernate.cfg.xml文件示例:

 

使用 Hibernate 进行数据持久化操作

  1. 获取 Configuration 对象
  2. 获取 SessionFactory 对象
  3. 获取 Session,打开事务
  4. 用面向对象的方式操作数据库
  5. 关闭事务,关闭 Session

编写HbnUtils工具类以完成都1,2步骤的封装,减少操作:

编写Junit测试类进行测试:

所涉及到的类和接口

Configuration 类

Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:

  • Hibernate 运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
  • 持久化类与数据表的映射关系(*.hbm.xml 文件)

创建 Configuration 的两种方式:

  • 属性文件(hibernate.properties): Configuration cfg = new Configuration();
  • Xml文件(hibernate.cfg.xml): Configuration cfg = new Configuration().configure();   (最常用)
  • Configuration 的 configure 方法还支持带参数的访问:

File file = new File(“simpleit.xml”);

Configuration cfg = new Configuration().configure(file);

SessionFactory 接口

  • 针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。
  • SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息
  • SessionFactory是生成Session的工厂
  • 构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。

Session 接口

  • Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。
  • Session对象的生命周期很短。
  • Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。
  • 相当于 JDBC 中的 Connection。
  • 持久化类与 Session 关联起来后就具有了持久化的能力。
  • Session 类的方法:
    1. 取得持久化对象的方法: get() load()
    2. 持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()
    3. 开启事务: beginTransaction().
    4. 管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等

Transaction(事务)接口

  • 代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。
  • 常用方法:
    1. commit():提交相关联的session实例
    2. rollback():撤销事务操作
    3. wasCommitted():检查事务是否提交

 

 

赞(0)
未经允许不得转载:喋喋不休 » Hibernate的HelloWorld项目

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选