hibernate

1 在hibernate 中对jdbc 事物的封装

因为在hibernate.cfg.xml 中已经进行数据库的的连接 ,所以当session 去的数据库的连接之后,在 session.beginTrastion 时,即默认 自动调用jdbc 层的setAutoCommite(false),在最后  HibernateSessionFactory.closeSession(); 提交关闭事物。

在jdbc 的提交模式中,如果数据库连接是自动连接,那么每次执行一个sql语句之后就会进行一次提交,然后开启下一个新的事物。

2 cache 缓存机制   www.cnblogs.com/wean/archive/2012/05/16/2502724.html

hibernate 中存在一级和二级缓存机制,

首先 当在频繁的调用数据使用数据时,由于每次都从数据库中调用 似的开销较大 影响性能,所以让数据在本地保留一个镜像,下次访问直接从内存中读取。cache 位于数据库和应用程序之间,从数据库中更新数据,并给程序提供数据。

当需要使用数据时,先从一级cache 查询,在查询二级数据,如果都没有,在查找数据库,然后将这条数据如果是增删改查就放入一级cache ,或者相应的二级cache。

一级cache  由session 提供,事物级数据缓存,一个session 对应一个数据库事务或者一个程序事物。 当使用save update 来保存数据时,或者 load find  list 来获取数据时得到对象时,session-cache  也会自动调用。

二级 也叫做 session -factory cache ,默认情况下是不自动调用的,保存的是  “”“  持久性实例散装形式的数据”“”“,不被修改并且经常被读的数据。

范围进程范围或者集群范围 ,缓存被同一个进程或集群范围内所有事务共享
 用户可以再单个类或类的单个集合的粒度上配置第二级缓存,

 什么样的数据适合存放到第二级缓存中?   
      1) 很少被修改的数据   
      2) 不是很重要的数据,允许出现偶尔并发的数据   
      3) 不会被并发访问的数据   
      4) 常量数据   
      不适合存放到第二级缓存的数据?   
      1) 经常被修改的数据   
      2) 绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发   
      3) 与其他应用共享的数据。  为不同线程提供session 。当客户端发送一个请求时,sessionfactory  会为其提供一个session、

                        configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

configuration  主要是负责管理hibernate  的配置信息,他主要是用于在获取sessionfactory 时候使用

session   它并不是线程安全的,一个持久化类与session 关联 然后 通过 get () load() 方法

在save()保存一个对象到数据库中的时候, 根据映射文件配置主键id生成算法

然后将对象缓存到session的内部缓冲中。

当事物提交时,清理session 对象缓存中的数据,并将新对象持久化到数据库中、

注意  在调用save方法时,并不是立即生成sql语句  而是当提交后,清理缓存之后在执行。save方法的调用只是临时的即将其保存到缓存中,在未提交之前仍然可以进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值