Ibatis源码分析

Ibatis的工作流程主要分为两个部分,配置文件解析和数据库操作,下面分别对两部分分别进行分析

[b]一.配置文件解析[/b]

[b]二.数据库操作[/b]


[b]1.先看几个重要的接口定义[/b]

SqlMapTransactionManager接口定义了数据源的获取,数据库链接的获取,事务开启,事务提交,事务结束等方法.
SqlMapExecutor接口定义了一系列的数据库操作方法,如增删改查等.
这两个接口也是最顶端,最核心的接口.

SqlMapSession接口继承了SqlMapExecutor接口和SqlMapTransactionManager接口,并定义了一个close方法,
其实现类是SqlMapSessionImpl,在SqlMapSessionImpl中有两个重要属性SqlMapExecutorDelegate和SessionScope,
且只有三个方法有意义,一是构造方法,二是close方法,三是getCurrentConnection方法,
在其构造方法中需要SqlMapClient参数,其它的事务相关的方法和数据库操作方法,则完全委托SqlMapExecutorDelegate来实现(且传递SessionScope参数).

SqlMapClient接口也继承了SqlMapExecutor接口和SqlMapTransactionManager接口,并定义了openSession等方法,
它的实现类是SqlMapClientImpl,同SqlMapSessionImpl一样有一个SqlMapExecutorDelegate属性,
并在其openSession方法中new了SqlMapSessionImpl,同时开启事务或指定数据库链接.
还有一个重要的方法getLocalSqlMapSession,在此方法中new了SqlMapSessionImpl并保存ThreadLocal中,因此是线程安全的.
而其它的和事务相关的方法及数据库操作方法则调用从getLocalSqlMapSession方法返回的SqlMapSessionImpl执行.

再来看看真正做事情的类SqlMapExecutorDelegate,在此类中,有几个重要的HashMap属性,分别保存从配置文件解析出来的sqlmap-config,
mappedStatements,resultMaps,parameterMaps,还有一个事务管理的TransactionManager和执行数据库操作的sqlExecutor,这两个属性都是在SqlMapClientImpl的构造方法中set的.
在它的数据库操作方法增删改查中,先从mappedStatements获取要执行的sql,再从SessionScope中获取并开始事务,接着调用MappedStatement的excuteXxx方法操作数据库,然后结束事务.

在MappedStatement的excuteXxx方法中,先验证参数validateParameter,然后将参数对象转换为sql参数列表parameterMap.getParameterObjectValues,再调用SqlExecutor对应的方法执行数据库操作,再将数据库操作结果转换为sqlmap对应返回对象.

[b]2.源码分析[/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值