org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)总结

    技术2024-07-31  64

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)总结

    今天做ssm项目整合是,遇见了 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的异常,但是奇怪的是在idea中添加单元测试能正常查出结果,代码如下:

    @Test public void Test(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:application-context.xml"); UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper"); UserService userService = (UserService) applicationContext.getBean("userServiceImpl"); UserVo user = new UserVo(); user.setPwd("e10adc3949ba59abbe56e057f20f883e"); user.setLoginname("admin"); User login = userMapper.login(user); User user1 = userMapper.selectByPrimaryKey(1); System.out.println(login.toString()); System.out.println(user1.toString()); System.out.println(userMapper); System.out.println(userService); }

    但是一到页面提交,就报上述错误。百思不得其解。最后发现,还是路径的问题,mapper.xml资源无法找到。

    第一:我们在用单元测试是能找到,并且mapper.xml写在了src目录下,而不是classpath下,我们需要添加:
    <build> <resources> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>

    这样,idea中的maven项目就能读取src目录下的配置文件了。

    第二:我们表单提交数据后,又出现了上述错误。

    为什么测试时能访问到,但是表单提交数据就访问不到呢。

    原因:

    我们时web项目,在运行时已经被打成war包,所以我们更改配置文件后一定要重新生成一下war包,利用maven的攻击clean先清理一下。

    我开始寻找mapper.xml的路径:

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="mapperLocations"> <array> <value>com/ailine/sys/mapping/*Mapper.xml</value> <value>com/ailine/bus/mapping/*Mapper.xml</value> </array> </property> <bean>

    这种情况,在打成war包后,他已经在类路径下了,所以web此路径。写成如下:

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="mapperLocations"> <array> <value>classpath:com/ailine/sys/mapping/*Mapper.xml</value> <value>classpath:com/ailine/bus/mapping/*Mapper.xml</value> </array> </property> <bean>

    完美搞定

    Processed: 0.018, SQL: 9