MyBatis中Mapper.xml报错Invalid bound statement (not found) 终极解决办法

文章讲述了在使用Mybatis时可能遇到的几种错误情况,包括XML文件的命名空间问题,Mapper方法与XML配置不匹配,ResultMap未正确配置,以及处理null值时的jdbcType问题。提供了指定jdbcType和配置mybatis-config.xml文件的解决方案。

1.检查xml文件的namespace是否正确

2.Mapper.java的方法在Mapper.xml中没有,然后执行Mapper的方法会报此

3. Mapper.java的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType

4. 如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,保存.问题解决

5.看下mapper的XML配置路径是否正确

若都没有问题,在Config下找到PrimaryMybatisConfig中的Mapper目录选择

 

Svr端查询sql的时候报错无效的列类型:1111

原因:传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。

解决方法:

一、指定插入值得jdbcType,将sql改成 insert into user(id,name) values(#{id,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR}) 

二、在mybatis-config.xml文件中配置一下,添加settings配置,如下:(推荐)

<configuration>

<settings>

    <setting name="jdbcTypeForNull" value="NULL" />

</settings>

</configuration>

<think> 首先,用户的问题是关于在使用MyBatis-Plus时,调用service.list方法报错:"Invalid bound statement (not found): selectList"。我需要基于给定的引用提供解决方案。 回顾引用: - 引用[1]:提到了绑定的语句无效错误,具体到selectList方法。 - 引用[2]:讨论了解决类似错误,如selectPage和selectList的报错。 - 引用[3]:解释了错误是因为mapper接口没有被正确扫描和注册。 - 引用[4]:类似错误,涉及selectByNames方法。 - 引用[5]:在若依框架中,MyBatis-Plus的baseMapper方法报错,原因是框架使用原生MyBatis的SqlSessionFactoryBean,而不是MyBatis-Plus的MybatisSqlSessionFactoryBean,导致无法识别MyBatis-Plus功能。 用户的问题特定于调用service.list方法报错selectList。list方法在MyBatis-Plus的IService接口中定义,它内部调用baseMapper.selectList方法。 关键点: - 错误 "Invalid bound statement (not found): selectList" 表明MyBatis找不到对应的SQL映射。 - 常见原因包括mapper接口没有被扫描、配置错误、或框架冲突(如引用[5]所示)。 从引用中提取解决方案: - 引用[3]:检查mapper接口是否正确扫描。 - 引用[5]:确保使用MybatisPlus的SqlSessionFactoryBean,而不是原生MyBatis的。 具体步骤: 1. **检查Mapper扫描配置**:确保在Spring Boot的启动类或配置类中,有@MapperScan注解指定mapper包的路径。例如:@MapperScan("com.example.mapper")。 2. **检查SqlSessionFactory配置**:根据引用[5],如果在框架中使用原生的MyBatis SqlSessionFactoryBean,需要替换为MybatisPlus的MybatisSqlSessionFactoryBean。在配置类中,应该有类似: ```java @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); // 其他配置 return sessionFactory.getObject(); } ``` 3. **检查依赖**:确保pom.xml或build.gradle中包含MyBatis-Plus的starter依赖,例如: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` 4. **检查Mapper接口和方法**:确保mapper接口继承了BaseMapper<T>,并且方法名正确。例如: ```java public interface BsmMapper extends BaseMapper<Bsm> {} ``` 5. **检查XML文件(如果有)**:虽然MyBatis-Plus支持自动生成SQL,但如果自定义了SQL,需要确保XML文件在正确位置,并包含selectList的映射。 6. **清理和重建项目**:有时IDE缓存可能导致问题,尝试清理并重新构建项目。 7. **日志级别**:启用DEBUG日志查看详细错误信息。 回答结构: - 清晰、步骤化。 - 使用中文。 - 添加引用标识。 - 生成相关问题。 最终回答: - 解释错误原因。 - 列举解决方案步骤。 - 引用相关引用。 生成相关问题: - 例如:如何配置MyBatis-Plus的Mapper扫描?MyBatis-Plus依赖冲突如何处理? </think> ### MyBatis-Plus调用service.list方法报错 "Invalid bound statement (not found): selectList" 的解决方案 该错误通常表示MyBatis-Plus无法找到对应的SQL映射语句(即`selectList`方法未被正确绑定到mapper接口)。常见原因包括:mapper接口未被扫描、SQLSessionFactory配置错误、依赖冲突或框架集成问题。以下是基于引用和最佳实践的逐步解决方案: #### 1. **检查Mapper接口是否被正确扫描** - MyBatis-Plus需要显式扫描mapper接口包。确保在Spring Boot启动类或配置类中添加`@MapperScan`注解: ```java @SpringBootApplication @MapperScan("com.hikvision.basicframe.mapper") // 替换为您的mapper包路径 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` - **注意事项**: - 包路径必须与mapper接口(如`bsmMapper`)的包名完全匹配。 - 如果使用XML映射文件,确保`application.properties`中配置了`mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml`。 - 引用[3]指出,此错误常因mapper未被扫描导致[^3]。 #### 2. **验证SqlSessionFactory配置(关键步骤)** - MyBatis-Plus必须使用`MybatisSqlSessionFactoryBean`而非原生MyBatis的`SqlSessionFactoryBean`,否则无法识别`selectList`等增强方法: ```java @Configuration public class MybatisPlusConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml")); return sessionFactory.getObject(); } } ``` - **注意事项**: - 如果项目原本使用原生MyBatis(如引用[5]中的若依框架),务必替换原有的`SqlSessionFactoryBean`为`MybatisSqlSessionFactoryBean`。 - 引用[5]强调,原生配置无法支持MyBatis-Plus的CRUD方法[^5]。 #### 3. **检查依赖和版本兼容性** - 确保`pom.xml`中包含MyBatis-Plus启动器依赖,避免版本冲突: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.6</version> <!-- 使用最新稳定版本 --> </dependency> ``` - **注意事项**: - 移除可能冲突的依赖(如原生MyBatis的`mybatis-spring-boot-starter`)。 - 运行`mvn dependency:tree`检查依赖树是否有冲突。 #### 4. **确认Mapper接口继承关系** - service.list方法内部调用`baseMapper.selectList()`,因此mapper接口必须继承`BaseMapper<T>`: ```java public interface bsmMapper extends BaseMapper<Bsm> { // 无需定义selectList,BaseMapper已提供 } ``` - **注意事项**: - 实体类`Bsm`需添加`@TableName`注解指定表名。 - 引用[4]表明,方法名错误或未继承会导致绑定失败[^4]。 #### 5. **其他排查步骤** - **清理构建缓存**:执行`mvn clean install`或清理IDE缓存(如IntelliJ的`File > Invalidate Caches`)。 - **启用DEBUG日志**:在`application.properties`添加: ``` logging.level.com.baomidou.mybatisplus=DEBUG logging.level.org.apache.ibatis=DEBUG ``` 查看日志确认mapper加载详情。 - **检查XML文件(如自定义SQL)**:确保XML中的`<select id="selectList">`与接口匹配,且路径正确。 #### 总结 此错误主要源自配置问题(扫描缺失或工厂类错误),遵循以上步骤通常可解决。引用[2]和[3]均证实这些措施的有效性[^2][^3]。如果问题依旧,请提供更多上下文(如完整配置日志)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值