1.什么是mybatis

  1. mybatis是一个半orm的框架,他底层封装了jdbc.在使用的过程中,我们只需要关注sql本身,我们不需要关心数据库的加载驱动,创建连接和创建statement,极大的缩减了我们的代码量.
  2. mybats可以使用注解或xml配置对象和数据库的映射信息,避免了手动设置参数还有封装结果集.
  3. mybatis通过xml或者注解的方式将要执行的statement配置起来,通过对象和statement的动态参数生成最终的sql,最后由mynatis执行并将结果映射为java对象返回

2.mybatis的优缺点

优点

  1. 我们不需要关系数据库的加载驱动,创建连接和创建statement,极大的缩减了我们的代码量,也把sql语句和业务代码进行了解耦合.
  2. 很好了维护了对象和数据库的映射关系,我们在操作对象就相当于操作数据库
  3. 很好的与各种数据库兼容
  4. 很好的 与spring集成
  5. 在优化数据库性能上有优势

缺点:sql语句依赖于数据库,不能随意的更换数据库,移植性差

3.mybatis的一级缓存和二级缓存

为什么要有缓存:数据库查询是很浪费资源的,所以通过缓存机制,尽量避免每次查询都是查询数据库

1.一级缓存是什么:一级缓存就是一个hashmap,默认是开启的,他是sqlSession 级别的,如果发生了查询,以statemntId,param,boundsql,rowsbound为key存进去hashmap,在下次如果下次查询也匹配到了这个key,就可以直接取出这个对象而不用去查数据库,如果发生了事务性的提交(或者直接清除缓存),为了避免脏读,缓存数据就会被清空.

2.二级缓存是基于PerpetualCache 的跨sqlsession的 缓存的是数据 而不是对象,他的作用域为Namespace.使用userCacheflushCache可以自定义缓存刷新情况

好文:https://wwwblogs/happyflyingpig/p/7739749.html

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

直接加载,侵入式加载,深度加载

创建CGLib的代理对象,当调用目标方法时,进入拦截方法,当调目标方法时,拦截invoke()方法

更多推荐

2021Mybatis面试题(持续更新中)