Mybatis报Type interface *.*Mapper is not known to the MapperRegis
问题发现
在学习MyBatis框架的时候,不使用 XML 构建 SqlSessionFactory,调用Mapper的接口,报类型接口没有注册。
示例代码如下:
public class Test {
public static void main(String[] args) throws IOException {
DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/spring_data?characterEncoding=utf-8&useSSL=false", "root", "123456");
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(environment);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectByUser();
// 关闭 SqlSession
sqlSession.close();
}
}
public interface UserMapper {
List<User> selectByUser();
}
<?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">
<mapper namespace="com.example.mybatisstudy.dao.UserMapper">
<select id="selectByUser" resultType="com.example.mybatisstudy.User">
select * from user;
</select>
</mapper>
网上说都是命名空间的错误,发现命名空间也没问题。然后进行一系列的问题排查。
问题解决
方法一:检查Mapper文件的namespace路径是否正确
这也是网上解决方法最多的一种,貌似大部分人都是遇到这种错误。
- 先确认映射的类名是否正确。
- 在确认包路径使用的
.点(com.*.*.Object)而不是/左斜杠(com/*/*/Object)或\右斜杠(com\*\*\Object),如果错误请修改为.点。 - 如果鼠标悬浮到路径上,显示下划线说明配置正确。
如图所示

方法二:使用其他方法是否正确
换一种方法试试,SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。示例代码如下:
public class Test {
public static void main(String[] args) throws IOException {
DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/spring_data?characterEncoding=utf-8&useSSL=false", "root", "123456");
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(environment);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> selectByUser = sqlSession.selectList("selectByUser");
// 关闭 SqlSession
sqlSession.close();
}
}
运行成功,如图所示

然后逐个代码排除,根据错误提示(未注册)发现少了configuration.addMapper()方法的代码,加上后,运行成功。
示例代码如下
public class Test {
public static void main(String[] args) throws IOException {
DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/spring_data?characterEncoding=utf-8&useSSL=false", "root", "123456");
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(environment);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectByUser();
// 关闭 SqlSession
sqlSession.close();
}
}
问题解决。
最开始看官网给的代码片段,以为可以去掉addMapper的步骤,后来才想起不注册的话怎么获取呢?啧~还是太粗心了呀!!!
到此这篇关于Mybatis报Type interface *.*Mapper is not known to the MapperRegis的文章就介绍到这了,更多相关Mybatis报Type interface内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot接口参数校验(Bean Validation)实战指南
在开发接口时,参数校验是必不可少的环节:前端传参是否为空、格式是否正确、数值是否合法,都需要后端严格校验,否则很容易出现脏数据、程序异常,SpringBoot 官方推荐使用 Bean Validation,今天就来介绍一下基础注解、实战使用,需要的朋友可以参考下2026-03-03
Mybatisplus集成springboot完成分页查询功能(示例代码)
今天小编给大家分享Mybatisplus集成springboot完成分页查询功能,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧2023-11-11
Mybatis-plus如何查询返回对象内有List<String>属性
在使用Mybatis-Plus进行开发时,我们经常会遇到需要处理一对多关系映射的情况,例如,查询用户数据时,可能需要同时获取该用户管理的所有小区名称列表,这要求我们在返回的实体类中包含一个List<String>属性,用于存放小区名称,实现这一功能2024-10-10
Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)
Spring Boot 3.4.3 结合Spring WebFlux实现SSE 功能,为实时数据推送提供了优雅的解决方案,通过本文的步骤,你可以快速搭建一个基于事件驱动的后端服务,满足实时通知或监控等需求,感兴趣的朋友一起看看吧2025-04-04
如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发(最新推荐)
本文主要介绍如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接,然后实现远程Linux环境进行开发,感兴趣的朋友跟随小编一起看看吧2024-03-03


最新评论