- :warning: mybatis使用package方式映射mapper报错
- :point_right:其他映射mapper的方法
- :one:mapper标签使用resource映射
- :two:mapper标签使用class映射
- :three:mapper标签使用url映射
在初学mybatis通过junit测试功能时系统一直报
Mapped Statements collection does not contain value for pers.dhx_.DAO.UserMapper.insertUser
大概意思是mybatis无法找到UserMapper的映射文件
也就是识别UserMapper.xml过程中出问题了
测试的代码如下:
@Test
public void test1() throws Exception{
// 获取核心配置文件的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
// 获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
// 获取Sql 的会话对象 -- > SqlSession , 是mybatis提供操作数据库的核心对象
SqlSession sqlSession = sqlSessionFactory.openSession(true); // 将参数设置为true , 就是开启了自动提交
// 通过sqlSession获取UserMapper的代理实现对象 ,这个方法的底层 用的是代理模式, 实现的Mapper接口的一个代理实现类,重写了接口的方法(通过映射文件)
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
System.out.println(mapper.insertUser());
// sqlSession.commit(); // 提交事务
sqlSession.close(); // 关闭会话
}
- 原本是将UserMapper.xml放在resources目录下
UerMapper.xml
insert into t_user values(null,'admin1','123456',23,'男','12345@qq.com')
后来查阅资料发现错误原因是, 如果使用package标签映射mapper文件 , resources目录和java目录中的 xml文件要与 接口对应
看图就明白了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LaLpEUl-1658302227614)(E:Typoraimageimage-20220720151037375.png)]
教程里面的老师没有说这个 ,但是也应该注意
其他映射mapper的方法 1️⃣mapper标签使用resource映射mybatis-config.xml
- resource
附上resources目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocsQvtaj-1658302227615)(E:Typoraimageimage-20220720151516654.png)]
2️⃣mapper标签使用class映射class 注意要写全类名
需要注意的是这里需要在接口的方法上面写上对应的注解
UserMapper.java
package pers.dhx_.mapper;
import org.apache.ibatis.annotations.Insert;
public interface UserMapper {
@Insert(value = "insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')")
int insertUser();
}
mybatis-config.xml
3️⃣mapper标签使用url映射
其实就是使用绝对路径
- 一般情况下不会使用这种方式,了解即可



