第一章 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多平台公布