Mybatis的优缺点
优点:
- 原生sql
- sql语句与代码解耦合
- 简单易学
- 原生的sql语句,sql调优灵活
缺点:
- 半自动ORM,不能自动sql语句
- sql语句依赖于具体数据库,数据性移植差
Mybatis缓存机制
一级缓存
- 作用域是Session,会对同一个Session中执行语句的结果进行缓存,来提高再次执行的效率
- 内部通过HashMap实现
- 默认开启
二级缓存
- 作用域是Mapper(namespace),在同一个namespace中查询sql时,可以从缓存中获取数据
- 二级缓存可以跨SqlSession生效,并且可以自定义存储源,比如:ehcache等缓存实现
- 可配置剔除策略、刷新时间、缓存数量等进行优化
问:请介绍一下Mybatis的缓存机制
Mybatis的具体使用相关
- Mybatis是如何预防Sql注入的?利用变量占位符:#{},进行sql预编译
- Mybatis怎么获取自增id?
- 动态Sql标签:如何配置?有哪些?
Mybatis的主要对象及其相应的作用
- SqlSessionFactory是用来创建SqlSession的工厂类,对应配置文件中的数据库配置
- SqlSession:对数据库的操作是在SqlSession中进行的,SqlSession非线程安全,每次调用数据库后都需要调用close进行关闭
- Executor:SqlSession通过内部的Executor来进行增删改查操作
- StatementHandler:用来处理sql语句的预编译,设置参数
- ParameterHandler:用来设置预编译参数
- ResultSetHandler:用来处理结果集
- TypeHandler:进行数据库类型和JavaBean类型的互相映射
Mybatis的插件机制
- 插件机制是通过拦截器组成责任链对Executor、StatementHandler、ParameterHandler、ResultSetHandler四个作用点进行定制化处理
- 基于插件机制实现的常用插件:mybatis-pagehelper