mybatis之XML解析源码分析
来源:互联网 发布:淘宝香港高登iphone 编辑:程序博客网 时间:2024/06/05 07:22
一直想知道mybatis是如何解析xml文件的,今天认真看了下源码,这里记录一下
这里是用mybatis-spring的SqlSessionFactoryBean当作的入口,mybatis-spring其实很简单,源码也就几个看看就懂了,代理了一下而已没啥东东.
1.解析spring的配置
不过很多参数都是spring中来处理了,所以mybatis-spring没有先parse而是先加载了配置文件
依次是
- typeAliasesPackage
- typeAliases
- Plugins
- typeHandlersPackage
- typeHandlers
typeAliases
相当于加载了上面的typeAliases,plugins,typeHandlers
然后typeAliases put到TYPE_ALIASES供查询时调用类型转换
Plugins
拦截器也private final List<Interceptor> interceptors = new ArrayList<Interceptor>();
这里用的ArrayList所以是自顶向下按照顺序执行的
typeHandlers
Typehandler 也是put到private final Map<Class<?>, Map<JdbcType, TypeHandler>> TYPE_HANDLER_MAP = new
HashMap<Class<?>, Map<JdbcType, TypeHandler>>();到时候使用
2.解析我们自己配置的configLocation.xml
解析的内容,内容和前面已经后面雷同这里就不多说了
3.生成环境变量,貌似作用不大-因为都被spring接管了哈
4.解析sql文件!重点来了
依次是命名空间,缓存,parameterMap貌似没啥用了这个,resultMap重点,复用sql,执行sql
命名空间就不说了
4.1缓存创建
缓存是根据命名空间来做的,每个命名空间new一个缓存
cache中mybatis也比较简单先用map实现一个PerpetualCache,然后用装饰器模式,弄一堆缓存,包括LRU,Fifo,Scheduled等带有附加功能的缓存,其实调用的还是PerpetualCache,默认的是LRU,说一下LRU实现及其简单,是用的LinkedHashMap访问排序功能,简易实现了,然后后面的sql就会调用了,这里显示下cacheKey的生成
用了很多条件确保了key的唯一性
4.2resultMap
4.2.1解析一下简单参数
4.2.1ResultMapping 其实就是我们写的result的java对象
然后解析xml把值配置到对象中
4.2.4这些参数以及这个list组合成为一个resultMap
4.3重复的sql
这个简单直接put到
4.4执行sql
首先是设置一堆属性
通过一系列的hanlder把动态xml解析
然后拼装成为
这个对象是及其重要的,基本上包含了一个sql的所有信息,之后查询的时候就可以根据这个信息来进行反射set对象了
到这里mybatis也基本上初始化完成了
- mybatis之XML解析源码分析
- mybatis---源码分析----xml解析----XNode
- mybatis源码之解析xml文件
- Mybatis源码分析 之 sql解析
- Duilib 源码分析之 xml 解析篇
- Mybatis 源码解析(二) - Configuration.xml解析
- mybatis源码学习之执行过程分析(2)——config.xml配置文件和mapper.xml映射文件解析过程
- Mybatis之XML配置文件解析
- MyBatis源码解析之JdbcType
- Mybatis 源码解析(一) - Configuration.xml加载
- mybatis--源码解读---XML的解析
- spring、mybatis加载xml源码解析
- Mybatis源码分析之缓存
- Mybatis源码分析 之 Configration
- MyBatis源码分析:如何解析配置文件
- 【mybatis源码分析】原理分析之三:初始化(配置文件读取和解析)
- Spring源码之XML解析
- Mybatis源码分析之执行完整分析
- poj1195 Mobile phones 二维树状数组
- ubuntu14.10 安装问题
- 试试看
- ThinkPad t440p 左侧滋滋滋滋响
- day03-Dao数据访问对象
- mybatis之XML解析源码分析
- spring中的解耦
- 【PreparedStatement的setObject的作用和setString的作用是一样的!】
- 【PreparedStatement的setObject的作用和setString的作用是一样的!】
- 【PreparedStatement的setObject的作用和setString的作用是一样的!】
- Andoird Apps Reverse Engineering IV: DEX - Dalvik VM excutes
- Swing的异步
- commons-exec的输出
- 24个基本指标