面试题-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 | 迭代,批量更新 |