关于Java208面试题答案Mybatis

  1. Mybatis 中 #{}和 KaTeX parse error: Expected 'EOF', got '#' at position 53: …数不带引号 在大多数情况下使用#̲{},如果使用order by…{}
    使用${}时会有sql注入的风险
  2. Mybatis 有几种分页方式?
    数组分页
    sql分页
    拦截器分页
    RowBounds分页(逻辑分页)
  3. RowBounds 是一次性查询全部结果吗?为什么?
  4. Mybatis 逻辑分页和物理分页的区别是什么?
    1:逻辑分页 内存开销比较大,在数据量比较小的情况下效率比物理分页高;在数据量很大的情况下,内存开销过大,容易内存溢出,不建议使用
    2:物理分页 内存开销比较小,在数据量比较小的情况下效率比逻辑分页还是低,在数据量很大的情况下,建议使用物理分页
  5. Mybatis 是否支持延迟加载?延迟加载的原理是什么?
  6. 说一下 Mybatis 的一级缓存和二级缓存?
    一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空
    二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache
  7. Mybatis 和 Hibernate 的区别有哪些?
    性能方面 hibernate全自动效率慢 mybatis半自动 效率快
    封装 hibernate 是在jdbc上进行了一次封装 mybatis基于原生的jdbc,在运行速度上有优势
    sql hibernate 使用的是封装好的sql mybatis sql手动编写按需查询 更灵活,可控性更好,更优化
  8. Mybatis 有哪些执行器(Executor)?
    执行器Executor,执行器负责整个SQL执行过程的总体控制。
    参数处理器ParameterHandler,参数处理器负责PreparedStatement入参的具体设置。
    语句处理器StatementHandler,语句处理器负责和JDBC层具体交互,包括prepare语句,执行语句,以及调用ParameterHandler.parameterize()设置参数。
    结果集处理器ResultSetHandler,结果处理器负责将JDBC查询结果映射到java对象。
  9. Mybatis 分页插件的实现原理是什么?
    分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
  10. Mybatis 如何编写一个自定义插件?

猜你喜欢

转载自blog.csdn.net/weixin_44100313/article/details/89884571