Mybatis 中Mapper使用package方式配置mapper文件 报错

2022-07-08 12:08:41

一个初学Mybatis的小白,在看视频学习的时候,出现了许许多多的错误......

Mybatis 中Mapper使用package方式配置mapper文件 报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.biless.mybatis.mapper.UserMapper.selectUserById

SqlMapConfig.xml文件的代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                          value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="sqlMap/User.xml"/>-->
        <package name="com.biless.mybatis.mapper"/>
    </mappers>
</configuration>

UserMapper.xml文件的代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="com.biless.mybatis.mapper.UserMapper">
    <select id="selectUserById" parameterType="Integer" resultType="com.biless.mybatis.pojo.User">
        select * from user where id = #{va}
    </select>
</mapper>

UserMapper接口文件的代码:

package com.biless.mybatis.mapper;

import com.biless.mybatis.pojo.User;

public interface UserMapper {
    public User selectUserById(Integer id);
}

UserMapper的接口文件和UserMapper.xml文件是放在同一个目录下面的,运行测试代码:

package com.biless.mybatis.junit;


import com.biless.mybatis.mapper.UserMapper;
import com.biless.mybatis.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MybatiesTest {
    @Test
    public void testDynamicProxy() throws IOException {

        String resource = "SqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.selectUserById(27);
        System.out.println(user);

    }
    
}

运行结果:

     看见报出的错误,百思不得其解,步骤和视频上讲的是一样的,运行结果却是这样的, 很是无奈......

     最后看见了一个网友发的博客,说这个原来是IDEA maven项目默认不会把src下除java文件外的文件打包到classes文件夹下,需要在pom.xml中增加配置

<resources>
        <resource>
          <directory>src/main/java</directory>
          <includes>
            <include>com/biless/mybatis/mapper/UserMapper.xml</include>
          </includes>
        </resource>
</resources>

加上配置文件后。然后在运行测试类,就能成功了!希望可以给遇见相同错误的同学一个解决的方案!

借鉴于https://blog.csdn.net/qq_31457665/article/details/81080304

  • 作者:丶MaGuoGuo
  • 原文链接:https://blog.csdn.net/qq_36343712/article/details/88047086
    更新时间:2022-07-08 12:08:41