Hibernate---基础理解+OpenSessionInViewFilter

 

一,SessionFactory

   1,是线程安全的,它的同一个实例可以被多个线程共享。

  2,是重量级的,不能随意创建或销毁它的实例,如果为应用同时访问多个数据库,则需要为每个数据库创建一个单独的SesisonFactory实例

  //可用于自定义查询

  <property name="total"  formula="select count(*) from user as u"/>

二,OpenSessionInViewFilter

   在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception;    OpenSessionInView提供了一种简便的方法,较好地解决了lazy loading问题.     
   它有两种配置方式OpenSessionInViewInterceptor和 OpenSessionInViewFilter(具体参看SpringSide),功能相同,只是一个在web.xml配置,另一个在 application.xml配置而已。    
     Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${ company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。

1,配置方式

application.xml 

  1. <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">    
  2. <property name="sessionFactory">    
  3. <ref bean="sessionFactory"/>    
  4. </property>    
  5. </bean>    
  6. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    
  7. <property name="interceptors">    
  8. <list>    
  9. <ref bean="openSessionInViewInterceptor"/>    
  10. </list>    
  11. </property>    
  12. <property name="mappings">    
  13. ...    
  14. </property>    
  15. </bean>
  16. -----------------------------------

一,hibernate提供三种缓存机制
1,默认的查询缓存区域:net.sf.hibernate.cache.StandardQueryCache
2,用户自定义的查询缓存区域:customerQuries
3,时间戳缓存区域:net.sf.hibernate.cache.UpdateTImestampCache

   在查询区域存放查询缓存,时间戳区域存放与查询相关插入、更新缓存.在某一时刻进行查询时,先对比查询与更新这两块缓存的时间,看那个时刻的时间离这最近 如果查询的近,直接进行查询,不对数据库进行操作。如果删除、更新的近,删查询中相对应的,然后到数据库中查,再重新加入查询缓存。但是如果你手动修改数 据库,hibernate监视不到,这样一来他就会到查询缓存中找,这样就会数据不同步。可执行Query接口 setForceCacheRefresh(true)使查询缓存丢弃,重新查,重新加入查存。、、392存储过程的使用。批量更新删除不用 hibernate缓存,可以用jdbc,这样的话,就可以节省与缓存操作时间.但如果是批量查询的话,可以用缓存.

二,mysql有text blob与oracle有clob blob相对应。

三,可以再.hbm.xml中写相应的hql语句

<query name="findcustomerbyname"><![DATA[
     from Customer c where c.name like :name
]]></query>


Query query=session.getNamedQuery("findcustomerbyname");
query.setString("name",name);
List result=query.list();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值