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序列化接口,可在它的映射文件中配置。
- 对于缓存数据更新机制,当某一个作用域进行增删改操作后,默认该作用域下的所有查询缓存会全部清空并重新更新,如果开启了二级缓存,则只根据配置判断是否更新。
发表回复