Hibernate 框架体系
ORM对象关系映射
实践步骤
1、先创建log4j.properties日志的处理以及消息处理
2、再创建hibernate.cfg.xml,并将注册JDBC相关连接
3、创建一个javabean对象,指定相应的属性值,并创建一个有参与无参的构造方法
4、完成javabean对象的注册,创建一个user.hbm.xml
5、再次到hibernate.cfg.xml里注册
6、再次完成自动创建表
7、创建一个类完成数据的增删改
备注:拷相应的驱动包
hibernate核心接口
1、Configuration接口:用于hibernate配置,在hibernate启动过程中,Configuration接口实现类首先定位映射文档的相应配置
2、SessionFactory接口:用来产生session对象,一个SessionFactory对象代表一个数据库,在内存中能被共享,用它来得到不同的session对象
3、Session接口:提供了对数据库持久对象进行操作的方法
4、Transaction接口:在hibernate轻量级框架中,不依赖容器
5、Query和Criteria接口:Query方便对数据库及持久对象进行查询;Criteria与前者类似,它允许创建并执行面向对象的标准化查询
hibernate体系
特点
1、一种开发源代码对象/关系映射框架数据库的OR映射事务管理
2、生命周期不依赖容器(J2EE容器)
优点
1、只需要操作对象即可完成数据的增删改查等操作
2、面向对象将对象数据保存在数据中将数据库读入到对象镇南关
3、轻量级、无侵入、移植性好
4、拥有事务管理
缺点
容易造成性能问题,不适合用于批量操作
应用范围
针对每个对象简单查询出来,对其进行编辑、修改;而不适用于很多对象进行批量操作
不适用范围
1、批量操作
2、数据库特定映射
3、表与表之间复杂关系
三种状态
1、瞬时状态:当实例化一个持久化对象后,该对象处于瞬时状态;eg:UserBean bean = new UserBean("moth","123","www.mothsky.com");
2、持久状态:数据库中有相关记录,而且保证对象与记录是一致的;eg:session.save(bean)
3、游离状态:当hibernate中session关闭后,数据库有相关记录,但该对象不受session管理
主键生成策略
1、icrement:只有在没有其他进程往同一个表中插入数据时才能使用,由hibernate控制数据库中相应字段设置自动增长,不能集群
2、identity:支持标识字段的数据库MySQL、DB2,兼容性较高
3、sequence:对于内部支持序列的数据库
4、hilo:使用一个高/低位算法的生成int、long、short 类型的标识符
5、uuid:用一个128-bit的UUID算法生成字符串类型的标示符,UUID被编码为一个32位16进制数字的字符串
6、native:自动根据低层数据库的能力选择identity、sequence或者hilo中的一个
7、assigned:让应用程序在保存前为对象分配一个标示符,这是<generator>元素没有时默认生成
8、select:通过触发器选择一些唯一主键的行并返回主键值来分配一个主键
9、foreign:使用另外一个相关联对象的标示符
hibernate查询
1、OID查询
session接口
get与load的区别
get:
得到实体bean对象,立即加载,当主键对应的记录不存在时,返回null
load:
得到实体bean对象(由cglib产生的代理子类 )延迟加载(懒加载,只有使用该对象或该对象属性时,才会真正发出SQL)
一般用于二级缓存,减少性能的消耗
实例:
UserBean bean = (UserBean)session.get(UserBean.class,new Integet(1))
UserBean bean = (UserBean)session.load(UserBean.class,new Integet(1))
2、HQL查询
概述:是一种面向对象的查询语言(广泛使用)
eg: from 对象
注:HQL语句本身大小写无关,但是其中出现的的类名和属性名必须注意大小写区分
动态绑定参数
eg: Query query = session.createQuery("from UserBean");
query.setString("name","tiger") 类似还有setFirstReslut,setMaxReslut等
List list = query.list()
HQL查询步骤
1、通过Session的CreateQuery()方法创建一个Query对象
2、动态绑定参数
3、调用Query对象的list()方法执行查询语句
3、迭代iterator与list
iterator:
优点:二级缓存,如果缓存区存在,可直接查询数据
缺点:发出n+1条SQL语句(先查出所有ID,再根据每一个id来一句一句查询SQL语句)
list
优点:只查询一条SQL语句
4、比较运算
Criteria c = session.createrCriteria(UserBean.class)
c.add(Expression.gt("name","moth")) 注:gt::大于 ; lt:小于
范围运算符
in,not in,betwwen and, not between and
5、聚合函数与分组查询
count:统计
min和max:最小与最大值
sum:总和
avg:平均数
hibernate关系映射
hibernate对象识别
1、采用OID(Object Identifier)对象标识符
2、OID是关系数据库中的主键在java对象模型中的表现(对象与对象的对应关系)
集合映射
1、set映射
为了避免重复记录采用hashset集合
2、list映射
list允许重复记录
该映射集合返回的是一个Object数组(下标字段)
关联关系映射
1、一对一(主键关联)
a、两个表中的主键是一一对应,一个表的主键参照另一个表的主键的建立,一个表中的主键同时又是另一个表的外键
b、让两个表的id相同,数据不需额外添加字段
2、一对一(唯一外键关联)
a、主表一方有从表一方的外键
b、是多对一关联映射的特例
hibernate关系映射第二讲(多对多)
多对一关联
概述:在类与类的关联中,eg: 订单与客户,多个订单属于一个客户
配置:<many-to-one name="UserBean" column="user_id">
注:a、column属性指定的是订单表的外键user_id
级联
1、在级联下,只删除主表内容,不删从表相关信息
a、ClassBean classBean = (ClassBean)session.get(ClassBean.class,1)
b、classBean.setStudent().clear() 清空主表中的集合
c、sessio.delete() 删除主表中的记录
2、何时使用级联
在多对一关系中,多方可能会有多条记录对应一方的一条记录,所以在添加、删除、更新多方操作,不需要级联操作
注:在删除主表时,先清除主从关系,在删除主表
inverse与cascade区别
inverse
1、表与表之间的外键由谁来维护
2、当inverse="true"时,由另一张表(对方)来维护,反之则为本身来维护
3、优化:插入数据时,不发出修改的SQL语句,提高了性能
cascade
1、cascade="all(级联所有的数据)/none(不采用级联)/delete(当删除时采用级联)//"
2、有数据库来维护
多对多关联
1、实例:顾客与服务员
2、多对多通常在数据库中则要使用中间表来维护多对多的关系
3、配置
步骤:
a、首先建顾客表、服务员表与中间表(桥梁关系)
b、创建顾客与服务员对象(互相设置对方对象彼此的Set集合)
c、配置顾客与服务员的xml
<set 配置>
<many-to-many class="……" column=“要提交中间表中对应的列名”>
Hibernate缓存
实质
1、充当数据库在内存中一个临时容器内存空间
2、避免了数据库调用性能的开销
3、相对内存操作而言,数据库调用时一个代价高昂的过程
4、位于数据库与数据库访问中间层
持久层缓存范围
1、事务缓存(一级缓存):
内部缓存由hibernate自动维护,随session创建而创建,销毁而销毁
2、应用级缓存(二级缓存):
由sessionFactroy 的生命周期控制
3、分布式缓存(集群):
JBossCache作为分布式缓存
查询缓存与一、二级缓存区别:
1、一、二级缓存只能缓存实体对象
2、查询缓存查询的是结果集,即可以缓存普通属性依赖于二级缓存
延迟加载:
先获取主表中主键的集合
eg:1、ClassBean bean = (ClassBean)session.get(ClassBean.class,1)
2、bean.getStudentBean().iterator()再次获得遍历集合
3、如果控制延迟加载:lazy="false"
悲乐观锁
悲观锁:
1、数据本身由SQL来实现,一般用于端事务操作
2、只有MySql支持
乐观锁:
1、针对版本的控制
2、配置:
数据库隔离级别
1、Read Uncommited 没有提交,就能读到
2、Read Commited:提交读,提交后才可更新数据
3、Repeatable:可重复读
4、serializable :可序列化读,事务只能一个接一个执行,不能并发执行
连接池与C3P0连接池的使用
连接池概念:为了释放资源,合理的分配与释放,可以有效提高连接的复用度,从而降低新连接的开销,同时加快用户访问速度
C3P0概念:
1、checkout == 从池中取得可用连接;checkoutconnection ==被使用连接;checkin==把链接放回池中;checkinconnetion==没有被使用的连接;pooledconnection管理连接
2、行为:生成一个connection,当池中connection没有达到最大数,当有请求出现,将会产生connection;生成一个pooledconneticon
iBATIS应用
特点
1、ibatis是一种持久层框架,也属于ORM映射
2、相比hibernate为全自动化,配置文件书写之后不需要书写sql语句,但缺乏灵活性
3、半自动化,需要自己写SQL语句,需要手动定义映射,但设计上灵活,并支持hibernate的一些特殊,比如:延迟、缓存等
4、对数据库来说hibernate性能较差,移植性不好,但可以编写灵活与高性能SQL语句
组成体系
1、核心框架
SQL Map
2、配置文件
sqlMapConfig.xml类似于hibernate.hmp.xml
3、多类配置文件
sqlMap.xml 相当于hibernate中的映射文件
hibernate 框架体系
最新推荐文章于 2022-09-05 23:43:30 发布