Mybatis 中Mapper使用package方式配置mapper文件 报错
一个初学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.****.net/qq_31457665/article/details/81080304