Mybatis:
1、总体描述,架构图JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API, 可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。Mybatis 是对JDBC的封装的持久层框架。所以要记住MyBatis的宗旨:是基于JDBC封装的框架,底层真正与数据库的操作肯定还是通过JDBC来进行的。
架构:
1)接口层:核心就是SqlSession接口,定义了mybatis暴露给应用程序调用的api。
2)核心处理层配置解析 在初始化过程中,会加载mybaits-config.xml配置文件、映射配置文件及Mapper接口中的注解信息, 解析后的配置信息会形成相对应的对象并保存到Configuration对象中。SQL解析:解析映射文件中定义的动态SQL节点,并形成数据库可执行的SQL语句。SQL执行:涉及到很多组件,比较重要的是Executor、StatementHandler、ParameterHandler和ResultSetHandler。Executor主要负责维护一级缓存和二级缓存,并提供事物管理的相关操作,它会将数据库相关操作委托给StatementHandler完成。StatementHandler首先通过ParameterHandler完成SQL语句的参数绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果集,最后通过ResultSetHandler完成结果集的映射。
3)基础支持层:基础支持层包含mybatis的基础模块,这些模块为核心处理层提供支持。如反射模块等
2、一级缓存二级缓存
一次查询,根据传入sqlstatementId和查询条件构造一个key,先从缓存中查找是否已缓存。如果启用了二级缓存的话,MyBatis 首先会先从二级缓存中检索查询结果,如果缓存不命中则会继续检索一级缓存。只有在这两层缓存都不命中的情况下才会查询数据库,最后会以数据库返回的结果更新一级缓存和二级缓存。
一级缓存是基于 sqlSession 的,而 二级缓存是基于 mapper文件的namespace二级缓存的默认实现也是PerpetualCache,默认的缓存策略是LRU。二级缓存是需要单独配置的,通过开启。
只要执行update操作(update、insert、delete),都会将这个SqlSession对象中对应的一级缓存清空掉,这些操作默认会刷新缓存flushCache="true"。
网友评论