mybatis常见面试题

1.Mybatis动态sql是做什么的?都有哪些动态sql,简单描述一下动态sql的执行原理

Mybatis动态sql是 指在映射文件xml中可以通过标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。
有9种动态sql标签:trim/where/set/foeach/if/choose/when/otherwise/bind。
执行原理为使用OGNL从sql参数对象种计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。

2.Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载
association指的就是一对一,collection指的就是一对多查询。
在mybatis中可以配置是否启用延迟加载lazyLoadingEnabled=true|false

3.Mybatis都有哪些Executor执行器?它们之间的区别是什么?

SimpleExecutor:每执行一次update或者select就开启一个statement对象,用完立刻关闭statement。
ReuseExecutor:执行update或者select以sql作为key查找statement对象,存在就是用,不存在就创建一个新的。
使用完毕以后不关闭statement对象而是将他存放到Map<String,Statement>中供下一次使用,简言之就是重复使用statement。
BatchExecutor:执行update将所有sql都添加到批处理中(addBatch()),等待统一执行executeBatch(),它缓存了多个statement对象,
每个statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理的。

4.简单描述一下Mybatis的一级,二级缓存(分别从存储结构,范围,失效场景。三个方面进行作答)?

Mybatis的缓存分为一级缓存和二级缓存:
一级缓存:存放在session里面,默认开启,只在单个sqlsession中有效。
二级缓存:存放在namespace里面,默认开启,在整个namespace中有效。

5.简单描述一下Mybatis的插件运行原理,以及如何编写一个插件?

Mybatis插件的本质是拦截器Interceptor,Mybatis使用的是JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能。
每当执行插件时就会进入拦截方法,具体就是InvocationHandler的invoke()方法。
实现Mybatis的Interceptor接口并重写intercept()方法,然后给插件编写注解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值