Mybatis报Type interface *.*Mapper is not known to the MapperRegis

 更新时间:2024年07月30日 10:29:37   作者:成为大佬先秃头  
本文主要介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java根据模板动态生成PDF实例

    java根据模板动态生成PDF实例

    本篇文章主要介绍了java根据模板动态生成PDF实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • java设计模式之外观模式(Facade)

    java设计模式之外观模式(Facade)

    这篇文章主要为大家详细介绍了java设计模式之外观模式Facade的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • spring schedule实现动态配置执行时间

    spring schedule实现动态配置执行时间

    这篇文章主要介绍了spring schedule实现动态配置执行时间,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java使用JDBC动态创建数据表及SQL预处理的方法

    java使用JDBC动态创建数据表及SQL预处理的方法

    这篇文章主要介绍了java使用JDBC动态创建数据表及SQL预处理的方法,涉及JDBC操作数据库的连接、创建表、添加数据、查询等相关实现技巧,需要的朋友可以参考下
    2017-08-08
  • 怎么运行用记事本写的java程序

    怎么运行用记事本写的java程序

    以下小编就为大家介绍一下,怎么运行用记事本写的java程序。需要的朋友可以过来参考下
    2013-08-08
  • 基于Java实现Json文件转换为Excel文件

    基于Java实现Json文件转换为Excel文件

    这篇文章主要为大家详细介绍了如何利用Java实现Json文件转换为Excel文件,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-12-12
  • Java新手教程之ArrayList的基本使用

    Java新手教程之ArrayList的基本使用

    ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,这篇文章主要给大家介绍了关于Java新手教程之ArrayList基本使用的相关资料
    2021-06-06
  • 如何使用hutool做本地缓存的工具类

    如何使用hutool做本地缓存的工具类

    这篇文章主要介绍了如何使用hutool做本地缓存的工具类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • idea中使用maven archetype新建项目时卡住问题解决方案

    idea中使用maven archetype新建项目时卡住问题解决方案

    这篇文章主要介绍了idea中使用maven archetype新建项目时卡住,解决本问题的方法,就是在maven的runner加上参数-DarchetypeCatalog=local就可以了,不需要下载xml文件再放到指定目录,需要的朋友可以参考下
    2023-08-08
  • MyBatis查询无记录时的返回值问题

    MyBatis查询无记录时的返回值问题

    这篇文章主要介绍了MyBatis查询无记录时的返回值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论