[知了堂学习笔记]_myBatis_04知识梳理

mybatis中文api:
http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
配置文件详解

  • 核心配置文件
    • 数据库环境:数据源/事务管理
    • Mapeer映射引入
    • configuration 配置
      • properties 属性
      • settings 设置
      • typerAllases 类型命名
      • typeHandlers 类型处理器
      • objectFactory 对象工厂
      • plugins 插件
      • environments 环境
        • environment 环境变量
          • transactionManager 事务管理器
          • dataSource 数据源
      • 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值