Mybatis无效的绑定语句(未找到)

时间:2017-05-31 15:03:16

标签: java maven mybatis

环境:maven,spring 4.2.4-RELEASE,2个模块:zscb-server zscb-common和zscb-server依赖于zscb-common

我的web.xml核心代码:

  <listener>
    <listener-class>com.iidooo.core.listener.RoleResourceInitListener</listener-class>
  </listener>

我的模块zscb-common中有一个init监听器:

RoleResourceInitListener核心代码:

 public void contextInitialized(ServletContextEvent arg0) {
        try {
            ServletContext sc = arg0.getServletContext();
            SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) SpringUtil.getBean(sc, "sqlSessionFactory");

            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            SecurityRoleMapper roleMapper = sqlSession.getMapper(SecurityRoleMapper.class);
            List<SecurityRole> roleList = roleMapper.selectAll();

            // key: roleID value:List<SecurityResource>
            Map<Integer, List<SecurityResource>> roleResourceMap = new HashMap<Integer, List<SecurityResource>>();
            for (SecurityRole item : roleList) {
                roleResourceMap.put(item.getRoleID(), item.getResourceList());
            }
            sc.setAttribute(ServletConstant.ROLE_RESOURCE_MAP, roleResourceMap);
        } catch (Exception e) {
            e.printStackTrace();
            logger.fatal(e);
        }
    }

我的applicationContext.xml:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.iidooo.core.mapper com.edo.zscb.mapper" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

我已经检查了我的mapper.xml的namepsace:

<mapper namespace="com.iidooo.core.mapper.SecurityRoleMapper">

当我运行tomcat时,出现错误

Mybatis Invalid bound statement (not found)
谁能救我!

2 个答案:

答案 0 :(得分:0)

Google搜索MapperScannerConfigurer时的第一个结果会导致documentation说明:

  

basePackage属性可以包含多个包名,   用逗号或分号分隔。

当您的包裹被空格隔开时。

答案 1 :(得分:0)

在Mybatis中,如果您以getMapper(YourMapper.class)addMapper(YourMapper.class)之类的方式添加映射器,则必须将相对的YourMapper.xml留在同一源程序包中。

在Maven中,还必须将xml文件作为资源包括在内,并且它们必须与生成的.class文件位于同一位置。

因此,在<build>文件的pom.xml部分中将发生以下情况:

        ...
        <resources>
           <resource>
              <filtering>false</filtering>
              <directory>src</directory>
              <includes>
                <include>**/package_path/to/your/*.xml</include>
              </includes>
           </resource>
        </resources>
       ...
   </build>

使用此配置,maven将.xml文件保留在与源树相同的位置。