MyBatis操作流程解析

## mybatis 操作流程

 

1. 根据配置文件名称获取流 inputStream | reader

2. SqlSessionFactoryBuilder 对象根据 inputStream | reader、环境 id 字符串、属性变量构建 SqlSessionFactory 对象

4. SqlSessionFactory 对象开启会话连接 SqlSession

5. SqlSession 会话对象获取 Mapper 对象,直接调用成员方法完成增删改查

 

## mybatis 解析配置文件流程

 

1. 根据 inputStream、environment、properties 生成 XMLConfigBuilder 对象

 

```

XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);

```

 

2. XMLConfigBuilder 对象执行解析`parse()` 方法`parser.parse()`获得 Configuration 对象

 

- 通过 XPath 解析文档获取 configuration 根节点

 

```

parseConfiguration(parser.evalNode("/configuration"));

```

 

- 解析 properties 节点信息 `propertiesElement(root.evalNode("properties"));`

 

    1. properties 属性 resource 指定项目根节点下的属性文件

    2. properties 属性 url 指定外部地址下的属性文档

    3. properties 子元素 property 配置属性键值对

 

> 注意:resource 和 url 不能同时存在,resource 与 url 中属性变量优先级高于子元素属性键值对,最高优先级的是构建 XMLConfigBuilder 对象时传入的 properties(直接存储在)configuration 对象的 variables 属性中

 

- 解析 settings 节点信息

 

- 解析 typeAliases 节点信息 `typeAliasesElement(root.evalNode("typeAliases"));`

 

    1. package 子标签指定需要别名管理的类所在的包路径(此处没有指定每一个类的别名),其每一个类的别名为 Alias 注解标识的名称或者简单类名

    2. typeAlias 子标签指定某一类名和其别名(如果没有指定类别名,同上一样为 Alias 注解标识别名或简单类名)

 

- 解析 plugins 节点信息`pluginElement(root.evalNode("plugins"));`

 

    1. 通过子标签 plugin 的 intercept 属性设置插件的类名(类别名,若为类别名会去别名注册中心去寻找类名)

 

- 设置 settings 信息 `settingsElement(settings);`, 其中预设了 mybatis 中的诸多配置,若 setting 节点有配置信息,将进行覆盖

 

- 解析 environments 节点信息 `environmentsElement(root.evalNode("environments"));`

 

    1. 优先检查是否在构建 XMLConfigBuilder 时是否指定环境 id,属性 default 不再生效

    2. 遍历子节点,匹配指定环境 id,并构建 Environment 对象,添加到 Configuration 对象中

 

- 解析 typeHandlers 节点信息 `typeHandlerElement(root.evalNode("typeHandlers"));`,用来处理特殊的 Java 数据类型与数据库中数据类型的转换,mybatis 在此过程中已经预设了很多类型处理,例如String、8大包装类及相应的数组类型、8大基础类型以及相应的数组类型、相应的集合类型、相应的时间类型等...

 

    1. 添加类型处理器时,子标签中 handler 属性指定类型处理器的全类名(类别名)

    2. 指定类型处理器要处理的 Java 类型,有两种方式(1. 子标签的 javaType 属性,2. 在类型处理器上定义 MappedTypes 注解)

    3. 指定类型处理器要出列的数据库类型,有两种方式(1. 子标签的 jdbcType 属性,2. 在类型处理器上定义 MappedJdbcTypes 注解)

 

- 解析 mappers 节点信息 `mapperElement(root.evalNode("mappers"));`

 

    1. package 子标签,扫描指定包下的 Mapper

    2. mapper 子标签的 resource 属性

    3. mapper 子标签的 url 属性

    4. mapper 子标签的 class 属性

 

> 注意:resource、url、class 在一个子标签中不能同时存在,也不能一个也没有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值