本帖最后由 cmk_ke 于 2010-01-13 17:57:20 编辑

解决方案 »

  1.   

    两个结果如果是一样的,那我相信没多大差别
    为什么queryForList("product.getAllProduct");和queryForList("getAllProduct");一样,我想只有当工程中存在唯一个getAllProduct方法才能用第二种调.而第一种就不同了,带了包名.
    ibatis不是很了解...
      

  2.   

    但是我用第一种不报异常,第二种就报异常,说找不到这个product.getAllProduct
      

  3.   

    我以为你得到结果是一样的,呵呵,那你getAllProduct方法是写在那里啊.
      

  4.   

    一个加了命名空间
    一个没加
    配置了useStatementNamespaces="true" ,应加命名空间
      

  5.   

    呵呵,就是楼上说的:命名空间.在我们写SQL Map文件时,如下行<sqlMap namespace="User">基本上我们是按照每个表一个命名空间(namespace)的。在这个命名空间内有如下的SQLID行 <select id="getUserById" parameterClass="java.lang.Integer" resultClass="user">
      <![CDATA[
       SELECT id, username, password FROM users WHERE id = #id#
      ]]>
     </select>请注意这里的 id="getUserById" 在同一个命名空间中是不允许重复的,那么也就意味着在不同的命名空间中是允许重复的。通常状况下在DAO中我们这么引用smc.queryForList("getUserById");这一行中的getUserById就是SQLMap中的getUserById。如果SQLMap中不同命名空间中出现了重复的ID我们怎么用?我们可以这么用smc.queryForList("User.getUserById");也就是在getUeserById前加上我们需要的命名空间即可正确的访问我们期望的SQL。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bukebushuo/archive/2008/06/06/2517010.aspx
      

  6.   

    实际调用的时候,sql的名字分2部分,也就是
    <sqlMap的namespace>.<各个bean中的id>在ibatis的sql-map.xml里面,
    有个参数是定义是否必须使用全名来调用标签的,
    好像叫“enhancementEnabled”
    默认的是false,也就是不用<sqlMap的namespace>,
    而直接用id的值就可以。但是因为大项目可能有id重复的情况,
    所以建议设置成true,就是用全限定名来访问lz自己翻翻资料吧good luck
      

  7.   

    List<Product> listProduct = getSqlMapClientTemplate().queryForList(
                    "getAllProduct");
    但是我在网上看到这样写也可以 
    Java code
    List<Product> listProduct = getSqlMapClientTemplate().queryForList(
                    "product.getAllProduct");;
    useStatementNamespaces="false"   
    seStatementNamespaces="false"   
            是否使用Statement命名空间。   
            这里的命名空间指的是映射文件中, sqlMap节点  
            的namespace属性,如在上例中针对t_user  
            表的映射文件sqlMap节点:   
            <sqlMap namespace="User">   
            这里,指定了此sqlMap节点下定义的操作均从  
            属于"User"命名空间。   
            在useStatementNamespaces="true"的情  
            况下,Statement调用需追加命名空间,如:  
            sqlMap.update("User.updateUser",user);   
            否则直接通过Statement名称调用即可,如:   
            sqlMap.update("updateUser",user);   
            但请注意此时需要保证所有映射文件中,  
            Statement定义无重名。