hibernate 是开放源代码的对象关系映射框架,对JDBC进行轻量级的封装,在任何可以使用jdbc的场合,java客户端程序,jsp、servlet的web应用程序中完成数据持久化的重任。
1、 什么是持久化?
把数据存储到可以永久保存的存储设备中,其主要任务是将内存中的对象存储到关系数据库中。
2、 持久化本质:数据转换:将程序数据在持久化状态转换为顺时状态。
3、java程序中,信息都是以对象的形式存在的,信息持久化将会以对象持久化这一形式来实现。
对象持久化:将封装在对象中的信息保存到硬盘,磁带等物理媒介上,信息在断电,程序中断的情况下还是存在的不会丢失,而且通过适当的方式可以还原为与源数据机构一样的数据。
4、持久化在软件分层中的哪一层。
随着软件发展,应用程序逐渐由单层体系分为多层,两层,三层体系结构。
在三层体系结构当中:表示层,业务逻辑层,数据库层。业务逻辑层既要处理业务逻辑又要对数据库进行操作(增删改查等),因此将对数据库操作分离成持久化层。
5、持久化层的实现--ORM
持久化层实现方案有多种,最流行,最好的实现方案为ORM,ORM不但封装了底层的数据库访问代码,提供持久化功能,还对SQL进行了封装,SQL是面向关系数据库不具备面向对象的特征,针对这一问题ORM提供了面向对象的查询寓言及相关查询接口(hibernate的HQL,query接口等),ORM可以运行在运行在容器中,使用容器提供的数据连接池及容器提供的事物管理机制等,也可以独自在无容器环境下运行使用自身默认的连接池,及事物管理机制等服务完成持久化功能。
6、hibernate整体结构及流程
如图所示,hibernate包含这几块东西,实体类,实体类映射文件,数据库配置文件,SessionFactory 和Session。
hibernate用来完成对象关系映射,其中对象指java对象,对象都是由类实例化而来这个类就是持久化类。
数据库配置文件:用来提供连接数据库信息,提供一个公用的Session工厂最后通过Session对象完成对数据库的增删改查操作。
实体映射文件对数据库表与实体类进行映射,类对应数据库哪张表。
创建实体类特征
1、符合JAVABEAN规范,属性,get,set方法并且首字母大写,不符合编译时出现异常。
2、boolean类型可以用get方法,可以用get前缀也可以is作为前缀。
3、java.io.Serializable接口可以实现也可以不实现,不实现编译器会报警,实现了这个接口,类就是可以被序列化的,序列化后在进行网络传输时会被用到,一个类被序列化一定格式在传到远端服务器或刻画段,远端收到后由反序列化还原成类,不实现这个接口类就传不了。
4、唯一标识持久化类的id属性,在面向对象语言中被称为OID
5、持久化类不需要继承任何hibernate的东西,提高了持久化类的独立性,若更改其他的ORM不需要修改持久化类。
6、持久化类必须提供一个不带参数的默认构造方法,这样hibernate可以运用java反射机制调用Constructor.Invoke()来实例化持久化类。若该类需要支持延迟检索这个构造方法需要时public的。
7、持久化类是普通的java类可以运行在任何java环境中。
7、映射文件
8、配置文件:连接数据库的一些信息,连接池的信息也配置在这里如c3p0
9、Session接口:数据库的访问操作接口,最常用接口。由configuration接口启动hibernate构建Session工厂,通过Session工厂创建Session对象来操作数据库,Session一般以trancation接口绑定,事物完成Session结束。
10、dao类封装数据库的相关操作。
11、hibernate核心接口
configuration:负责启动hibernate读取配置文件构建SessionFactory
SessionFactory:负责初始化hibernate,充当数据存储代理创建Session对象
Session:负责完成于数据库交流操作增删改查等。
transaction:与session绑定负责执行事务操作
query、cirteria:负责数据库查询。
12、session接口特点
1、数据库操作的主要接口
2、与httpSession无关
3、非线程安全不可以多个线程共享,生命周期以事务的开始结束为边界。
4、由SessionFactory负责创建,Session工厂是线程安全的,多个并发可以访问同一个SessionFactory获取Session。
5、session被称为hibernate第一缓存,存放的事被当前工作单元加载的对象。
13 Session 缓存作用
1、减少数据库访问,提高性能。
2、保证缓存中对象(持久化对象)与数据库同步。
3、持久化对象存在关联时,session保证不出现对象图死锁。
14 session创建与关闭
由Session工厂负责创建,调用getSession/openSession方法
不管事务是否执行都需要关闭,session.close()
15 session 使用方法
操作对象,管理缓存,管理连接,生成检索对象
获取对象,更新对象, 删除对象
强制刷新缓存 session.flush
管理连接:最大连接数,超时时间等
createQuery()
16 更新同步数据库
当对session进行清理时,进行数据库同步更新
清理缓存时间
1、调用commit方法
2、调用flush方法
3、查询时会清理缓存,保证查询结果能反映对象的最新状态。
4、使用native生成器,插入记录会立刻清理缓存。
17 HQL5种检索方式
1、导航对象图检索方式:根据已经加载的对象,导航到其他对象。
2、OID :根据OID加载对象。session的load()、get()方法。
3、HQL: 面向对象,支持多态查询。Hibernate Query Language session find()方法,简单查询,静态查询;Query接口,复杂查询,动态加载参数。关键字不区分大小写。
4、QBC Query By Criteria(包括QBE Query By Example): 面向对象,支持多态查询。
封装基于字符串的sql语句,或封装一个对象,此对象的某些属性的值已经确定。
5、本地查询: Native Query 使用本地数据库的SQL查询语句。