zoukankan      html  css  js  c++  java
  • nvalid bound statement (not found)

    问题详情:

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.coocaa.test.mapper.UserMapper.add
        at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
        at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
        at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
        at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
        at com.sun.proxy.$Proxy13.add(Unknown Source)
        at com.coocaa.test.service.UserService.getUser(UserService.java:24)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

    源代码: 
    userMapper.java

    package com.coocaa.test.mapper;
    
    import com.coocaa.test.models.User;
    
    import java.util.List;
    public interface UserMapper {
       public List<User> findAll();
    
       public void add(User user);
    }

    userMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//com.coocaa.test.mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.coocaa.test.mapper.UserMapper" >
        <resultMap id="baseResultMap" type="com.coocaa.test.models.User">
            <result column="u_id" property="uId"/>
            <result column="name" property="name"/>
            <result column="age" property="age"/>
        </resultMap>
        <select id="findAll" resultMap="baseResultMap">
        SELECT * from user
        </select>
        <insert id="add" parameterType="com.coocaa.test.models.User" keyProperty="id" useGeneratedKeys="true">
            insert user (name,age) values(#{name},#{age})
        </insert>
    </mapper>
    

    可以看到这两个文件的映射是没有任何问题的,但是为什么会说add方法找不到呢? 
    我又去仔细确认了spring配置文件里注册映射文件的的配置,路径好像也是没有问题的

       <!-- 配置myBatis sqlSeesionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <property name="mapperLocations"
                      value="classpath*:com/coocaa/test/mybatis/*Mapper.xml" />
        </bean>

    但是实际上是有问题的,项目在构建的时候只会默认的去加载resource资源文件里面的资源,其他地方的不会加载 
    这里写图片描述 
    哈哈,发现问题了吧,target目录下面是没有mybatis目录的。 
    这样就有两种解决方法了 
    1.将mybatis的xml文件全部放在resource下面 
    再修改spring配置文件里面的路径 
    2.需要在pom加一个resources的资源加载列表

     <build>
          <!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->
          <resources>
              <resource>
            <!--   描述存放资源的目录,该路径相对POM路径-->
                  <directory>src/main/java</directory>
                  <includes>
                      <include>**/*.xml</include>
                  </includes>
              </resource>
          </resources>
      </build>

    这个时候,再次运行项目,就可以看到target目录下面存在mybatis的xml文件了 
    以后如果是要将其他资源文件也放在src目录下面,就需要注意喽,也是需要在pom里面配置的

    来源:https://blog.csdn.net/zmj1049933053/article/details/50587109

  • 相关阅读:
    Numpy随机数组的创建
    python map()
    LeetCode回溯系列(1)——第17题解法
    LeetCode回溯系列(0)——回溯算法讲解
    LeetCode位操作系列(1)——位操作在第190题中的运用
    LeetCode位操作系列(0)——位操作奇技淫巧之原理加实践
    python PIL 图像处理库简介
    plt.plot()的使用方法以及参数介绍
    关于.split()和os.sep的联合应用
    【mac清理】慎用CleanMyMac X
  • 原文地址:https://www.cnblogs.com/kongxc/p/8908648.html
Copyright © 2011-2022 走看看