动手改造Ibatis,使其支持文件系统存储数据列 之 源码下载编译和SqlMapConfig解析
本文接上文
http://www.cnblogs.com/suyuan/archive/2009/04/16/1437360.html
从本篇文章开始我将逐步讲解如果通过修改Ibatis源代码实现上述功能,而本篇先介绍Ibatis下载,编译和sqlmapconfig的解析.此处我们使用的是java版本,.net版本请参考本版本.
下载:
Ibatis的官方网站http://ibatis.apache.org/
你可以通过官方网站下载最新的Ibatis源代码.
官方提供的源码中是不含依赖包的.仅仅提供了一份依赖包清单,并且还没有列全.同时官方给的清单中个别包已经升级而老版本下载已经不再提供,我们尽量找和官方提供清单中最接近的版本.否则可能会造成编译不通过.
如果你觉得麻烦,我这里提供了官方所列清单中的依赖包
/Files/suyuan/IbatisNeedlib.rar
下载源代码,并且附加了依赖包后,请注意,ibatis是在jdk1.5环境下面编译的通过,如果你选择的是jdk1.6,请更改设置,否则编译错误.
下面开始动刀了,呵呵
上篇文章中,我们已经介绍了要在sqlmaperconfig文件中增加一个节点
<BaseDirectory resource=”d:/ibatis/”/>
这个节点的作用就是指定文件系统存储根路径.
Ibatis初始化的时候会根据sql-map-2.dtd 和 sql-map-config-2.dtd 验证xml文件是否正确,如果我们之间在sqlmaperconfig 中增加该节点就会初始化出错.
首先我们修改sql-map-config-2.dtd文件
然后还要定义这个节点
完成上面的操作后,在xml中增加我们配置的节点 就不会初始化出错了.
仅仅配置完成后,并不起作用,因为还没有解析,还要增加解析的部分.
Ibatis 对xml的解析 都放在这个package com.ibatis.sqlmap.engine.builder.xml 下面
此处对于sqlmapconfig 解析的类对应的是 SqlMapConfigParser
我们只需要在这个类中增加下面一个方法,并且把这个方法放到 SqlMapConfigParser的构造方法中就可以了.
将这个方法放到构造方法中 其实就是NodeletParser中增加了一个node的处理方法.
注意 这句代码
就是把我们解析到的值赋给了一个对象的一个属性.而这个对象就是SqlMapExecutorDelegate,就是说,我们需要在这个对象中增加一个属性是
private String baseDirectory; SqlMapExecutorDelegate 仿佛一个大管家,一样,以后的改造中,我们会多次使用到该对象.
这里假如我们没有在配置文件中 配置 BaseDirectory 节点, 则默认使用当前目录
baseDirectory = System.getProperty("user.dir");
ok,到现在对于 我们就成功了增加了 BaseDirectory 节点了, 这个配置路径会和以后生成的hash路径组合成我们的文件存储路径.
本文到此结束,其余部分将在下文讲解