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);
}
}
如果开启了事务的话,后台打印的是true,如果没有开启事务的话,后台打印的是 false,
可以看出,Spring 在有事务管理的时候,在同一个事务中,是用的一个session。通过查看源码可知道,Spring 是用这个类SessionFactoryUtils 调用SessionHolder来管理的,看一下源码。
public class SessionHolder extends ResourceHolderSupport {
private static final Object DEFAULT_KEY = new Object();
/**
* This Map needs to be synchronized because there might be multi-threaded
* access in the case of JTA with remote transaction propagation.
*/
//注意这里,Session 是放置在一个Map 容器里的
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);
}
}
水平有限,只能分析到这里,在以后有时间将进一步的分析,先做个大体的了解。
分享到:
相关推荐
提供的“项目总结.docx”文档可能包含了SSH实战项目的具体实施步骤、遇到的问题及解决方案、性能优化措施、团队协作经验等内容。通过阅读这份文档,你可以学习到项目管理、问题排查、技术选型等方面的知识。 7. **...
SSH学习模板 SSH学习模板 SSH学习模板 SSH学习模板
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。这个"SSH项目源码及心得体会"的资源对于初学者来说尤其宝贵,因为它不仅包含了实际项目的源代码,还记录了开发者在整合和...
学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记
SSH项目总结 SSH,即Struts、Spring和Hibernate,是Java Web开发中常见的三大框架集成。这三大框架分别处理了Web应用中的不同层面,构建出高效、可维护性高的应用程序。接下来,我们将深入探讨SSH框架的各个组成...
在阅读参考资料和牛人的笔记时,你可以关注他们是如何解决实际问题的,比如性能优化、异常处理、安全策略等。这些实践经验往往能帮助你在实际项目中更好地运用SSH框架。通过不断地学习和实践,你将能够深入理解SSH...
五、小结 SSH 免密码登陆需要在本机生成密钥对,然后将公钥复制到远程服务器的 authorized_keys 文件中,并设置正确的权限。这样,可以实现免密码登陆。 一些常见问题的解决方案: 问题 1:在服务器 B 上没有 ....
SSH,全称Secure Shell,是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他网络服务。在IT行业中,SSH通常指的是Spring、Struts和Hibernate这三大框架的组合,它们是Java Web开发中的核心组件,...
### 小结 通过以上分析可以看出,SSH整合不仅涉及各个框架的基础知识点,还需要对这些框架如何协同工作有深入的理解。例如,如何在Spring中配置数据源以供Hibernate使用,如何在Struts2中正确配置Action等。此外,...
#### 五、小结 通过以上步骤,我们已经成功搭建了一个简单的SSH框架应用实例。这个实例不仅涵盖了Struts框架的基本使用,还初步涉及了Spring框架的应用配置。初学者可以通过实践此案例加深对SSH框架的理解,并为...
7. **小结**:在第七讲的小结中,可能总结了SSH的主要知识点,回顾了关键配置和操作,强调了SSH在日常IT运维中的重要性和实用技巧。 通过这个课件,学习者将深入理解SSH的工作机制,提升网络安全意识,并掌握在实际...
四、小结 本文总结了多种 SSH 异常,包括持久性异常、数据库连接异常、外键约束异常、数据截断异常等。通过对这些异常的分析和解决方案的总结,可以帮助开发者更好地理解和解决这些常见的 SSH 异常,提高开发效率和...
7. 小结 通过本文的指导,我们已经成功地使用 SSH 连接了 Window 主机和 Ubuntu 虚拟机。SSH 连接提供了一种安全的远程访问方式,能够满足我们的需求。 知识点总结 * SSH 连接的基本原理 * 如何配置虚拟机的 IP ...
### 三、小结 整合SSH框架是一项技术挑战,但通过遵循正确的步骤和理解常见的错误点,可以有效避免许多初学者常犯的问题。在构建项目时,仔细检查类路径设置,确保所有依赖正确无误,并留意配置文件的准确性,这些...
五、 小结 通过以上配置,可以解决SSH中文乱码问题。需要注意的是,在配置web.xml的过滤器时,需要将 CharacterEncodingFilter放在第一位,以避免其他过滤器的干扰。同时,需要在struts.properties中添加struts.i18...
#### 七、小结 通过对每账号配置的学习,我们可以了解到这是一种强大而灵活的工具,它不仅能够提高系统的安全性,还能根据每个用户的需求定制访问规则。然而,我们也需要注意每账号配置存在一定的局限性,它不能...
### 小结 SSH2整合技术是现代Java Web开发的重要组成部分,它通过将Struts的灵活界面构建能力、Spring的强大依赖管理和事务控制功能以及Hibernate的高效数据持久化特性融合在一起,提供了一个高度可扩展、可维护的...
#### 小结 SSH集成涉及多个配置层面,正确的配置对于系统的正常运行至关重要。理解并合理设置`web.xml`中的各个元素,以及确保Spring和Struts配置正确无误,是解决类似JSP文件位置问题的关键。同时,对于调试信息的...
在这个领域,`SSH`(Struts + Spring + Hibernate)是一个经典的组合,它整合了三个开源框架,提供了强大的MVC(模型-视图-控制器)架构支持、依赖注入以及持久化管理。 首先,我们来看Struts,它是SSH中的视图层...