ibatis源码分析—配置文件解析(2)

三、主要类源码分析

1、SqlMapConfigParser

       解析XML文件之前,先生成了SqlMapConfigParser对象的实例。

   SqlMapConfigParser configParser = new SqlMapConfigParser();

   查看该对象的构造方法,其中的主要操作:

   a、生成了SqlMapExecutorDelegate对象的实例,该对象从名字可以看出是个代理类,以后ibatis对事务和增删改查的操作,都要通过此类进行       处理。

   b、registerDefaultTypeAliases(),该方法是通过Alias别名的方式,定义了一些以后用到的对象。

   c、addSqlMapConfigNodelets()。sqlmapconfig根节点。sqlMapConfig标签。

      addSettingsNodelets()。sqlmapconfig二级节点,settings标签。可以设置session、request大小等参数。

      addTransactionManagerNodelets()。sqlmapconfig二级节点,transactionManager标签。设置事务。

      addSqlMapNodelets()。sqlmapconfig二级节点,sqlMap标签。通过resource或者url属性设置sqlmap文件路径。

      这些方法的目的是将ibatis配置文件中所有可能出现的配置路径保存到NodeletParser中的letMap实例对象里。当NodeletParser递归解析到这层节点时,path路径与letMap中的key匹配,就调用add方法中的匿名内部类的process()方法处理该节点。

2、NodeletParser

  a、createDocument(Readerreader)。该方法采用JAXP的DOM接口解析XML,将整个XML文件读取到内存中,并且以树形结构保存。

  b、process(Nodenode, Pathpath)。逐层对Ducument对象进行解析,每解析一层就在path中增加一层路径。

  c、processNodelet(Nodenode, StringpathString)。通过pathString获取当前解析的路径,判断该路径是否在letmap中。如果在说明该节点为XML规定节点,需要对该节点进行继续操作。操作时调用addXXXXXNodeletes()方法中的process()方法处理。

3、SqlMapParser

  a、当解析到的节点path路径为/sqlMapConfig/sqlMap时,说明该节点为ibatis的sqlmap文件。此时需要调用SqlMapParser类对该节点继续解析。

  b、addSqlMapNodelets()。sqlmap文件根节点。

     addSqlNodelets()。sqlmap文件二级节点,sql标签。 

     addTypeAliasNodelets()。sqlmap文件二级节点,typeAlias标签。

     addCacheModelNodelets()。sqlmap文件二级节点,cacheModel标签。用来解析缓存。

     addParameterMapNodelets()。sqlmap文件二级节点,parameterMap标签。用来设置入参,一般调用存储过程时会使用。该对象最终会保存在SqlMapExecutorDelegate类的parameterMaps对象中,key为id,value为对象。

     addResultMapNodelets()。sqlmap 文件二级节点,resultMap标签。设置sql返回的结果集。该对象最终会保存在SqlMapExecutorDelegate类的resultMaps对象中,key为id,value为对象。

     addStatementNodelets()。sqlmap文件二级节点,insert、update、delete、select标签。

  c、通过NodeletParser类进行处理。

4、SqlStatementParser

  a、parseGeneralStatement(Node node, GeneralStatement statement)。负责具体解析insert、update、delete、select标签。将当前状态标签的入参解析后保存到statement对象的ParameterMap或ParameterClass中,取决于入参是以类的形式还是以map形式传入。将当前状态标签的返回结果解析后保存到ResultMap中。

  b、processSqlStatement(Node n, GeneralStatement statement)。负责解析状态标签中的sql语句,并且保存到statement对象的sql属性中。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值