mybatis中文api:
http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
配置文件详解
- 核心配置文件
- 数据库环境:数据源/事务管理
- Mapeer映射引入
- configuration 配置
- properties 属性
- settings 设置
- typerAllases 类型命名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 插件
- environments 环境
- environment 环境变量
- transactionManager 事务管理器
- dataSource 数据源
- environment 环境变量
- databaseIdProvider 数据库厂商标志
- mappers 映射器
- 映射配置文件
- sql映射
动态sql:
提供一系列的标签帮助拼接SQL、and和逗号都可以解决
<if>
<choose><choose>
<trim>
<foreach>
<when>
延迟加载(懒加载)
真正要使用数据的时候才去发送sql语句请求数据库数据
使用懒加载:
<!-- 对mybatis进行环境配置-->
<settings>
<!--配置启动懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name ="aggressiveLazyLoading" value="false" />
<!-- 启用二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--该映射使用二级缓存-->
<cache></cache>
缓存:
概念
- 存储数据(使用频繁的数据)的临时地方
- 常用的 属性
- 命中率
- 如果还有缓存空间 ,则没有命中的对象直接存储到缓存中
- 如果缓存满了,就会按照某种策略,将缓存中旧对象踢出,保存新对象–替代策略
- 最大元素
- 缓存算法
- LFU:Least Frequently Used,计算频率
- LRU:Least Recently Used,最新被访问的对象被放入缓存池顶部
- 替代策略 (清空策略)
- 最有代替策略:将最没用的踢出–缓存算法
- 存储成本
- 数据存入缓存的时间和空间成本
- 索引 成本
- 失效
- 缓存数据需要更新时,缓存数据失效
- 命中率
缓存分类
- 技术上分:内存/硬盘文件/数据库
- 缓存和应用的耦合度:
- local cache
- remote cache
- EE中的分类
- 服务器缓存: 设置缓存服务器放置在web应用服务器的前面,将用户的请求和应用服务器的响应写入缓存服务器,为后续用户的访问提供更快的响应
- 数据库缓存: 配置数据库缓存,数据库存储过程,连接池技术等,数据库缓存挂掉重建缓存会瞬间导致数据库压力增大
- 浏览器缓存: H5中storage,缓存html和图片/JS/CSS
- 内存缓存:分布式缓存机制
一级缓存:同一个session的缓存
SqlSession存在缓存的概念
Sql语句session发送,session每次在发送sql语句之前,会先进入其缓存区域查看,是否有相同sql语句的结果集存在
如果存在,就直接从缓存中取数据
如果不存在,才发送sql语句去数据库端取数据
二级缓存:不同session的缓存,SqlSessionFactory的缓存
- 配置二级缓存
- 配置映射支持二级缓存
- 映射类要实现序列化
- 对象序列化:对对象进行压缩,解压缩,方便进行对象的存储(内存—文件)
- 二级缓存经常会被配置在其他地方
- Session被关闭后数据进入二级缓存
核心配置文件解析:
org.apache.ibatis.builder.xml.XMLConfigBuilder
Plugins:拦截器
- 它可以拦截Executor、ParameterHandler、ResultSetHandler、StatementHandler部分方法,处理我们自己的逻辑。Executor就是真正执行sql语句的东西,ParameterHandler是处理 我们传入参数的,ResultSetHandler就是处理返回结果的
- 插件可以改变MyBatis底层的行为,因此功能非常强大
- 采用责任链模式,通过动态代理组织多个拦截器(插件),改变MyBatis的默认行为(如重写sql)
mybatis的基础支撑层
- Loggin
- mybatis自定义了一套logging接口,支持log4j、commons log、java.util.logging、slf4j等日志框架
- org.apache.ibatis.logging中有一个jdbc包,实现jdbc操作以开发者配置的日志框架打印出来,也就是开发中跟踪SQL语句,传入参数,影响行数等调试信息
- IO
- 读取资源文件API
- 封装mybatis自身需要的classLoader和加载顺序
- Refection
- Exception
- 封装成RuntimeException
- 主要被使用的是PersistenceException
- 缓存
- 一级缓存:根据MappedStatement的ID,sql,参数值以及rowBound来构造cachekey,使用localCache来维护
- 二级缓存
- 数据源/连接池
- 滋生提供一个简易连接池,PooledDataSource
- 事务
- 后续主要委托spring进行事务管理
请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php