ORM框架-MyBatis

327 阅读2分钟

MyBatis和Hibernate的区别

MyBatis是一个半自动映射的框架,配置java对象与sql语句执行结果的对应关系,多表关联配置简单

Hibernate是一个全表映射的框架,配置java对象与数据库表的对应关系,多表关联关系配置复杂

MyBatis原理

  1. 读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库的信息
  2. 加载映射文件:即SQL映射文件,配置了操作数据库的SQL语句
  3. 构造会话工厂:由MyBatis的环境配置信息构建会话工厂SqlSessionFactory
  4. 创建会话对象:由会话工厂创建SqlSession对象,改对象中包含了执行SQL语句的所有方法
  5. Executor执行器:操作数据库
  6. MappedStatement对象:该参数是对映射信息的封装
  7. 输入参数映射:输入参数可以是Map,List集合类型,也可以是基本数据类型和POJO类
  8. 输出参数映射:输出结果可以是Map,List集合类型,也可以是基本数据类型和POJO类

MyBatis的缓存

  • 一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close后,Session中的所有Cache都会清空
  • 二级缓存:默认也是采用PapetualCache,HashMap存储,默认不打开二级缓存

对于缓存数据的更新,当一个作用域进行了CUD之后,默认改作用域下所有select中的缓存都将被clear

MyBatis进行批量操作

使用foreach操作

使用ExectorType.BATC批处理执行

batch模式重复使用预处理的语句,并且批量执行所有更新语句,不需要反反复复的获取Connection和释放Connection而耗费大量的时间,效率低下

但是在insert操作时,在事务提交之前,是没有办法获取到自增id的,在某些情形下不符合业务需求