今天的学习!!!

javabean=pojo

持久化:持久化是程序数据在瞬时状态和持久状态间转换的过程

持久化以后就是pc
PO=POJO+xml 配置 他是普通的java对象

直接用它来传递。传递过程中就是DTO(Data Transefer Object)
直接用来对应表示层就是VO

 

SessionFactory重量级的,一个线程中只能有一个,并且是线程安全的。session每个线程一份,线程非安全!
SessionFactory:线程安全,保存了当前数据库配置信息和所有映射关系以及预定义的SQL语句。在SessionFactory中内会了连接池。
1.OpenSesion() --从连接池中随意获取一个连接。
2.getCurrentSession() --将Session和Threadlocal绑定,确保再一次请求中,只有一个Session对象
通常一个应用只会初始化一个SessionFactory(代表一个连接池)

1.Get()load()的区别

   Load()没有使用对象的其他属性的时候,没有SQL  延迟加载

   Get() :没有使用对象的其他属性的时候,也生成了SQL  立即加载

 Load()get()都可以给缓存放入数据,和取出数据。

 

 如果两次get()同一个OID,那么第二次不再SQL,说明了一级缓存的

 

   存在性。一级缓存事务级别的事务

 

 

 

 

 

  是什么导致了延迟加载

 

  解析:是因为内存中构建了代理对象。

 

  stu.getClass()

 

 Handler:处理人

 

   延迟加载原因:代理对象

 

   一级缓存

 

05.Hibernate的优势

优秀的Java 持久化层解决方案  (DAO

主流的对象—关系映射工具产品

简化了JDBC 繁琐的编码

l 将数据库的连接信息都存放在配置文件

自己的ORM框架

一定要手动实现Hibernate(模拟Hibernate实现)


Hibernate中的是session,不是http协议中的session。当然他也不是connection,初学者可以看成是connection

Hibernate框架位于应用程序和数据库之间,将数据库底层操作完全封装。应用po对象进行Hibernate操作,完成对数据库的操作。常用值是key
和val

Hibernate核心配置
Configuration 配置文件加载工具
SessionFactory 连接池工厂
session 会话(相当于 Connection)
Transaction 事务(最复杂)
3.Session:代表连接,线程不安全。
对比ThreadLocal和synchronized同步机制
相同点:
 1、ThreadLocal和线程同步机制都能解决多线程中相同变量的访问冲突问题。
不同点:
1、适用的情况不同
 在同步机制中,使用同步保证同一时间只有一个线程访问,不能同时访问共享资源,否则就是出现错误。ThreadLocal则隔离了相关的资
源,并在同一个线程中可以共享这个资源。彼此独立,修改不会影响到对方。
2、最终实现的效果不同
对于多线程资源共享问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份
变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
4.Transaction 代表事务
commit(); 提交事务,rollback(); 回滚事务
如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务

数据库提供事务
解析:四个阶段ACID
隔离性(两个事务)
多并发问题
脏读 不可重复 幻想读 丢失更新问题 解决多线程并发:解决方式

事务隔离级别
Read-uncommited 读未提交

丢失更新问题:
乐观锁:svn 数据库保存版本号,程序更改版本号
悲观锁:
脏检查:当事务提交时,Hiberante会对Session中持久状态的对象进行检测,判断对象的数据是否发生了改变
依据:
为什么要进行脏检查?
解析:如果对象发生了改变,就需要将改变更新到数据库中,以确保内存中的对象与数据库中的数据保持一致。
如何脏检查?
  解析:当一个Dept对象被加入到Session缓存(有人又称为 一级缓存 后者是内部缓存)中时,Session会为Dept对象的值类型的属性复制一
份快照。当Session刷新缓存时,会先进行脏检查,即比较Dept对象的当前属性与它的快照,来判断Dept对象的属性是否发生了变化。如果发生了
变化,Session会根据脏对象的最新属性值来执行相关的SQL语句,将变化更新到数据库中。
Session具有一个缓存,可以管理和跟踪所有持久化对象,对象和数据库中的相关记录对应。
Session会在以下时间点刷新缓存
1)事务的commit()
2) session.flush()
S2 C# IO stream.flush();
一级缓存

更新数据的方法
update()方法
saveOrUpdate()方法
merge()方法

 

转载于:https://www.cnblogs.com/ruixinyu/p/5817531.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值