- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动手改造Ibatis,使其支持文件系统存储数据列之看我如何给ResultMap增加属性--.doc
动手改造Ibatis,使其支持文件系统存储数据列之看我如何给ResultMap增加属性
这篇文章我要介绍的是给rusultMap的xml段中增加节点,具体效果如下:
图片看不清楚?请点击这里查看原图(大图)。
或许你会问为什么要这样做?
首先我来说说key ,key的作用是指定用于生成hash路径所依赖的对象属性.这里要注意的是你指定的这个属性的值必须是唯一的. 而数据库中的id作为主键必须是唯一值,所以我们一般以 id 来生成我们所需的hash路径.
然后来说明下 datasource ,这里的datasource可以有两个选择 file 或者 db 如果是选择file的话 则对应列根据hash路径存储在文件系统中,如果选择db 则存储在数据库中 ,默认是db 可以省略.
明白了以上添加的节点的作用 ,接下来我们来一步步修改程序使之达到我们的目标:
第一步,修改dtd验证文件:
这里必须修改 我在上一篇已经介绍过了,这里不再过多解释.请参考上图.
对SqlMap 进行解析是通过.ibatis.sqlmap.engine.builder.xml.SqlMapParser.java 进行的,这里要说明的是由于我们并没有增加新的node,而是仅仅增加了属性,所以我们仅仅在原有的解析的方法上增加对属性的解析就好了
parser.addNodelet(/sqlMap/resultMap, neespace(attributes.getProperty(id));
String resultClassName = attributes.getProperty(class);
String extended = state.applyNamespace(attributes.getProperty(extends));
String xmlName = attributes.getProperty(xmlName);
String groupBy = attributes.getProperty(groupBy);
//解析key
String key = attributes.getProperty(key);
resultClassName = state.getConfig().getTypeHandlerFactory().resolveAlias(resultClassName);
Class resultClass;
try {
state.getConfig().getErrorContext().setMoreInfo(Check the result class.);
resultClass = Resources.classForName(resultClassName);
} catch (Exception e) {
throeException(Error configuring Result. Could not set ResultClass. Cause: + e, e);
}
ResultMapConfig resultConf = state
.getConfig()
.nelName,key);
state.setResultConfig(resultConf);
}
});
注意代码的最后调用了 neapConfig ,这个也要增加key,像一串,我们只要根据程序一步步跟下去逐步增加key就ok了
当我们跟到下面这个地方的时候key必须有一个归宿,他的归宿就是ResultMap对象
请看下图:
123下一页 这篇文章来自..,。
图片看不清楚?请点击这里查看原图(大图)。
然后我们跳转到ResultMap类,继续看
这里我在ResultMap类中增加了三个属性,key就不用解释了 ,
filehandlerpath其实就是指我一直在说的hash路径.下图展示了生成hash路径的方式.
//生成hash路径
public void setFilehandlerpath(Object key) {
if(key!=null)
{
filehandlerpath = delegate.getBaseDirectory() + this.resultClass.getSimpleName();
String hashk
文档评论(0)