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

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

目录

试错

尝试过确认的东西:

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

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

更改为:        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();

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何搭建咨询预类小程序?看完快速了解小程序架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 今天简单介绍一下咨询预约类小程序&#xff0c;具体功能、系统应用范围。 一、咨询…

安装或卸载VMware时,显示无法打开注册表项,以及开启虚拟机电脑蓝屏重启的解决方法

我之前安装过一次VMware&#xff0c;之后就随手把他删除了&#xff0c;但没有删除干净&#xff0c;最近我再次安装VMware的时候&#xff0c;出现了一系列问题&#xff0c;我决定分享一下我的解决方案。 一&#xff1a;安装或卸载VMware时&#xff0c;显示无法打开注册表项 解决…

微信小程序开发系列(十三)·如何使用iconfont、微信小程序中如何使用字体图标

目录 1. 如何使用iconfont 2. 微信小程序中如何使用字体图标 3. 背景图的使用 1. 如何使用iconfont 在项目中使用到的小图标&#xff0c;一般由公司设计师进行设计&#xff0c;设计好以后上传到阿里巴巴矢量图标库&#xff0c;然后方便程序员来进行使用。 小程序中的字体…

VR智慧商城“场景购”,打造购物新篇章

近日来&#xff0c;“快递新规”引发了社会热议&#xff0c;更有快递员直呼想转行送外卖。现在的快递行业可谓是盛行一时&#xff0c;消费群体逐渐趋于年轻化&#xff0c;很多人一天时间一半时间都在网上冲浪&#xff1b;而对于实体行业来说&#xff0c;如果一味的坚持做线下&a…

git合并多次提交

简介 Git是一个分布式版本控制系统&#xff0c;它允许开发人员在不同的分支上进行并行开发&#xff0c;并将这些分支合并到主分支或其他分支中。在开发过程中&#xff0c;我们经常会创建多个commit来记录每次的代码变更。有时候我们希望将这些连续的commit合并为一个更有意义的…

生成式 AI

生成式 AI 进入应用爆发期&#xff0c;将极大地推动数字化内容生产与创造。 摘要 生成式 AI &#xff08; Generative AI 或 AIGC &#xff09; 是利用现有文本、音频文件或图像创建 新内容的技术。过去一年&#xff0c;其技术上的 进展主要来自于三大领域&#xff1a;…

理解CPU指令执行:从理论到实践

理解CPU指令执行&#xff1a;从理论到实践 在探讨现代计算机的核心——中央处理单元&#xff08;CPU&#xff09;的工作原理时&#xff0c;我们经常遇到“时钟周期”和“指令执行”这两个概念。这些概念不仅对于理解CPU的性能至关重要&#xff0c;而且对于揭示计算机如何处理任…

在三个el-form-item中的el-radio的值中取一个发送给后端怎么获取

问: 请问,这段代码怎么获取:无策略,策略1,策略2的值? 回答: 问: 三个里面只可以选中一个吗? 回答:

LangChain 教程:构建 LLM 支持的应用程序的指南

作者&#xff1a;Aditya Tripathi GPT-4 和 LLaMA 等大型语言模型 (LLM) 在过去几年中创造了一个充满可能性的世界。 它预示着人工智能工具和应用程序的繁荣&#xff0c;ChatGPT 似乎一夜之间成为家喻户晓的名字。 但如果没有为促进新一代应用程序而创建的强大工具和框架&#…

自然语言处理之语言模型(LM)介绍

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;的一个重要分支&#xff0c;它旨在使计算机能够理解、解释和生成人类语言。在自然语言处理中&#xff0c;语言模型&…

钉钉h5应用 globalthis is not defined vite client

钉钉h5应用 globalthis is not defined vite client problem 背景 钉钉h5应用使用 vue3 vite 构建的前端工程 问题 h5页面在pc端浏览器和pc端钉钉打开正常h5页面在移动端钉钉打开异常 页面空白 通过调试工具找到报错信息 globalthis is not defined vite client reason …

从零开发短视频电商 端到端测试Playwright实战CSDN搜索

文章目录 背景脚本录制配置窗口大小UserAgent设置全局默认超时时间保留登录身份信息加载登录身份信息 测试框架建议 背景 假设我是csdn的测试人员&#xff0c;我想测试如下流程&#xff1a; 1.用户进入站点https://www.csdn.net&#xff0c; 2.在搜索框输入"lakernote&…

Excel技巧:如何对含有相同内容的列增加递增序号

如何在Excel中对含有相同内容的单元格自动添加递增序号 当我们在处理Excel数据时&#xff0c;经常会遇到需要根据某一列中的重复内容来对另一列的单元格进行编号的情况。例如&#xff0c;我们可能需要对所有含有特定字符的单元格进行标记&#xff0c;并在另一列中为它们分配一…

从 Language Model 到 Chat Application:对话接口的设计与实现

作者&#xff1a;网隐 RTP-LLM 是阿里巴巴大模型预测团队开发的大模型推理加速引擎&#xff0c;作为一个高性能的大模型推理解决方案&#xff0c;它已被广泛应用于阿里内部。本文从对话接口的设计出发&#xff0c;介绍了业界常见方案&#xff0c;并分享了 RTP-LLM 团队在此场景…

windows 安装 minio

座右铭&#xff1a;怎么简单怎么来&#xff0c;以实现功能为主。 欢迎大家关注公众号与我交流 1. 打开官网链接 https://www.minio.org.cn/ 2. 点击下载 3. 点击 windows&#xff0c;然后点击 MINIO SERVER 右侧的 DOWNLOAD 进行下载 4. 找到环境变量&#xff0c;新建系统变量…

推荐书籍《低代码平台开发实践:基于React》—— 提升开发效率,构建优质应用

写在前面 随着数字化转型的深入&#xff0c;企业对应用开发效率和灵活性的要求不断提高。低代码平台作为新兴的软件开发方式&#xff0c;通过可视化界面和预构建组件&#xff0c;极大简化了应用开发流程&#xff0c;降低了技术门槛。基于React的低代码平台以其组件化、响应式和…

JavaScript基础3之面向对象关于面向过程、函数式编程、对比、构造函数、原型

JavaScript基础 面向对象面向过程函数式编程命令式编程函数式编程特性副作用透明引用不可变变量函数是一等公民 常见的函数式编程模型 面向对象为什么要使用面向对象封装继承多态 对比面向过程函数式编程面向对象 构造函数原型constructor使用场景 对象原型 面向对象 面向过程…

关于制作Python游戏全过程(汇总1)

目录 前言: 1.plane_sprites模块: 1.1导入模块: 1.1.1pygame&#xff1a;一个用于创建游戏的Python库。 1.1.2random&#xff1a;Python标准库中的一个模块&#xff0c;用于生成随机数。 1.2定义事件代号: 1.2.1ENEMY_EVENT&#xff1a;自定义的敌机出场事件代号&#xf…

从一个word里面复制表格到另一个word时,表格变形的问题

复制过来保留源格式&#xff0c;检查段落、页边距里面的格式都和原始word一致后&#xff0c;仍然表格变形。 这时点页边距-自定义页边距-文档网格 看字符数是不是一致的