1. Mybatis支持枚举吗?
- 支持,有转换器EnumTypeHandler和EnumOrdinalTypeHandler
2. SqlSessionFactoryBuilder生命周期?
- 利用xml或者Java代码获得资源构建SqlSessionFactoryBuilder,它可以创建多个SessionFactory,一旦构建成功SessionFactory就可以回收它了
3. 一级缓存的结构?如何开启一级缓存?如何不使用一级缓存?
- Map,。默认情况下,一级缓存是开启的。 标签内加属性flushCache=true
4. 二级缓存如何配置?
- 这个参数是二级缓存的全局开关,默认值是true,初始状态为开启状态。如果把这个参数设置为false,即使有后面的二级缓存配置,也不会生效
5. 简述Mybatis插件的运行原理,以及如何编写一个插件?
-
Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这四种接口的插件,Mybatis通过动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这四种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,当然,只会拦截那些你指定需要拦截的方法
-
实现Mybatis的Interceptor接口并复写intercept()方法,然后再给插件编写注解,指定要拦截哪一个接口的哪些方法即可,最后别忘了在配置文件中配置自己编写的插件
6. 二级缓存的回收策略有哪些?
- eviction(收回策略)
- LRU(最近最少使用的):移除最长时间不被使用的对象,这是默认值
- IFO(先进先出):按对象进入缓存的顺序来移除它们
- SOFT(软引用):移除基于垃圾回收状态和软引用规则的对象
- WEAK(弱引用):更积极地移除基于垃圾收集器状态和弱引用规则的对象
7. Mybatis的xml文件中id可以重复吗?
- 同一namespace下,id不可重复。不同namespace下,可以重复
8. 和Mybatis搭配Java框架中比较好用的缓存框架》有哪些特点?
- EhCache是一个纯牌的Java进程内的缓存框架,具有快速、精干等特地
- EhCache主要特征:
- 简单、快速
- 多种缓存策略
- 缓存数据有内存和硬盘两级,无需担心容量问题
- 缓存数据会在虚拟机重启的过程中写入磁盘
- 可以通过RMI可插入API等方式进入分布式缓存
- 具有缓存和缓存管理器的侦听接口
- 支持多缓存管理器实例以及一个实例的多个缓存区域
9. resultMap和resultType
- resultMap是手动提交,人为提交,resultType是自动提交
- Mybatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在
- 在Mybatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值
- 当提供的返回类型属性是resultType时,Mybatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实Mybatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,Mybatis会自动的把对应的值赋给resultType所指定对象的属性
- 当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这在复杂查询中很有作用
10. Mybatis动态sql有什么用?执行原理?有哪些动态sql?
- 有九种动态sql标签:trim、where、set、foreach、if、choose、when、bind、otherwise
- Mybatis的动态sql可以在xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值,完成逻辑判断并动态拼接sql的功能
上一篇:Java面试手册V2.0+突击V3.0知识点整理(二十二) 附封面图片
下一篇:Java面试手册V2.0+突击V3.0知识点整理(二十四) 附封面图片
如果觉得封面图片还行,请顺手点个赞



