`

SSH总结

阅读更多

转载: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 的管理。我做了个尝试,看下面的代码:

Java代码 复制代码 收藏代码
  1. public class UserHibernateDao extends HibernateDaoSupport implements UserDao{   
  2.   
  3.     public void test(T entity) {   
  4.                      Session session1=this.getSession();   
  5.          Session session2=this.getSession();   
  6.                      System.out.println(session1==session2);   
  7.                 }   
  8. }  
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来管理的,看一下源码。

 

 

Java代码 复制代码 收藏代码
  1. public class SessionHolder extends ResourceHolderSupport {   
  2.   
  3.     private static final Object DEFAULT_KEY = new Object();   
  4.   
  5.     /**  
  6.      * This Map needs to be synchronized because there might be multi-threaded  
  7.      * access in the case of JTA with remote transaction propagation.  
  8.      */  
  9. //注意这里,Session 是放置在一个Map 容器里的   
  10.     private final Map sessionMap = Collections.synchronizedMap(new HashMap(1));   
  11.   
  12.     private Transaction transaction;   
  13.   
  14.     private FlushMode previousFlushMode;   
  15.   
  16.   
  17.     public SessionHolder(Session session) {   
  18.         addSession(session);   
  19.     }   
  20.   
  21.     public SessionHolder(Object key, Session session) {   
  22.         addSession(key, session);   
  23.     }   
  24.   
  25.   
  26.     public Session getSession() {   
  27.         return getSession(DEFAULT_KEY);   
  28.     }   
  29.   
  30.     public Session getSession(Object key) {   
  31.         return (Session) this.sessionMap.get(key);   
  32.     }   
  33. }  
分享到:
评论

相关推荐

    oracle,ssh总结资料

    综上所述,"oracle,ssh总结资料"包含的是关于Oracle数据库、SQLServer数据库、Java编程以及JavaScript的基础知识和实践经验。这些技能对于一个Web开发者来说至关重要,能够帮助他们构建高效、稳定且用户友好的Web...

    北大青鸟 ACCP5.0 SSH总结

    【北大青鸟 ACCP5.0 SSH总结】 SSH(Struts+Spring+Hibernate)是Java Web开发中的一个经典组合,用于构建高效、可维护的Web应用程序。本篇将重点总结北大青鸟ACCP5.0课程中关于Struts框架的部分。 ### 1. Struts...

    SSH总结文档以及源码

    这篇文档将全面总结SSH框架的核心概念、配置及使用方法,并提供相关的案例分析。 首先,Spring框架是企业级应用的基石,它提供了一个全面的编程和配置模型,用于简化Java应用程序的开发。Spring的核心特性包括依赖...

    java的SSH框架总结.pdf

    总结来说,SSH框架结合了Struts的MVC模式、Spring的依赖注入和全面的后端解决方案,以及Hibernate的对象关系映射能力,为Java Web开发提供了一个强大、结构清晰的框架。这种框架模式有助于提高开发效率,降低维护...

    ssh框架错误总结

    SSH框架错误总结 SSH框架是基于Java的Web应用程序框架,广泛应用于企业级应用开发中。然而,在开发和调试过程中,经常会遇到各种错误和问题。本文总结了SSH框架常见的错误和解决方法,以便开发者快速解决问题,提高...

    SSH2框架整合总结

    这篇博客文章“SSH2框架整合总结”可能是关于如何在Java项目中集成和配置SSH2框架的详细指南。 在整合SSH2框架时,有几个关键知识点需要理解: 1. **SSH协议基础**:SSH是一种网络协议,用于加密网络连接,确保...

    SSH框架分析总结

    感觉还不错,所以供大家分享,针对SSH框架做了详细的解释,便于学习

    ssh学习总结知识.pdf

    总结来说,SSH框架虽然配置较为复杂,但通过解耦和模块化,能够提升开发效率和软件质量。随着Java生态系统的发展,现在出现了Spring Boot这样的框架,它简化了配置,集成了更多功能,降低了入门难度,成为了很多...

    SSH面试总结;超详细的SSH面试资料

    SSH面试总结; 超详细的SSH面试资料; 聚集N多网友SSH面试心得。。。

    SSH知识点总结

    SSH知识点总结,总结全面的SSH知识点,适合找工作的同学面试的时候问到的问题!

    ssh框架学习总结

    SSH框架是Java开发Web应用程序时常用的三大开源框架的组合,分别是Spring、Struts和Hibernate。它们各自负责不同的职责,共同构建了一个强大的MVC(Model-View-Controller)架构。 Spring框架是SSH的核心,它提供了...

    ssh架构个人总结.doc

    SSH 架构是一种在Java开发领域广泛使用的开源框架组合,由Struts、Spring和Hibernate三个组件构成,主要用于构建企业级的Web应用。Struts提供了控制层的功能,Spring负责业务逻辑和依赖注入,而Hibernate则作为数据...

    SSH开发框架总结

    SSH在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。 Struts对Model,View和Controller都提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是...

    SSH工作原理文档 总结报告

    **SSH工作原理文档总结报告** **一、SSH框架概述** SSH(Spring、Struts、Hibernate)是Java开发中广泛使用的三大开源框架,它们分别负责应用的业务层、表现层和持久层,共同构建了一个强大的MVC(Model-View-...

    SSH开发总结

    SSH开发总结主要涉及了三个主流的Java Web开发框架——Structs2、Spring4和Hibernate4的整合应用。这些框架一起构建了一个强大的后端开发环境,能够有效地管理应用程序的业务逻辑、持久化层以及用户界面交互。 1. *...

    ssh2开发整合个人总结

    SSH2 是一个集成框架,由 Struts、Spring 和 Hibernate 三个开源组件组成,常用于构建企业级的Java Web 应用程序。以下是关于 SSH2 开发整合的详细说明: 1. **Struts2**:Struts2 是一个基于 MVC(Model-View-...

    ssh集成 ssh集成

    **总结** SSH集成是现代IT基础设施中的重要组成部分,它提供了安全的远程访问和自动化操作手段。理解和掌握SSH集成,对于提升工作效率和系统安全性至关重要。无论是开发人员还是系统管理员,都需要熟练运用SSH集成来...

    SSH异常总结.doc

    SSH异常总结.doc SSH异常总结.doc SSH异常总结.doc

Global site tag (gtag.js) - Google Analytics