【bug日记】已解决:Invalid bound statement (not found): 找不到对应的Mapper映射类

news2025/1/13 10:34:35

急着解决问题的哥们直接用目录跳到下文哈 我放传送门了

目录

试错

尝试过确认的东西:

最终解决方案!已经完美解决:

只需要在你配置数据源的地方:

更改为:        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();

已确认 所有失效的方法全部恢复!

如果解决了 麻烦给个免费的三连!


一个悲伤的故事

本来是想用Springboot3整合MyBatisPlus 做一波数据处理层的简化 也就是不用再写sql语句 直接使用IService封装好的方法 做简单的curd

本来用的好好的  在一次业务迭代中 需要对复杂嵌套的json对象进行curd  

灵机一动 反手写个类型处理器吧 JSONTypeHandler  然后再把类型处理器在Data的实体类当中映射出来

然后就有了

public class JSONTypeHandler extends BaseTypeHandler<JSONObject> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter.toString());
    }

    @Override
    public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return JSONUtil.parseObj(rs.getString(columnName));
    }

    @Override
    public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return JSONUtil.parseObj(rs.getString(columnIndex));
    }

    @Override
    public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return JSONUtil.parseObj(cs.getString(columnIndex));
    }
}

好了 为了让MyBatisPlus识别到 我写的类型处理器  要加上对应配置文件

<configuration>
    <!-- 其他配置项 -->

    <typeHandlers>
        <!-- 注册自定义的类型处理器 -->
        <typeHandler handler="TopOne.utils.Handler.JSONTypeHandler"/>
    </typeHandlers>
</configuration>

问题就出现了 除了这个 映射了json类型的查询可以curd以外  其他所有原生态的封装好的方法全部都不能用了!!!

 可能你还不明白具体是什么概念

我们看到 这个Mapper 明明是继承BaseMapper对吧?  

我们再来看看BaseMapper里面有啥!进去看!

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteById(T entity);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<?> idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

    default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {
        List<T> list = this.selectList(queryWrapper);
        if (list.size() == 1) {
            return list.get(0);
        } else if (list.size() > 1) {
            throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());
        } else {
            return null;
        }
    }

    default boolean exists(Wrapper<T> queryWrapper) {
        Long count = this.selectCount(queryWrapper);
        return null != count && count > 0L;
    }

    Long selectCount(@Param("ew") Wrapper<T> queryWrapper);

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

    <P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);

    <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}

这是完整的BaseMapper  看清楚那个报错说的什么Invalid bound statement (not found): TopOne.ListenerSystem.mapper.ListenerMapper.selectList  找不到selectList 方法!!!

学过Java都知道 一个子类继承他的父类 使用他父类的方法不是理所当然的吗?

这个BaseMapper的selectList 方法就好端端摆在那里   他就是用不了!说找不到! 你想一下气不气人?  不止是selectList 方法  而是那里面所有封装好的方法  就摆在那 他就是用不了!

你说他是不是有病呢?

我啥配置也没动 就加了个类型处理器 他就搁着理发店

吐槽到此为止


试错

尝试过确认的东西:

1.ScannerMapper 扫描到了对应的Mapper 

2.配置文件 路径正确

3.xml文件路径正确并无语法错误

4.别名扫描包确认路径无误

5.使用最新的MyBatisPlus版本

6.能用的法子都用了...

最终解决方案!已经完美解决:

在你确认了我上面的所有待确认点无误后

可以尝试  在

MybatisConfig中

注意看这个地方

@Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("mybatis-config.xml"));
        return sessionFactory.getObject();
    }

只需要在你配置数据源的地方:

        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();

更改为:
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();

已确认 所有失效的方法全部恢复!

如果解决了 麻烦给个免费的三连!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcWing 1024. 装箱问题

解题思路 相关代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner new Scanner(System.in);int v scanner.nextInt();int n scanner.nextInt();int a[] new int[n1];for(int i1;i<n;i) a[i]scanner.nextInt();…

【金九银十】,架构师花费近一年时间整理出来的安卓核心知识

面试经历 主要是根据回忆总结的&#xff08;会有遗漏点&#xff09;。 1. 腾讯&#xff08;QQ音乐&#xff09; 腾讯面试涉及到的范围也很广&#xff0c;甚至问到了C、Kotlin Flutter &#xff0c;也具有一定挑战性的&#xff0c;以下包括腾讯腾讯安卓客户端三面&#xff0c…

k8s-控制器

概述 控制器是什么 控制器是 k8s 内置的管理工具。可以帮助用户实现 Pod 的自动部署、自维护、扩容、滚动更新等功能的自动化程序 为什么要使用控制器 有大量 Pod 需要维护管理需要维护 Pod 的健康状态控制器可以像机器人一样可以替用户完成维护管理的工作 Deployment 控制…

2.14ALU,存储系统

IR存放当下欲执行的指令&#xff1b;PC存放下一条指令的地址&#xff1b; MAR存放欲访问的存储单元地址&#xff1b;MDR存放从存储单元取来的数据&#xff01; 地址译码器是主存的构成部分&#xff0c;不属于CPU&#xff1b;地址寄存器虽然一般属于主存&#xff0c;但是现代计…

如何从 WordPress 中的静态资源中删除查询字符串

今天有一个客户来问询&#xff0c;hostease主机创建的WordPress站点&#xff0c;在GTMetrix或Pingdom进行网站速度测试&#xff0c;看到有关查询字符串的警告。如果不想看到查询字符串的警告&#xff0c;要如何处理呢?我们测试&#xff0c;可以通过一些处理满足这个需求。我们…

瑞数4.0某房地产_瑞数补环境

文章目录 前言目标网站瑞数简介整体流程1.找到cookie的生成位置2.网站分析逆向流程分析补环境 结果结语 前言 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果…

Electron-builder打包安装包——编译篇

突然有一天想打包个桌面程序&#xff0c;没有打包过&#xff0c;经过九牛二虎之力终于打包出来&#xff0c;在此感谢那些热于分享的前辈&#xff01; 本篇只讲打包运行和出现的问题 一、准备工作&#xff1a;提前下载相关资源包&#xff0c;否则在国内环境下可能因为网络问题…

POS 之 验证者队列

前文回顾 ETH网络的权益证明 什么是验证者队列 以太坊的进入和退出队列是等待开始质押或取消质押的验证者。网络对每个 epoch 可以处理的验证器数量有速率限制&#xff08;称为 Churn(流失)&#xff09;。如果尝试进入或退出的验证器数量超过了可处理的数量&#xff0c;那么它…

HTTPS如何保证数据传输的安全性 以及CA签发证书验签

暴力输出&#xff1a; 越看会越深入&#xff0c;睡前难以想通&#xff0c;后深入研究。得之。 有问题 请留言。 ----------追求内心的富足与平和。日行一善。 亓苏姑娘

学习计算天数

学习计算天数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 输入y和m两个整数&#xff0c;y表示年份&#xff0c;m表示月份&#xff0c;计算y年m月有多少天&#xff0c;并输出天数。 测试1&#xff1a; 输⼊&…

字节跳动热门的前端开源项目

字节跳动开源官网 Arco Dsign Arco Design 是一套设计系统&#xff0c;主要服务于字节跳动旗下中后台产品的体验设计和技术实现。它的目标在于帮助设计师与开发者解放双手、提升工作效率&#xff0c;并高质量地打造符合业务规范的中后台应用。它拥有系统的设计规范和资源&…

Ubantu 18.04 如何映射IP到公网,外网可以访问

介绍一种简单的方式&#xff0c;就是通过路由侠 inux 系统安装路由侠&#xff0c;可通过两种方式进行&#xff0c;一种是通过直接脚本安装&#xff0c;一种是通过 Docker 安装。 windows下载地址&#xff1a;路由侠-局域网变公网 方式一&#xff1a;通过脚本安装 1、获取安…

2024金三银四必看前端面试题!简答版精品!

文章目录 导文面试题 导文 2024金三银四必看前端面试题&#xff01;2w字精品&#xff01;简答版 金三银四黄金期来了 想要跳槽的小伙伴快来看啊 面试题 基于您给出的方向&#xff0c;我将为您生成20个面试题和答案。请注意&#xff0c;由于面试题的答案可能因个人经验和理解而…

一文全懂,Android面试送分题

第一面 面试官看起来很年轻&#xff0c;感觉是一个刚毕业不久的小伙汁&#xff0c;声音很青涩哈哈哈哈 开始面试的时候把我给问懵了&#xff0c;当时刚午觉睡醒&#xff0c;还没缓过神 计算机网络部分&#xff1a; 1.http的一套流程是什么&#xff1f; 2.https发起连接的流程…

电网数字孪生系统的技术难点

电网数字孪生系统的开发和实现面临一些技术难点&#xff0c;解决这些技术难点需要综合运用各种先进的技术手段和方法&#xff0c;包括人工智能、大数据分析、云计算、物联网等&#xff0c;同时需要进行持续的研发和创新。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

【设计模式】(二)设计模式六大设计原则

一、 设计原则概述 设计模式中主要有六大设计原则&#xff0c;简称为SOLID &#xff0c;是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)&#xff0c;六大设计原则分别如下&#xff1a; ​ 1、单一职责原则&#xff08;Single Responsibitity Principle&#…

Java继承与多态:深入理解继承、组合和多态的精髓!

Java继承与多态&#xff1a;深入理解继承、组合和多态的精髓&#xff01; 引言 欢迎来到这篇关于Java继承与多态的博客&#xff01;在Java编程中&#xff0c;继承与多态是两个非常重要的概念&#xff0c;它们为我们构建灵活而高效的代码提供了强大的支持。本文将深入探讨Java继…

C语言经典算法-1

C语言经典算法讲解练习 文章目录 C语言经典算法讲解练习1.汉若塔2.费式数列3. 巴斯卡三角形4.三色棋5.老鼠走迷官&#xff08;一&#xff09;6.老鼠走迷官&#xff08;二&#xff09;7.骑士走棋盘8.八皇后9.八枚银币10.生命游戏 1.汉若塔 说明&#xff1a;河内之塔(Towers of …

桥梁安全监测方案:多维度的技术与设备应用

一、背景与意义 随着交通基础设施的快速发展&#xff0c;桥梁作为连接两岸的关键纽带&#xff0c;其安全性能直接关系到人们的生命财产安全和交通畅通。为确保桥梁的安全与稳定&#xff0c;及时发现潜在的安全隐患&#xff0c;采取科学、有效的安全监测方案显得尤为重要。本文将…