![](https://csdnimg.cn/release/download_crawler_static/87912276/bg1.jpg)
什么是 MyBatis?
MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。
讲下 MyBatis 的缓存
MyBatis 的缓存分为一级缓存和二级缓存一级缓存放在 session 里面,默认就有,二级缓
存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化
接口(可用来保存对象的状态),可在它的映射文件中配置
Mybatis 是如何进行分页的?分页插件的原理是什么?
1、Mybatis 使用 RowBounds 对象进行分页,也可以直接编写 sql 实现分页,
也可以使用 Mybatis 的分页插件。
2、分页插件的原理:实现 Mybatis 提供的接口,实现自定义插件,在插件的拦截方法内拦
截待执行的 sql,然后重写 sql。
举例:select from student,拦截 sql 后重写为:select t from (select*from student、t
limit 0,10
简述 Mybatis 的插件运行原理,以及如何编写一个插件?
1、Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、
Executor 这 4 种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理对象以实
现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是
InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
2、实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写注解,指定
要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。
Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
1、Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑
判断和动态拼接 sql 的功能。
2、Mybatis 提供了 9 种动态 sql 标签:
trim|where|set|foreach|if|choose|when|otherwise|bind。
3、其执行原理为,使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼