Hibernate框架学习1

理解ORM原理

ORM(Object Relational Mapping) 是对象到关系的映射,是一种解决实体对象与关系型数据库相互匹配的技术。
其实现思想就是将数据库中的数据表映射为对象,对关系型数据库以对象的形式进行操作。
在软件开发中,对象和关系数据是业务实体中的两种表现形式,ORM在业务逻辑层与数据库之间映射的元数据,将自动持久化到关系型数据库中。实质上,ORM在业务逻辑层与数据库之间充当桥梁作用,它对对象(Object)到关系数据(Relational)进行映射(Mapping)
ORM主要解决了对象模型和关系模型的阻抗不匹配
ORM
在Hibernate框架中,ORM的设计思想得以具体实现。
Hibernate主要通过持久化类(.java)Hibernate映射文件(.hbm.xml)Hibernate配置文件(*.cfg.xml)与数据库进行交互。

  • 持久化类:是操作对象,用于描述数据表的结构。
  • 映射文件:指定持久化类与数据表之间的映射关系。
  • 配置文件:用于指定Hibernate的属性信息等,如数据库连接信息。

Hibernate的结构体系

Hibernate对ORM进行实现,是一个开放源代码的对象关系映射框架。
Hibernate在原有三层结构(MVC)基础上,从业务逻辑层中分离出持久化层,专门负责数据的持久化操作,使业务逻辑层可以真正地专注业务逻辑的开发,不再需要编写复杂的SQL语句。增加了持久化层的软件分层结构。


Hibernate常用接口:
1.Configuration接口:

Configuration接口用于加载Hibernate的配置文件及启动Hibernate,创建SessionFactory实例。在Hibernate的启动过程中,Configuration对象先加载Hibernate的配置文件对其进行读取,然后根据配置创建SessionFactory属于即用即丢型对象。所以最佳的生命周期为方法内部,包括如下内容:

  • ibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类、数据库Dialect、数据库连接池等
  • 持久化类与数据表的映射关系(*.hbm.xml文件)
public class HibernateSessionFactory {
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private  static Configuration configuration = new Configuration();    
    public static Configuration getConfiguration() {
        return configuration;
    }
}
2.SessionFactory接口:

SessionFacory接口用于对Hibernate进行初始化操作。它是一个Session工厂。Session对象从此接口获取,通常一个项目只有一个SessionFatory对象,因为它对应一个数据库;如果项目中存在多个数据库,则可以存在多个SessionFactory对象。但要注意SessionFactory是一个重量级的对象。最佳声明周期为应用范围,最佳的编程实践可以采用单例模式。
SessionFactory是线程安全的,是生成Session的工厂:

Session session = sf.openSession();
Session session=sf.getCurrentSession();
3.Session接口:

Session接口是操作数据库的核心对象,它负责管理所有与持久化相关的操作,也称为CRUD操作。使用此 对象时应该注意,Session对象与SessionFactory对象不同。是线程不安全的轻量级对象,使用ThreadLocal变量解决,最佳生命周期为request或者方法体内。是Connection对象的浅封装,必须使用try/finally结构保证及时关闭

Session 类的方法:

取得持久化对象的方法: get()和load()的区别?

  • load默认采用的延迟加载机制,当调用load方法时,先在缓存中查找,如果找到了则立即返回如果没有则立即返回一个代理对象,如果访问代理对象中的非键属性时才执行查找操作(要求session不能关闭,否则org.hibernate.LazyInitializationException:)。
  • get方法默认采用的是立即加载机制,当调用get方法时,首先在缓存中查找则立即返回;如果没有找到对应的数据则立即执行数据库查询获取数据。
4.Transaction接口:

用于封装底层的事务实现。代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作(可以使hibernate针对底层操作进行优化处理)。
线程不安全的轻量级对象,最佳生命周期为方法体内,可以使用ThreadLocal进行管理(这里是为了编码方便实际上session和Transaction是绑定的)。

5.Query接口:

Query接口主要用于对数据库的查询操作,功能十分强大,其单检索、分页查询等诸多方法为程序开发提供了方便,其中,面向对象查询语言HQL通过此接口进行实现。

6.Criteria接口:

Criteria接口同样是用于对数据库的查询操作,它为Hibernate的另一种查询方式QBC提供了方法。


Hibernate的实例状态

Transient(瞬时)

如果一个实体对象通过new关键字进行创建,并没有纳入Hibernate Session的管理之中,就被认定为瞬时状态。如果Transient(瞬时)对象在程序中没有被引用,则将被垃圾回收器回收。其特征在于数据库中没有与之匹配的数据,也没有在Hibernate缓存管理之内。

Persistent(持久)

处于持久状态的对象在数据库中有与之匹配的数据,在Hibernate缓存的管理之内。当持久对象有任何改动时,Hibernate在更新缓存时将对其进行更新;如果 Persistent持久 状态变成了 Transient,Hibernate同样会自动对其进行删除操作,不需要手动检查数据。

Detached(脱管)

Persistent 持久对象 在Session关闭后将变为 Detaches 脱管状态。其特征在于数据库中存在与之匹配的数据,但并没有在Session的管理之内。
这里写图片描述


Hibernate的优缺点

优点:
  • 商业级别的商业级支持的开源产品。 Hibernate是JBos公司推出的开源项目,因此使用 Hibernate不必担心它会停止开发或不能得到技术支持。由于它是开源的,用户可以自定义对其进行扩展。
  • 良好的移植性。 Hibernate框架是轻量级的框架,对实体对象实现了透明持久化。当持久层框架发生改变时,如不再使用 Hibernate框架,而使用其他框架,那么不需要更改业务逻辑。也就是说它是低侵入性的框架。
  • 提高开发效率。 Hibernate封装了数据库的访问细节,程序员不必编写繁琐的SQL语句,可以专注于业务逻辑,同时通过面向对象的编程思想去操作数据库,因此使用 Hibernate可以提高开发效率。
  • 跨数据库平台。 Hibernate自身支持多种常用数据库,如 MYSQL、 Oracle、 SQL Server等。使用Hibernate不必担心底层数据库的类型,当更换底层数据库时,只需更改 Hibernate的配置文件即可,而不需要更改程序的代码。
缺点:

Hibernate有过度封装的嫌疑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值