一,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
-
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
-
<property name="sessionFactory">
-
<ref bean="sessionFactory"/>
-
</property>
-
</bean>
-
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
-
<property name="interceptors">
-
<list>
-
<ref bean="openSessionInViewInterceptor"/>
-
</list>
-
</property>
-
<property name="mappings">
- ...
-
</property>
- </bean>
- -----------------------------------
一,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();
分享到:
相关推荐
Hibernate是Java领域中一款流行的持久化框架,它简化了与关系数据库之间的交互,提供了一种对象关系映射(ORM)的解决方案。以下是对面试中可能会遇到的...理解并掌握这些内容对于深入学习和使用Hibernate至关重要。
2. **启用OpenSessionInView过滤器**:在web.xml中配置OpenSessionInViewFilter,该过滤器会在HTTP请求开始时开启一个新的Hibernate Session,并在请求结束时提交或回滚事务并关闭Session。 3. **编写业务逻辑**:在...
SSH(Struts2、Spring、Hibernate)是一种常见的Java Web应用程序开发框架组合,用于构建高效、模块化和可扩展的企业级应用。在这个组合中,Struts2作为...尽管如此,SSH仍然是理解企业级Java Web开发基础的重要参考。
- **临潼德荥纸业有限公司客户管理系统** 项目,开发者负责了客户资源管理、权限控制等多个模块,利用Spring的OpenSessionInViewFilter解决懒加载问题。 以上是根据简历模板中提及的专业技能和项目经验所解析的...
翟明明在多个项目中使用了Hibernate,表明他对数据库操作有深入理解,能有效管理对象与数据库表之间的映射关系。 3. **Spring**:Spring框架是JavaEE开发的核心,它提供了依赖注入(DI)、面向切面编程(AOP)和...
- `OpenSessionInViewFilter` 是Spring和Hibernate整合中常用的一个过滤器,它确保在一次HTTP请求的整个生命周期内,都存在一个有效的Hibernate Session。这使得在视图层(如JSP)可以方便地访问延迟加载的属性,而...
首先,搭建SSH框架的基础环境是Eclipse集成开发环境以及对应的数据库连接Jar包。Eclipse作为开发工具,提供了丰富的插件支持,使得框架的搭建和管理变得更加便捷。对于数据库连接,需要根据实际项目需求选择相应的...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <!--...--> ``` 此过滤器保持一个打开的Hibernate Session直到视图渲染完成,确保了事务的一致性。 #### 6. ...
在`web.xml`中,`OpenSessionInViewFilter`是一个用于解决懒加载异常的关键配置,它确保在用户请求的整个生命周期内,Hibernate Session保持打开状态。`sessionFactoryBeanName`参数关联到Spring配置中的...
这个案例提供了一个基础的登录功能,同时展示了S2SH集成的各个方面,包括OpenSessionInViewFilter的使用、声明式事务管理以及三层架构的设计。 首先,让我们从Struts2开始。Struts2作为控制层,负责处理HTTP请求,...
例如,可以用汽车的例子来理解这些概念:汽车可以视为一个类,其中包含了各种属性(如颜色、型号等),并通过不同的方法实现其功能(如启动、加速等)。 2. **对象实例化方式及区别** - **使用构造函数**:最...
2. **Hibernate配置**:使用`OpenSessionInViewFilter`过滤器,该过滤器使得Hibernate在HTTP请求的生命周期内保持一个数据库会话,解决了懒加载(Lazy Loading)时可能出现的错误。`hibernateFilter`将这个过滤器...
对于OpenSessionInView模式,可以通过`OpenSessionInViewFilter`或`OpenSessionInViewInterceptor`来处理事务和会话范围的问题。 5. **Spring事务管理**: - **TransactionDefinition**:定义事务的属性,如隔离...
在面试中,除了理解这些基础知识,还要能结合实际项目经验,讨论如何在实际开发中应用这些概念,以及遇到的问题和解决方案。同时,了解 Spring Boot、Spring Cloud 等扩展框架也是提升面试竞争力的关键。
总结来说,这篇笔记深入浅出地讲解了Spring框架的基础知识,包括面向接口编程的原则、IOC和DI的原理与应用、AOP的使用,以及Spring与其他框架的整合,对于学习和理解Spring框架具有很高的参考价值。