spice and wolfspice and wolf Be the One you wanna Be

Mybatis基础面试题

MyBatis的优缺点

优点

  • 兼容性。兼容各种数据库软件。
  • 良好的封装性。MyBatis在JDBC基础上进行了良好的代码封装,让我们无需手动编写底层的JDBC代码,不用管底层代码的实现细节,便能与数据库进行交互。
  • 很好的集成了Spring。
  • 将代码与SQL解耦,更便于开发人员对SQL进行管理。
  • 基于缓存的性能优化和支持动态SQL编写等特性。

缺点

  • 可移植性差。
  • 需要手动编写SQL,增加了开发人员的工作量。

#{}和${}有什么区别?

两者的主要区别在于处理参数的方式不一样:

${}采用字符串替换的方式处理传参。

#{}采用预处理的方式处理传参。

基于不同的传参方式,两者在这两个方面也有区别:

  • 使用方式。${}因为是字符串拼接,所以拼接字符串时需要加上单引号,而#{}则不需要。
  • 使用场景。${}可以用于SQL指令拼接来实现更灵活的SQL语句,但是#{}不行。
  • 安全性。${}字符串拼接的缺点就是不能防止SQL注入攻击,但是#{}基于预处理的传参方式能有效方式SQL注入攻击。

MyBatis缓存

  • 一级缓存。基于perpetualCache的HashMap本地缓存,其存储作用域为SqlSession,当SqlSession flush或close后,该SqlSession中的所有cache将会清空。MyBatis默认打开一级缓存。
  • 二级缓存。二级缓存和一级缓存机制相同,默认也是采用perpetualCache的HashMap存储,不同在于其存储作用域为Mapper(Namespace),并且可自定义存储源,如EhCache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serialzable序列化接口,可在它的映射文件中配置。
  • 对于缓存数据更新机制,当某一个作用域进行增删改操作后,默认该作用域下的所有查询缓存会全部清空并重新更新,如果开启了二级缓存,则只根据配置判断是否更新。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Press ESC to close