乐趣区

关于后端:hibernate简介

第一章 hibernate 简介


@TOC


原文链接
https://zhhll.icu/2020/ 框架 /hibernate/ 根底 /1.hibernate 简介 /

hibernate 简介

ORM

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

思维:将关系数据库中表中的记录映射为对象,以对象的模式展示,能够把对数据库的操作转化为对对象的操作。

采纳元数据来形容对象 - 关系映射细节,元数据通常采纳 XML 格局,寄存在专门的对象 - 关系映射文件中。

hibernate

hibernate 是一个老牌的 ORM 框架,通过 hbm.xml 映射文件维护 Java 和数据库表之间的关系,还能够屏蔽不同数据库产品的 SQL 语句的差别。

  • 提供 Criteria 条件查问,齐全不须要思考数据库底层如何实现、SQL 如何编写
  • 还提供了 HQL 语言,hibernate 会依据理论配置的数据库方言,将 HQL 语句生成对应的 SQL 语句。

应用这两种形式都能够帮忙下层程序屏蔽掉底层数据库的差别,加强程序的可移植性。

然而数据库构造比较复杂时,hibernate 生成的 SQL 语句会比较复杂,而且会让生成的 SQL 语句应用正确的索引也比拟艰难,会导致呈现大量慢查问的状况。(Mybatis 半自动化的映射形式能够解决性能问题)

hibernate 外围接口

Configuration 接口

用于配置 hibernate,通过 configuration 实例来取得对象 - 关系映射文件中的元数据,以及动静配置 hibernate 属性,创立 SessionFactory 实例

// 对应的 hibernate 根本配置信息和对象关系映射信息
Configuration configuration = new Configuration();
// 找的 hibernate.cfg.xml 配置文件
configuration.configure();

SessionFactory 接口

Configuration 的作用就是用来结构一个 SessionFactory,一个 SessionFactory 实例对应一个数据存储源,利用从 SessionFactory 中取得 Session 实例

// 4.0 之前不须要应用 serviceRegistry  间接构建 sessionFactory  configuration.buildSessionFactory()
// 4.0 之后创立 serviceRegistry, 所有的配置和服务都要在该对象中注册才能够失效
// 4.3 之前应用该形式 new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

SessionFactory 的特点

  • 线程平安,同一个实例能够被利用的多个线程共享
  • 重量级,不能随便的创立和销毁, 如果利用只拜访一个数据库,只须要创立一个 SessionFactory 实例,多个数据库的话,须要为每个数据库创立一个独自的 SessionFactory 实例
  • 须要很大的缓存来寄存预约义的 SQL 语句及映射元数据等。用户能够为 SessionFactory 配置一个缓存插件,称为二级缓存,用来寄存读取过的数据,

Session 接口

Session 被称为长久化管理器,它提供了和长久化相干的操作,如保留、更新、删除、加载和查问对象,是 hibernate 运作的核心,所有长久化对象必须在 session 治理下才能够进行长久化操作。生命周期很短,相当于 JDBC 的 connection,对 connection 进行了包装。

Session 的特点:

  • 不是线程平安的,应防止多个线程共享同一个 Session 实例
  • Session 是轻量级的,创立和销毁不须要耗费太多资源

Session 有一个缓存,是 Hibernate 的一级缓存,寄存被当前工作单元加载的对象。每个 Session 实例都有本人的缓存,这个 Session 实例的缓存只能被当前工作单元拜访

Transaction 接口

Transaction 接口是 Hibernate 的数据库事务接口,对底层的事务接口做了封装

Query 和 Criteria 接口

这两个接口是 Hibernate 的查问接口。Query 实例包装了一个 HQL 查问语句,Criteria 接口齐全封装了基于字符串模式的查问语句,善于执行动静查问

事件处理接口

当程序通过 Hibernate 来加载、保留、更新或删除对象时,会触发 Hibernate 的拦截器及事件监听器做出相应的解决:

  • 事件及事件监听接口:在 Hibernate 中,针对每种事件都有相应的事件监听器,如加载对象会触发 org.hibernate.event.LoadEvent 事件,该事件由 org.hibernate.event.LoadEventListener 监听器解决。保留对象触发 org.hibernate.event.SaveEvent 事件,该事件由 org.hibernate.event.SaveEventListener 监听器解决
  • 拦截器:实现 org.hibernate.Interceptor 接口,Interceptor 实现类负责响应长久化类的实例被加载、保留、更新或删除的事件

Hibernate 可扩大接口

  • 定制主键的生成策略:IdentifierGenerator 接口
  • 定制本地 SQL 方言:Dialect 抽象类
  • 定制缓存机制:Cache 和 CacheProvicer 接口
  • 定制 JDBC 连贯治理:ConnectionProvder 接口
  • 定制事务管理:TransactionFactory、Transaction 和 TransactionManagerLookup 接口
  • 定制属性拜访策略:PropertyAccessor 接口
  • 创立代理:ProxyFactory 接口
  • 定制客户化映射类型:UserType 和 CompositeUserType 接口

本文由 mdnice 多平台公布

退出移动版