<sqlMap   namespace="User">  
   
  映射文件的根节点是<sqlMap>。namespace是该<sqlMap>的命名空间,因为SQL   Map映射文件可以有多个,而对于SQL   Map来说所有映射文件都是全局性的。这意味着在SQL   Map中的标识只能是惟一的,利用namespace和标识的全限定名就可以进行区别,前提是,配置文件中的 useStatementNamespaces属性必须设置为true。  
网上的解释是这样的,但我想了解它的工作过程和具体是怎样使用的。
在DAO层调用statement时,怎样确定它是属于哪个namespace之下的呢?
例如有两个sqlMap
<sqlMap  namespace="User">
<sqlMap namespace="branch">
在这两个sqlMap下都有一个id为"getUser"的statement,那么我在一个branchDAOImpl里调用
getSqlMapClientTemplate("getUser");那么怎样确定它是属于<sqlMap  namespace="User">还是<sqlMap namespace="branch">呢?

解决方案 »

  1.   

    楼主有实践过吗?如果useStatementNamespaces=true,调用时必须"XXX.getUser"另外,我记得两个id是不能相同的
      

  2.   

    我是在别人的架构下做开发的,所以对ibatis的处理过程是所模糊的。
    刚才查看过配置文件 useStatementNamespaces="false" ,假若useStatementNamespaces=true 那么应该怎样做呢,
    可否举个例子呢? 
    调用时必须xxx.getUSer是什么意思呢?那个调用是什么时候的调用?
    如果 ID 是不能相同的,那么namespace的意义何在?
    实在是太迷茫了。
      

  3.   

    xxx.getUSer 就是namespace.getUSer
      

  4.   

    niuxinlong 这么说,即是假若namespace="User"    
    调用那时是getSqlMapClientTemplate().queryForList("User.getUser");是不?
    事实上,id 可以相同的,只要不在同一namespace下就可以了,是不?
    有时看文档,自己理解了,但还是有点不太确定自己的理解是否正确,有个人make sure一下,心里会踏实一些。。