您的位置:首页 > 其它

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

2015-11-13 14:24 489 查看
三、主要类源码分析

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属性中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ibatis 源码