【问题标题】:Mybatis Invalid bound statement (not found)Mybatis 无效绑定语句(未找到)
【发布时间】:2017-11-01 11:10:00
【问题描述】:

环境: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 中有一个初始化监听器:

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 的命名空间:

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

当我运行tomcat时,发生错误

Mybatis Invalid bound statement (not found)

谁能救我!

【问题讨论】:

标签: java maven mybatis


【解决方案1】:

在Mybatis中如果你以getMapper(YourMapper.class)addMapper(YourMapper.class)之类的方式添加映射器,则需要将相对的YourMapper.xml留在同一个源码包中。

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

所以在pom.xml 文件的&lt;build&gt; 部分中应该是这样的:

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

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

【讨论】:

    【解决方案2】:

    谷歌搜索MapperScannerConfigurer 时的第一个结果导致documentation 声明:

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

    而您的包裹用空格隔开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 2016-07-30
      • 2013-01-28
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      相关资源
      最近更新 更多