zoukankan      html  css  js  c++  java
  • Mybatis配置问题解决Invalid bound statement (not found)

    首先这个异常的原因是系统根据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>

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

  • 相关阅读:
    day10servlet编程
    day9http协议
    day8 服务器
    day4 DOM,BOM
    k均值
    asp.net mvc 下拉列表
    asp.net mvc  Ajax.BeginForm 异步上传图片的问题
    sqlserver 存储过程 游标实例
    中篇: php 微信支付 基于Thinkphp3.2开发
    下篇: php 微商城 基于Thinkphp3.2框架开发
  • 原文地址:https://www.cnblogs.com/namelessmyth/p/9251870.html
Copyright © 2011-2022 走看看