面试题-SSM框架篇

本文深入探讨SSM(Spring, SpringMVC, Mybatis)框架的面试重点,包括Mybatis的理解、缓存机制,Spring的IOC和AOP,以及SpringMVC的工作流程和优势。详细解析了Mapper接口原理、动态SQL、Bean生命周期、RESTful风格和异常处理等关键知识点。" 107104636,9536854,Vue中使用iView的Select下拉框与Upload文件上传组件,"['前端开发', 'Vue', 'JavaScript']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题-SSM框架篇

一、Mybatis篇

1.谈谈你对 Mybatis 的理解

  • Mybatis 是一个可以自定义 SQL 、存储过程和高级映射的持久层框架。
  • 内部封装了 JDBC,开发的时候只需要关注 SQL 语句本身,性能高、效率高、灵活性高

2.mapper 接口层和 mapper 映射文件的映射关系

接口的类路径 sql 的 namespace
方法名(不能重载) sql 的 id(唯一)
输入参数类型 sql 的 parameterType
输出参数类型 sql 的 resultType

3.Mapper 接口工作原理

  • Mapper接口的工作原理是JDK的动态代理,Mybatis 运行时会使用 JDK动态代理为 Mapper 接口生成代理对象 proxy,代理对象会拦截接口方法,从而执行所代表的sql,然后将sql的执行结果返回。

4.MyBatis 执行 SQL 的工作原理,都有哪些映射形式

  • 使用 resultMap 标签,定义数据库列名和对象属性之间的映射关系
  • 使用 sql 列的别名功能,将列的别名书写为对象属性名
  • 有了列名与属性名的映射关系后,MyBatis 通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回

5.讲一下 MyBatis 的缓存

  • MyBatis 的缓存分为一级缓存、二级缓存,一级缓存存放在 session 中,默认就有
  • 二级缓存存放在命名空间中,默认是不打开的,使用二级缓存属性类需要实现 serializable 接口,可以在映射文件中配置 cache 标签开启

6. MyBatis 动态SQL的执行原理?有哪些动态sql?

执行原理 根据表达式的值完成逻辑判断并动态拼接 SQL
if 使用if标签,让我们可以有选择的加入 SQL 语句的片段
where where标签会自动去掉标签体内前面多余的 and / or
set 使用set标签动态管理更新(set) 子句,并且动态去掉两端多余的逗号
trim 使用trim标签控制条件部分两端是否包含某些字符
choose/when/otherwise 在多个分支条件中,仅执行一个,类似于 java 的 if,else
foreach 迭代,批量更新

### SSM框架常见面试题总结 #### 1. SSM框架的核心概念 SSM框架由Spring、Spring MVC和MyBatis三个部分组成。其中,Spring作为核心容器负责管理Bean的生命周期以及提供IoC/DI功能;Spring MVC用于处理Web请求和响应;而MyBatis则作为一个持久化框架,专注于SQL操作。 - Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架[^3]。 - MyBatis专注于SQL本身,适合对性能要求高或需求变化频繁的项目[^4]。 #### 2. IoC与DI的区别 IoC(Inversion of Control),即控制反转,是一种设计思想,指将对象创建的权利交给容器完成。DI(Dependency Injection),即依赖注入,是IoC的具体实现方式之一。通过XML配置文件或注解(@Autowired等),Spring能够自动装配Bean之间的依赖关系。 #### 3. Spring中的AOP机制 AOP(Aspect-Oriented Programming)关注的是程序的功能模块划分问题。它允许开发者定义横切逻辑,并将其独立于业务逻辑之外进行维护。在Spring AOP中,可以通过@AspectJ注解的方式实现切面编程[^1]。 #### 4. Bean的作用域及其线程安全性 Spring中的Bean默认采用Singleton作用域,意味着整个应用程序上下文中只有一个实例存在。对于多线程环境下的访问,需注意其线程安全性问题。如果某个单例Bean持有可变状态,则可能引发并发冲突[^2]。 #### 5. FactoryBean与BeanFactory的区别 - **FactoryBean** 是一种特殊的Bean接口,允许自定义复杂的初始化过程。 - **BeanFactory** 则是用来获取Bean实例的基础工厂类,属于较底层的设计。 #### 6. Spring事务管理 Spring支持声明式事务管理和编程式事务管理两种形式。前者主要依靠@Transactional注解来简化事务边界设置工作流程;后者则是手动编写代码显式调用beginTransaction()、commit()方法等方式来进行更精细的操作。 #### 7. MyBatis的一对一映射配置 当涉及到实体间的关系时,比如一对一关联场景下,在Mapper XML文件里可通过`<association>`标签指定外键字段及相关联的目标表查询语句[^5]: ```xml <resultMap type="User"> <id property="userId" column="user_id"/> <association property="profile" javaType="Profile"> <id property="profileId" column="profile_id"/> </association> </resultMap> ``` #### 8. SSM整合的关键点 为了使这三个技术栈协同运作良好,通常需要做如下几件事情: - 配置数据源DataSource; - 设置SqlSessionFactoryBean并将之注册到Spring Context中去; - 使用MapperScannerConfigurer扫描包路径内的所有Mapper接口从而动态代理生成对应的Dao层实现类。 --- ### 示例代码片段展示 以下是有关如何利用Spring Boot Starter Data JPA替代传统MyBatis的部分示例: ```java // Entity Class Example @Entity public class User { @Id private Long id; private String name; public void setId(Long id){ this.id=id; } } // Repository Interface Definition @Repository public interface UserRepository extends CrudRepository<User,Long> {} ``` 上述例子展示了基于Java Persistence API (JPA)标准构建的数据访问层设计方案,相比原生MyBatis更加简洁高效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三份强势七分暖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值