hibernate
1.配置文件
核心配置文件 hibernate.cfg.xml
1.四本一言
jdbc驱动
数据库的url
数据库密码
数据库用户名
hibernate方言:hibernate可以将对实体的操作转换为当前正使用的数据库的sql语句.
2.是否打印sql语句
3.实体映射文件的配置
mapping
4.二级缓存和查询缓存的配置
5.是否根据实体创建表
create
重新运行就重新建表
update
create-drop
每次运行创建,运行关闭表就删除
validate
根据是也和现在已存的表进行对照
6.事务的的隔离级别
串行化 serializable 8
可重复读 repeatable-read 4
可读提交 read committed 2
可读未提交 read unCommitted 1
7.数据库连接池的配置
注意:配置文件的顺序不同,可能产生不同的结果 (在大标签中看配置顺序)
实体映射文件(类名.hbm.xml)
1.实体对应的表 <class>
name:实体类(包名+类名)
table:对应的表名
2.主键的配置<id>
name:变量名
column:表中字段名
type:指定字段类型
3.主键策略:<generator>
native:根据所使用的数据库,生成不同的主键约束,例如mysql就是自增
increment:自动增长
assigned:实体对象自己指定主键
identity:自增
sequence:序列
Uuid:随机字符串作为主键
4.乐观锁的配置:<version>
5.普通属性的配置:<property>
6.复合属性配置:<component>:当前实体类中某一个属性是另一个实体类,我们需要将该属性实体中的成员变量作为当前实体的字段
7.复合主键:<composite>
8.配置常见的SQL语句:<sql-*>
2.hibernate5个核心接口
1.Configuration 加载配置文件,创建sessionFactory对象
2.SessionFactory
1.创建session
2.在内置缓存中缓存了cfg,hbm等配置文件
3.外置缓存:二级缓存
4.会话工厂对象中缓存了hibernate运行的大部分资源所以在使用hibernate期间不要轻易的关闭会话工厂,因为每次加载太耗资源,当项目关闭时,在关闭会话工厂对象清空资源
5.创建session
1.openSession每次open都是新的session
2.getCurrentSession,将session和线程绑定(一般使用单线程).需要在cfg.xml文件中将session和线程绑定
3.Session
1.一级缓存
2.增删改查
save(对象) 持久化状态下的对象被save会怎么样?
delete(对象) 被删除的对象不存在会怎么样?
update(对象) 被更新的对象不存在?
get/load 只能根据主键获取某个实体. 如果查询的实体不再数据库中,get返回null ,load报异常.
sql:可以进行查询,插入,删除,更新是否能用hql?
criteria进行查询?
merge的使用?
saveOrUpdate
4.Transaction
1.事务
2.hibernate的操作需要在事务中进行
开启事务.提交/回滚
5.Query
执行查询操作
获取查询的结果集
list
iterate
uniqueResult
3.对象的三种状态
1.临时状态(瞬时状态) 缓存中没有该对象,数据库中也没有该对象
2.持久化状态:缓存中有该对象.数据库中也有该对象
3.游离状态:缓存中没有该对象,数据库中有该对象
三种状态之间的转换
new, delete 之后临时状态
get/load save update 进入持久化状态
持久化状态时执行 close clear .evict.进入游离
4.单元测试:
1.对某些小功能进行单独测试
5.hibernate缓存机制
1.一级缓存
必须使用 session缓存
1.缓存时间短,存在的有效周期为session close或者clear之后缓存就清理掉了
2.缓存范围小,只能在session中使用
3.如果某份数据经常需要更新,最好使用session的缓存
2.二级缓存
可以通过配置来进行使用,缓存数据是存储在sessionFactory中.一般存储的数据为对数据安全要求低,不经常更新的数据.
3.查询缓存
只存储查询数据的id,要使用其他字段的值,还需要根据id再次进行查询,一般配合二级缓存使用.
6.多表的关系映射
1.一对多
在一的实体类中需要加一个集合类型的属性(用来表示和多方的关系),最常使用的是Set; 集合类型必须是接口类型;在hbm的配置文件中 lazy (懒加载:查询当前一实体时,如果不使用集合就不会查询多实体) inverse:是否维护双方的关系;一般一方不维护
2.多对一
实体中增加一个一方类型的属性.在配置文件中<many-to-one> 不能指定(不能设置inverse属性)是否维护关系(必须维护双方关系)
3.一对一
主键关联
唯一(unique)外键关联
4.多对多
实体中双方都加入集合属性,元素类型都为对方,配置文件中<many-to-many>
多一张中间表,一般中间表有两个字段,其中一个是A表的主键,另一个是B表的主键,这两个字段分别是AB表的外键,这两个字段默认为复合主键.
A表示一个实体,B表也是一个实体,中间表也是一个实体没然后A和中间表建立一对一的关系,B也和中间表建立一对对的关系,对中间表的可控性增强.
7.事务的隔离级别
如果事务未隔离可能会导致:
1.第一类数据丢失
2.第二类数据丢失
3.脏读
4.幻读(虚读)
5.不可重复读
事务的特性:
1.原子性
2.一致性
3.隔离性
4.持久性
事务的隔离级别
serializable 串行化:所有的问题都是事务的并发造成的,串行化是事务不能并发,必须一个执行完了才能执行下一个事务,安全效率低,一般不推荐使用
repeatable- read 可重复读:可防止脏读,不可重复读的发生
read - committed 可读提交:可防止脏读的发生;
read-uncommitted 可读不可提交:可防止第一类更新丢失
事务的隔离级别越高并发性能越差. 1 . 2 . 4 .8
解决事务的并发
悲观锁
乐观锁 version
hibernate简单整理
最新推荐文章于 2024-08-12 17:02:49 发布