解决org.apache.ibatis.builder.BuilderException: Invaild bound statement(not found)的方法

本文记录了在整合Spring、SpringMVC和Mybatis(SSM)时遇到的数据获取问题及解决方案。主要问题包括:Mybatis的BuilderException错误,以及Spring无法从数据库取数据。解决方法涉及检查Mapper.xml的namespace、resultType配置,以及调整Springcontext.xml中的Mapper资源配置。通过单元测试验证了修复后的Spring和Mybatis都能正常从数据库获取数据。

问题描述

在做SSM整合的时候,发现问题如下:

org.apache.ibatis.builder.BuilderException: Invaild bound statement(not found)

在这里插入图片描述

解决方法

解决方法如下:
1、检查Mybatis的Mapper.xml文件中namespace是否是对应接口;
2、mapper.xml中的resultType路径是否是对应实体类;
3、检查mybatisconfig.xml的mybatis主配置文件;
以上是Mybatis可能出现的问题。


但是在SSM整合的时候还有可能出现如下问题:
Mybatis测试,可以从数据库中取数据出来,但是Spring不能取到数据,那么这时候就需要检查配置文件Springcontext.xml。
将Mabatis的配置文件中

<mappers>
<!--
将这个标签中的配置转移到spring中
原来我是在mybatis.xml中配置Mapper.xml
出现报错
-->

<mapper resource="mapping/UserDao.xml"/>

</mappers>

springcongtext.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 将如下两行按照自己的项目添加进入即可-->
        <property name="mapperLocations" value="classpath*:/mapping/**/*.xml"/>
        <property name="configLocation" value="classpath:/Mybatis-config.xml"></property>
    </bean>
    

单元测试代码

//测试spring能否从数据库取到数据
@Test
    public void testSpring(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
ac.getBean(UserServiceImpl.class);
        UserServiceImpl userService = (UserServiceImpl)ac.getBean(UserService.class);
        List<User> all = userService.findAllUser();
        for(User user : all){
            System.out.println(user);
        }
    }

//测试mybatis能否从数据库取到数据
@Test
    public void testMybatisselect() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("Mybatis-config.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(resourceAsStream);
        SqlSession session = factory.openSession(true);

        UserDao mapper = session.getMapper(UserDao.class);
        List<User> all = mapper.findAllUser();
        for (User user : all) {
            System.out.println(user);
        }
    }

总结

以上就是对本次的问题做个记录,经过自己大量地检索和询问他人,最终解决了这个问题,供大家参考和自己记录。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值