braint8  
日历
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
统计
  • 随笔 - 0
  • 文章 - 15
  • 评论 - 16
  • 引用 - 0

导航

留言簿(2)

文章分类(15)

文章档案(15)

搜索

  •  

积分与排名

  • 积分 - 17454
  • 排名 - 1882

最新评论

 
四、对于ibatis是在实现类里的操作方法是怎么找到对象对应的映射文件的?
实现类:
  Reader reader = Resources.getResourceAsReader("com/braint/ibatis/SqlMapConfig.xml");
  sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

查询方法:
  roleList = sqlMapClient.queryForList("searchRole",map);
           
SqlMapConfig.xml可配置多个sqlMap
  <sqlMap resource="com/braint/ibatis/Role1.xml"/>  
  <sqlMap resource="com/braint/ibatis/Role.xml"/>
 
这里只有加载SqlMapConfig.xml,操作的时候并不知道到底是调用哪一个,前面一直在研究配置文件的写法和调用,忽视了到底是怎么用的。测试了一个,写了两个sqlMap,就出错。

网络上对于这个问题很少,因为对数是使用与spring结合,使用spring提供的dao模版来操作多个对象对应的映射文件,而且ibatis新版本取消了自己的dao模版(2.0的有)。为了弄清楚这个原理,看了源码,实在太长,看了很久,最终也没看懂。

偶然间看到一个<sqlMap namespace="">节点有个namespace属性,心想是否是利用这个值找对应的映射文件?
于是在Role.xml中配置<sqlMap namespace="Role">,执行,依旧报错。。。
再SqlMapConfig.xml配置<settings useStatementNamespaces="true"/>,执行,还是错。。。
但是这次报错不一样了,提示There is no statement named searchRole in this SqlMap.按提示应该是直接在SqlMapConfig.xml这里找searchRole方法。
由此提示想到了实现类里的方法改为sqlMapClient.queryForList("Role.searchRole");正常了。。。

总结:
①配置SqlMapConfig.xml配置<settings useStatementNamespaces="true"/>
②Role.xml中配置<sqlMap namespace="Role">
③实现类调用sqlMapClient.queryForList("Role.searchRole")
#如果配置为<sqlMap namespace="RoleSpace">,实现类也要改为sqlMapClient.queryForList("RoleSpace.searchRole")
不知道ibatis的这样用法是不是基本没人用了,网络上查了很多资料都没有,但最终还是解决问题。
使用spring的模版应该会更简单,就跟hibernate的模版一样吧,不过现在还没和spring结合不清楚。
posted on 2009-08-29 23:33 情晚风 阅读(530) 评论(0)  编辑  收藏 所属分类: ibatis学习过程
 
Copyright © 情晚风 Powered by: 博客园 模板提供:沪江博客