转载:http://zhxing.iteye.com/blog/306076
1.谈谈hibernate的延迟加载和openSessionInView
答:延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
OpenSessionInView模式是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开 Hibernate的Session,一直保持这个Session,直到这个请求结束。openSessionInView有两种实现方式:一种是过滤器,还有一种是拦截器。
大概过程是:一次请求->打开session->业务处理->页面渲染->关闭session->响应
2.session.load()和session.get()的区别
答:
(1)如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObejctNotFoundException。
(2)Load方法可返回实体的代理类类型
(3)Load方法可以充分利用内部缓存和二级缓存中现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。
3.spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。
答:声明事务和编程事务
隔离级别:
- DEFAULT使用数据库默认的隔离级别
- READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题
- READ_COMMITTED会出现重复读和幻影读
- REPEATABLE_READ会出现幻影读
- SERIALIZABLE最安全,但是代价最大,性能影响极其严重
和传播行:
- REQUIRED存在事务就融入该事务,不存在就创建事务
- SUPPORTS存在事务就融入事务,不存在则不创建事务
- MANDATORY存在事务则融入该事务,不存在,抛异常
- REQUIRES_NEW总是创建新事务
- NOT_SUPPORTED存在事务则挂起,一直执行非事务操作
- NEVER总是执行非事务,如果当前存在事务则抛异常
- NESTED嵌入式事务
4.谈谈对Struts的流程的理解。
答:Request->ActionServlet->如果不存在相应的Action则否则返回error,流程结束->创建ActionForm->进行validatge校验,如果没有通过校验则返回error->创建Action->执行Action的execute方法,并返回ActionForword对象->return respose->结束
5.谈谈ThreadLocal在spring框架中的作用
答:在管理request作用域的Bean、事务管理、任务调度、AOP等模块起着举足轻重的作用。(可参考个人博客上相关内容)
6.以前项目中有没有用到spring的AOP?具体用来做什么?
答:事务管理、日志、权限管理等。
7.谈谈对struts的MVC的理解。
答:view部分:由JSP页面充当,发起请求和等待请求处理后结果返回都通过JSP页面呈现给用户,struts提供了丰富的标签库,可以最大限度地减少脚本的使用。
controller部分:struts的控制器是分成2个部分:系统核心控制器、业务逻辑控制器。系统核心控制器为ActionServlet,负责拦截所有HTTP请求,然后根据用户请求决定是否需要调用业务逻辑控制器,如果需要则将请求转发给Action处理(继承Action类)。
model部分:由ActionForm和javabean组成。javabean封装了底层的业务逻辑。
8.Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因
答:struts1不是,struts2是;
声明局部变量,或者扩展RequestProcessor,让每次都创建一个Action,或者在spring中用scope="prototype"来管理.
9.Hibernate有哪几种查询数据的方式
答:hql查询,sql查询,条件查询
10.Hibernate中的update()和saveOrUpdate()的区别.
答:摘自hibernate说明文档:
saveOrUpdate()做下面的事:
如果对象已经在本session中持久化了,不做任何事
如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常
如果对象没有持久化标识(identifier)属性,对其调用save()
如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()
如果对象是附带版本信息的(通过 <version>或 <timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。
否则update() 这个对象
11.Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。
答:getHiberanteTemplate里面提供了save,update,delete,find等方法。
简单说一个:如果配置了声明式事务,当执行getHibernateTemplate的各种方法的时候,事务会自动被加载;如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate的autocommit=true。
12、Spring 中对hibernate session 的管理
答:在ssh架构中,常用继承HibernateDaoSupport来写Dao 类。Spring 提供了对hibernate session 的管理。我做了个尝试,看下面的代码:
- public class UserHibernateDao extends HibernateDaoSupport implements UserDao{
-
-
public void test(T entity) {
-
Session session1=this.getSession();
-
Session session2=this.getSession();
- System.out.println(session1==session2);
- }
- }
public class UserHibernateDao extends HibernateDaoSupport implements UserDao{
public void test(T entity) {
Session session1=this.getSession();
Session session2=this.getSession();
System.out.println(session1==session2);
}
}
如果开启了事务的话,后台打印的是true,如果没有开启事务的话,后台打印的是 false,
可以看出,Spring 在有事务管理的时候,在同一个事务中,是用的一个session。通过查看源码可知道,Spring 是用这个类SessionFactoryUtils 调用SessionHolder来管理的,看一下源码。
- public class SessionHolder extends ResourceHolderSupport {
-
-
private static final Object DEFAULT_KEY = new Object();
-
-
-
-
-
-
-
private final Map sessionMap = Collections.synchronizedMap(new HashMap(1));
-
-
private Transaction transaction;
-
-
private FlushMode previousFlushMode;
-
-
-
public SessionHolder(Session session) {
- addSession(session);
- }
-
-
public SessionHolder(Object key, Session session) {
- addSession(key, session);
- }
-
-
-
public Session getSession() {
-
return getSession(DEFAULT_KEY);
- }
-
-
public Session getSession(Object key) {
-
return (Session) this.sessionMap.get(key);
- }
- }
分享到:
相关推荐
SSH总结之Spring
北大青鸟 ACCP5.0 SSH总结 北大青鸟 ACCP5.0 SSH总结
ssh总结文档非常好用,对初学者很好,里面对SSH的集成和步骤详细
spring hibernate struts2 从最基础的入门案例 文档 所有内容 以及 SSH 的三个版本的整合文档和案例
开发两年web整理的资料,oracle sqlserver java ssh js
这是本人对SSH框架的总结,在平时开发中很有用处
java的SSH框架总结.pdf
ssh框架错误总结
ssh学习总结知识.pdf
ssh架构个人总结.doc
ssh学习总结.doc ssh学习总结.doc ssh学习总结.doc
SSH面试总结; 超详细的SSH面试资料; 聚集N多网友SSH面试心得。。。
SSH知识点总结,总结全面的SSH知识点,适合找工作的同学面试的时候问到的问题!
感觉还不错,所以供大家分享,针对SSH框架做了详细的解释,便于学习
SSH在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。 Struts对Model,View和Controller都提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是...
关于ssh框架学习的一些总结,还有常用的一些jar包,包括数据库连接包等,我会时常更新,感谢大家支持
ssh 框架 整合 总结 优点 缺点 以及ssh mvc 和三层架构的概述。
ssh一些基本的总结,有利于初学者对ssh的总结和进一步的学习!
SSH框架