"这是一份Java面试宝典,涵盖了如Hibernate框架、检索策略、ORM映射等核心面试知识点,特别适合准备Java面试者学习。"
在Java面试中,Hibernate框架是常被问及的一个主题,因为它在企业级开发中广泛应用。Hibernate提供了五种检索方式来从数据库获取对象:
1. 导航对象图检索:通过对象之间的关联关系来获取相关对象,方便地遍历整个对象图。
2. OID检索:基于对象标识符(OID)来直接获取对象,适用于知道对象唯一标识的情况。
3. HQL检索:Hibernate查询语言,类似于SQL,但面向对象,可以进行更复杂的查询操作。
4. QBC检索:Query By Criteria,根据一系列条件构建查询,提供了一种面向对象的查询方式。
5. 本地SQL检索:允许直接使用SQL语句进行数据检索,提供了更多的灵活性。
关于Forward和Global-Forward,它们都是Struts框架中用于页面跳转的机制。Forward是在Action返回值后直接跳转到指定的JSP页面,而Global-Forward则是在全局配置文件中定义,适用于多个Action共享同一跳转目标的情况。
在Hibernate中,有三种主要的检索策略:
1. 立即检索:对象一旦被加载,其关联的对象也会立即加载。优点是简单,但可能导致大量SELECT语句,增加数据库交互,适合类级别的简单场景。
2. 延迟检索:仅在真正需要访问关联对象时才加载,节省了内存和数据库交互,适用于一对多或多对多关联,特别是不立即访问或不需访问关联对象的情况。
3. 迫切左外连接检索:在一次查询中加载所有关联对象,减少SELECT语句数量,适合一对一或多对一关联,且数据库性能良好,能高效处理连接的情况。
ORM(对象关系映射)的主要任务是解决面向对象的域模型和关系型数据库之间的不匹配问题,包括:
- 继承关系的映射:域模型中的类继承在关系模型中可能需要通过额外的表或字段来表示。
- 多对多关联:需要通过中间连接表来实现。
- 双向关联:关系模型通常只支持单向引用,而ORM通过额外的映射来模拟双向关联。
- 粒度差异:域模型往往更细粒度,而关系模型通常更粗粒度,ORM需要协调两者之间的差异。
映射继承关系有三种方式:
1. 每个子类一张表:每个子类有自己的表,包含自身属性和继承自父类的属性。
2. 根类一张表:所有子类的属性都存入根类表中,通过类型字段区分不同子类。
3. 每个类一张表,但不包含父类字段:子类表仅包含自身属性,通过外键关联到父类表。
至于Session的find()方法和Query接口,两者都是用来执行查询的。find()方法基于字符串查询,相对简单,而Query接口提供了更强大的功能,如参数绑定、分页、排序等,使得查询更灵活和安全。在实际应用中,Query接口更推荐使用,因为它提供了更好的类型安全性和代码可读性。
这份面试宝典包含了Java开发中的一些关键概念,对于准备面试的开发者来说,理解和掌握这些知识点将极大地提高面试成功的可能性。