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

来源:互联网 发布:域名 授权 编辑:程序博客网 时间:2024/05/24 02:38

    首先通过 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语句

 

原创粉丝点击