orm框架之hibernate的学习

一、流行的ORM框架

Hibernate:
Hibernate是一个基于jdbc的开源的持久化框架,是一个优秀的ORM实现。它很大程度的简化了dao层编码工作。hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
Ibatis:
相比 Hibernate 灵活高,运行速度快。开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语句,并且熟练使用sql语句优化功能。
TopLink

OJB

二、Hibernate的工作原理

获取Configuration对象
获取SessionFactory对象
获取Session,打开事务
用面向对象的方式操作数据库
关闭事务,关闭Session
用自己的开发经验来说就是,
第一步:
先编写好所需要的配置文件和类对应的配置文件后,启动服务器
第二步
服务器通过实例化Configuration对象,读取hibernate.cfg.xml中的内容,并根据其建立好表以及表与表之间的映射关系。
第三步
通过实例化Configuration对象就可以建立sessionFactory实例,进一步,通过sessionFactory实例可以建立session对象。
第四步
通过session打开事务,然后通过session来实现对数据库中的数据进行增删该查的操作
第五步

三、Hibernate API简介

3.1.Configuration

Configuration 类负责管理 Hibernate 的配置信息
包括如下内容:1,Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。2,持久化类与数据表的映射关系(*.hbm.xml 文件)。

  • 创建 Configuration 的两种方式
    1,属性文件(hibernate.properties)
    Configuration cfg = new Configuration();
    2,Xml文件(hibernate.cfg.xml)
    a)加载默认名称的配置文件(hibernate.cfg.xml)
    Configuration cfg = new Configuration().configure();
    b)或加载指定名称的配置文件:
    Configuration cfg = new Configuration()
    .configure(“myhibernate.cfg.xml”);
  • hibernate配置文件

hibernate.cfg.xml
这里写图片描述
3.2.SessionFactory
Configuration对象根据当前的配置信息生成 SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。 相关代码如下:
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();

1,SessionFactory是线程安全的。
2,SessionFactory是生成Session的工厂:
Session session = sessionFactory.openSession();
3,构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。
3.3.Session
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 中有一个缓存,显式执行flush()方法之前,所有的持久层操作的数据都缓存在 session 对象处。(相当于 JDBC 中的 Connection)

  • 持久化类与 Session 关联起来后就具有了持久化的能力。
  • Session是线程不安全的
  • Session 类的一些方法:

取得持久化对象的方法: get() load()
持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()
开启事务: beginTransaction().
管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等
3.4.Transaction
代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。

  • 代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。
    Transaction tx = session.beginTransaction();
  • 常用方法:

commit():提交相关联的session实例
rollback():撤销事务操作
wasCommitted():检查事务是否提交
3.5.Query和Criteria接口
都是查询接口,Query实例包装了HQL查询语句,hql是面向对象的,他引用类名及类的属性名,而不是表名和字段名。Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更面向对象,他擅长执行动态查询。
四、对象/关系数据库映射基础(一)
4.1持久化对象与OID
4.1.1对持久化对象的要求
1、提供一个无参构造函数。使得Hibernate可以使用Constructor.newInstance()来实例化持久化类。(这个我试了一下,是可以没有的);
2、提供一个标识属性。通常映射为数据库表的主键字段;
3、为类的持久化类的字段声明访问方法(get/set方法)。
4.1.2OID(对象标识符)
为了在系统中能够找到所需要的对象,需要为每个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识。

4.2、对象/关系数据库映射文件(hbm.xml)
Hibernate采用XML格式的文件来置顶对象和关系数据之间的映射。在运行的时候,Hibernate将根据这个映射文件来生成各种SQL语句。

待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值