iBatis的更新语句执行过程分析。

    首先通过 SqlMapClientBuilder.buildSqlMapClient(reader);得到sqlMapClientImpl实例,然后调用自身的update(String id, Object param),它调用SqlMapSessionImpl的update(id, param),然后它调用delegate的update(sessionScope, id, param)方法,通过参数id得到delegate中的statement,然后调用statement的executeUpdate(StatementScope statementScope, Transaction trans, Object parameterObject)。在这个方面里面有一些关键逻辑需要陈述。

   (1)  Sql sql = getSql();//得到的sql为StaticSql,SimpleDynamicSql或DynamicSql

   (2)  调用sql的getParameterMap得到parameterMap实例

   (3)  调用sql的getResultMap的得到resultMap实例

   (4)  我们把入参对象解析成入参数组,供设置到ps中

         Object[] parameters = parameterMap.getParameterObjectValues(statementScope, parameterObject);

   (5)  从sql对象解析成真正的sql语句

         String sqlString = sql.getSql(statementScope, parameterObject);

          //如果原来sql中含有#,则一律转换成?

          //如果原来sql中含有$,则直接用值进行替换

          //如果是动态sql,则根据参数情况,转换成最终运行时的sql

    (6) 然后执行sqlExecuteUpdate(statementScope, trans.getConnection(), sqlString, parameters);

         它调用sqlMapClient的getSqlExecutor,然后sqlMapClient再调用delegate的getSqlExecutor得到最终的数据库执行工具类

         SqlExecutor

    (7) 在sqlExecutor的sqlExecuteUpdate方法里,statementScope.getParameterMap().setParameters(statementScope, ps,parameters);对ps进行设置入参,最后执行sql语句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值