Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 10819|回复: 0

Mybatis配置问题解决Invalid bound statement (not found)

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-20 04:33:25 | 显示全部楼层 |阅读模式

    首先这个异常的原因是系统根据Mapper类的方法名找不到对应的映射文件。

    网上也搜索了到了类似的文章,一般可以从以下几个点排查:

    • mapper.xml的namespace要写所映射接口的全称类名,而且要和Mapper类对应好!
    • mapper.xml中的每个statement的id要和接口方法的方法名相同
    • mapper.xml中定义的每个sql的parameterType要和接口方法的形参类型相同
    • mapper.xml中定义的每个sql的resultType要和接口方法的返回值的类型相同
    • mapper.xml要和对应的mapper接口在同一个包下
    • mapper.xml的命名规范遵守: 接口名+Mapper.xml

    原文链接:https://www.cnblogs.com/ewwwe/p/6181872.html

    悲催的是笔者的项目把以上都排查过了还是不行。于是再去检查配置文件。

    这里要特别说明的一下是,我们的项目要连接2个数据源。1个数据源只是查询,另1个数据库要进行更新。

    经过检查,原来是2个Mybatis的扫描包路径存在了包含关系导致的!

    <property name="basePackage" value="com.kedacom.scm.dao.mes.mybatis" />

    然后我把1个数据源的mapper类从原来的路径底下剥离开来,问题终于解决!!!

    顺便放一下2个数据源的完整配置,以供参考。数据源一的Mybatis配置。

        <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
            <property name="dataSource" ref="dataSource" />
            <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
            <property name="typeAliasesPackage" value="com.kedacom.scm.model" />
            <!-- 显式指定Mapper文件位置 -->
            <property name="mapperLocations">
                <list>
                    <value>classpath:/mapper/*.map.xml</value>
                    <value>classpath*:/security/map/*.map.xml</value>
                </list>
            </property>
            <property name="configLocation" value="classpath:/conf/mybatis-configuration.xml" />
            <property name="plugins">
                <array>
                    <bean class="com.kedacom.mybatis.ext.PageHelper">
                        <property name="properties">
                            <value>
                                dialect=${jdbc.dbType}
                                offsetAsPageNum=true
                                rowBoundsWithCount=true
                                pageSizeZero=true
                                reasonable=true
                                firstPageIsZero=true
                                sortNamingStrategy=default
                            </value>
                        </property>
                    </bean>
                </array>
            </property>
        </bean>
        
        <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 如果有多个数据源,这边的扫描包路径不能重合-->
            <property name="basePackage" value="com.kedacom.security.dao,com.kedacom.scm.dao.mybatis" />
            <property name="annotationClass" value="com.kedacom.core.annotion.MyBatisRepository"/>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
        </bean>

    另一个数据源配置:

     1     <bean id="sqlSessionFactoryBean4Mes" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
     2         <property name="dataSource" ref="dataSourceMes" />
     3         <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
     4         <property name="typeAliasesPackage" value="com.kedacom.scm.model" />
     5         <!-- 显式指定Mapper文件位置 -->
     6         <property name="mapperLocations">
     7             <list>
     8                 <value>classpath*:/mapper/mes/*.map.xml</value>
     9             </list>
    10         </property>
    11         <property name="configLocation" value="classpath:/conf/mybatis-configuration.xml" />
    12         <property name="plugins">
    13             <array>
    14                 <bean class="com.kedacom.mybatis.ext.PageHelper">
    15                     <property name="properties">
    16                         <value>
    17                             dialect=${jdbc.dbType}
    18                             offsetAsPageNum=true
    19                             rowBoundsWithCount=true
    20                             pageSizeZero=true
    21                             reasonable=true
    22                             firstPageIsZero=true
    23                             sortNamingStrategy=default
    24                         </value>
    25                     </property>
    26                 </bean>
    27             </array>
    28         </property>
    29     </bean>
    30     
    31     <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->
    32     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    33         <!-- 如果有多个数据源,这边的扫描包路径不能重合-->
    34         <property name="basePackage" value="com.kedacom.scm.dao.mes.mybatis" />
    35         <property name="annotationClass" value="com.kedacom.core.annotion.MyBatisRepository"/>
    36         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean4Mes" />
    37     </bean>

    由于一个数据库只是查询,所以这边并没有配置事务。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-5 06:41 , Processed in 0.061533 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表