MyBatis框架总结

本文深入探讨Mybatis的一级、二级缓存机制,一级缓存在Session级别,二级缓存支持自定义存储源如Ehcache。讲解了全局配置文件结构,包括properties、settings等元素,并解析了数据库环境配置和数据源。还涉及了缓存更新规则和高并发场景下的Redis应用。
摘要由CSDN通过智能技术生成

Mybatis的框架原理:

Mybatis的一级、二级缓存:

(1)一级缓存: 又叫基本缓存,基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。

(2)二级缓存:又叫全局缓存,与一级缓存其机制相同,默认也是采用 PerpetualCache,可以自定义存储源,如Ehcache。默认不打开二级缓存,可在它的映射文件中配置 ;

(3)缓存数据更新机制:当一级缓存Session 或者 二级缓存Namespaces的进行了增、删、改操作后,该作用域下所以查询中的缓存讲会clear掉并重新更新(没有更新的称为“脏数据”);

如果是A计算机进行了增、删、改操作后,B计算机还在使用脏数据的问题,这里就需要用到Redis,能够在高并发场景下为应用提供高效的数据访问能力。

Mybatis全局配置文件:

全局配置文件的类容和顺序
Properties(属性)

Settings(全局参数设置)

typeAliases(类型别名)

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境信息集合)

environment(单个环境信息)

transactionManager(事物)

dataSource(数据源)

mappers(映射器)

常见配置详解

properties标签:

<!--配置mybatis的环境信息-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
        <environment id="prod">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>

解析配置文件:

private void parseConfiguration(XNode root) {
  try {
    // 解析<properties>节点
    propertiesElement(root.evalNode("properties"));
    // 解析<settings>节点
    Properties settings = settingsAsProperties(root.evalNode("settings"));
    loadCustomVfs(settings);
    // 解析<typeAliases>节点
    typeAliasesElement(root.evalNode("typeAliases"));
    // 解析<plugins>节点
    pluginElement(root.evalNode("plugins"));
    // 解析<objectFactory>节点
    objectFactoryElement(root.evalNode("objectFactory"));
    objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
    // 解析<reflectorFactory>节点
    reflectorFactoryElement(root.evalNode("reflectorFactory"));
    settingsElement(settings);
    // 解析<environments>节点
    environmentsElement(root.evalNode("environments"));
    databaseIdProviderElement(root.evalNode("databaseIdProvider"));
    typeHandlerElement(root.evalNode("typeHandlers"));
    // 解析<mappers>节点
    mapperElement(root.evalNode("mappers"));
  } catch (Exception e) {
    throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
  }
}

待续。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值