Hibernate

/*****
Hibernate关联映射有7种2类:
单向关联:只需单向访问关联端(4种)
单向 一对一关联
单向 一对多关联
单向 多对一关联
单向 多对多关联 必须使用连接表
双向关联:关联的两端可以互相访问(3种)
双向 一对一关联 一边使用one-to-one
双向 一对多关联
双向 多对多关联

注解:
@Entity 持久类
@Table(name = “promotion_info”) 用于填写持久性映射的表
@Id 主键标识
@GeneratedValue 定义自动增长的主键的生产策略
@OneToOne 可以建立实体Bean之间的一对一的关联
@OneToMany 一对多
@ManyToOne 多对一
@ManyToMany 多对多

级联特性:
当程序种有两个关联实体时。程序需要主动保存,删除或重新关联每个持久化实体,如果需要处理许多彼此关联的实体,则需要依次保存每个实体,这种操作是比较繁琐的,使用级联可以简化这种操作。
将从表记录映射成持久化类的组件(集合属性的集合元素是组件)
将从表记录也映射成的持久化实体(关联关系)

/*******
HQL(Hibernate Query Language)查询语言是完全面向对象的。SQL的操作对象是数据表,列,和记录,而HQL的操作对象是类,实例和属性
from后跟持久化类的类名,区分大小写
select用于选择持久化类的实例或持久化类指定的属性;
where用于筛选选中的结果,缩小选择范围;

条件查询:放在where子句中,把查询条件封装为一个Criteria对象

使用原生SQL查询的场景:
1,用于将旧的项目(基于JDBC应用)移植到Hibernate应用上;
2,用于HQL无法支持的某些数据库的特性上
注意:对于一个新的Hibernate应用,建议不要直接使用SQL查询,多用HQL。

通过SQLQuery接口来表示。SQLQuery接口是Query接口的子接口,因此完全可以调用Query接口的方法

Hibernate缓存机制:
一个是Session级别的一级缓存;(默认开启)
用于保存持久化实体,修改持久化实体时,Session并不会立即把这种改变flush到数据库,而是缓存在当前Session的一级缓存中,除非程序员调用flush方法,或程序关闭Session时才会把这些改变一次性地flush到底层数据库,通过Session缓存机制可以减少与数据库的交互,从而提高数据库访问性能,
一个是SessionFactory级别的二级缓存(默认关闭)-全局性的应用的所有Session都共享这个二级缓存。当程序开放此缓存后,当Session需要获取数据时。Session将会优先从二级缓存获取
<! --Session二级缓存–>
</property name = “hibernate.cache.use_second_level_cache”>true
</ property>

Hibernate悲观锁,乐观锁机制
数据库并发性:指多个事务可以同时访问数据库中的数据。而当多个事务在数据库中并发执行时,数据的一致性可能受到破坏,从而导致数据出现问题。
悲观锁:即某事务在更新数据过程中将数据锁定,其他任何事务都不能读取或修改,必须修改完成后才能访问数据(类似java的线程同步)
特点:具有排他性,通常依赖于数据库机制;
适用于短事务处理;数据绝对安全,性能低;
如果需要使用悲观锁,通常采用数据库的for update语句,Hibernate使用load()方法设置悲观锁。
注意:如果使用悲观锁,那么延时加载无效。
乐观锁:乐观锁并不是一种锁机制,而是一种冲突检测机制。
特点:并发性较好,事务修改数据时,其他事务仍可以修改数据。
使用:常用的时版本方式(即每个数据表中有一个版本字段version,某一个事务更新数据后版本号+1,另一个事务更新后再+1,当事务发现数据库当前版本号与读取数据时版本号不一致(等于或小于当前版本号))则不能更新数据库。
Hibernate使用乐观锁需要再映射文件中配置项才可生效,开启乐观锁属性:optimitic-lock=“version”
性能高,不是绝对安全;
版本号由hibernate维护

延时加载
延时加载时Hibernate通过代理Proxy机制来实现延时加载,Hibernate从数据库获取某一个对象数据时,获取某一个对象的集合属性值时,或获取某一个对象s所关联的另一个对象时,由于没有使用该对象的数据,Hibernate并不从数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都为默认值,只有在真正需要使用该对象的数据时才创建这个真正的对象,真正从数据库加载它的数据。
分类:对象的延时加载,对象里的属性延时加载,集合延时加载。
抓取策略:写一条join fetch把两个实体的数据一次性从数据库加载。这样可以在特定情况下(同时需要使用两个实体数据)减少SQL语句数量来提高查询效率
适合存放到二级缓存中的数据:
很少被修改的数据;不是很重要的数据,语序出现偶尔的并发数据;很多系统模块都要用到的数据;恭喜数据。

批量处理
在实际应用中,有时可能有需要一次性处理多条数据的需求,比如一个 Excel 表格中万条数据导入数据库中。这个使用如果使用普通的方式一条一条发给数据库来处理,会发现效率很低,速度很慢。所以就有必要来使用 JDBC 的批量处理功能。它的原理就是将要处理的批量SQL打包,然后一次性发给数据库处理,这样可以大大提升性能哈。
Hibernate的批处理功能底层就是封装了JDBC的批处理,使用起来很方便快捷,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值