### SSH框架面试题详解
#### 一、Hibernate工作原理及为何使用
**1.1 Hibernate工作原理**
- **读取并解析配置文件**: Hibernate启动时首先读取`hibernate.cfg.xml`配置文件,该文件定义了Hibernate连接数据库的方式、使用的方言(Dialect)等基本信息。
- **读取并解析映射信息,创建SessionFactory**: 根据`*.hbm.xml`或注解定义的映射关系,创建`SessionFactory`实例。`SessionFactory`是线程安全的,整个系统中只需要一个即可。
- **打开Session**: `SessionFactory`负责打开和关闭`Session`。`Session`是非线程安全的,通常每个业务操作都需要一个新的`Session`。
- **创建事务Transaction**: 在进行数据库操作之前,需要通过`Session`开启事务。
- **持久化操作**: 通过`Session`执行增删改查等操作。Hibernate提供了丰富的API,支持多种方式的数据库操作。
- **提交事务**: 当数据操作完成后,需要提交事务以确保数据的完整性和一致性。
- **关闭Session**: 完成所有操作后,应关闭`Session`以释放资源。
- **关闭SessionFactory**: 应用程序结束时关闭`SessionFactory`。
**1.2 为什么使用Hibernate**
- **封装JDBC**: Hibernate对JDBC访问数据库的代码进行了封装,简化了数据访问层的繁琐操作。
- **ORM实现**: Hibernate是一种优秀的ORM(Object-Relational Mapping)框架,它将对象模型与关系模型之间进行转换,减少了DAO层的编码工作。
- **透明性**: Hibernate使用Java反射机制而非字节码增强来实现透明性,使得开发更加简单。
- **高性能**: Hibernate是一个轻量级框架,具有出色的映射灵活性和支持多种数据库类型的能力,从而提高了应用的性能。
#### 二、Hibernate如何实现延迟加载
**2.1 原理**
- **Hibernate2**: 支持实体对象和集合的延迟加载。当查询数据时,实际的数据并不立即加载到内存中,而是在真正需要时才加载。
- **Hibernate3及以上版本**: 添加了属性级别的延迟加载能力。
**2.2 实现机制**
- **懒加载(Lazy Loading)**: 通过配置文件或注解指定为lazy模式,Hibernate仅在访问关联实体时才会加载相关数据。
- **代理模式(Proxy Pattern)**: Hibernate使用代理模式来实现延迟加载。例如,当查询一个对象时,如果关联对象设置了lazy加载,则返回的关联对象实际上是代理对象。只有当真正访问关联对象时,Hibernate才会加载真实的数据。
#### 三、Hibernate中如何实现类之间的关系
- **一对多**: 可以通过`@OneToMany`或`<set>`标签来实现。父类通过子类的集合来表示一对多的关系。
- **多对多**: 使用`@ManyToMany`或`<set>`标签,通过中间表来维护多个实体之间的关联关系。
#### 四、Struts1工作流程
**4.1 工作流程**
1. **客户端发送HTTP请求**。
2. **ActionServlet接收请求**,根据`web.xml`配置。
3. **参数填充**: 根据`struts-config.xml`配置,将请求参数填充到`ActionForm`对象中。
4. **验证**: 调用`ActionForm`的`validate()`方法进行验证。
5. **业务逻辑处理**: 通过`Action`对象调用JavaBean的业务方法。
6. **结果返回**: `Action`返回`ActionForward`对象,决定下一步跳转。
7. **响应客户端**。
**4.2 MVC设计模式**
- **Model(模型)**: 业务逻辑层,如JavaBean。
- **View(视图)**: 显示层,如JSP。
- **Controller(控制器)**: 控制层,如Servlet。
#### 五、Struts简介
- **Struts1**: 基于JSP和Servlet的MVC框架。
- **Struts2**: 基于WebWork技术的新框架,与Struts1无直接联系。
#### 六、Spring框架简介
- **核心特性**: 依赖注入(IOC)和面向切面编程(AOP)。
- **IOC**: 容器管理对象生命周期和依赖关系。
- **AOP**: 提供横切关注点的实现,如日志记录、事务管理等。
#### 七、Hibernate简介
- **基于ORM**: 对象关系映射,将对象模型映射到关系数据库模型。
- **数据持久化**: 提供对象与数据库之间的持久化管理。
#### 八、JSF简介
- **JavaServer Faces**: 基于组件的Web开发框架,与Struts类似但侧重于组件化。
#### 九、数据库索引和约束
- **索引**: 提高数据检索速度的技术,可以在一个或多个字段上建立。
- **约束**: 保证数据完整性和一致性,包括非空约束、主键约束、外键约束等。
#### 十、Spring框架的核心特点
- **控制反转(IOC)**: 通过容器管理对象及其依赖关系。
- **面向切面编程(AOP)**: 分离关注点,提供横切关注点的实现机制。
SSH框架(即Struts、Spring、Hibernate)是Java Web开发中常用的三大框架组合,它们分别解决了MVC架构、依赖管理和数据持久化等问题,是现代Java Web开发不可或缺的一部分。