mybatis报错Parameter '**' not found

本文介绍了在使用MyBatis框架进行数据库操作时如何正确处理多个参数的问题,特别是在传入对象时可能出现的Parameter'**'notfound错误,并提供了两种解决方案。

我们通常在使用mybatis操作数据库的时候写的都是mapper接口加mapper.xml组合的方式操作数据库,mapper接口实际上相当于传统的dao接口,而mapper.xml则相当于传统的实现类(daoImpl)。在使用mapper接口的时候,我们经常会去传入参数,但是参数有可能是多个(尤其是传入对象的时候),这样就会造成Parameter '**' not found这样的错误,解决的办法有两种:

一种是使用#{param}或者#{arg}

另一种是给你的变量自定义名称:

List<ItemCustom> selectByPager(@Param("pager")Pager pager,@Param("query")ItemQuery query);



这个问题表明Spring容器仍然无法找到`DataSource` bean,即使你已经尝试了排除自动配置。以下是系统性解决方案: ### 终极解决方案(分步验证) #### 第一步:确保完整排除自动配置 ```java @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class, HibernateJpaAutoConfiguration.class // 如果使用了JPA }) public class Application {} ``` #### 第二步:显式声明动态数据源Bean 在配置类中添加: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties("spring.datasource.dynamic.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean public DataSource dynamicDataSource() { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("master", masterDataSource()); // 添加其他数据源... DynamicRoutingDataSource ds = new DynamicRoutingDataSource(); ds.setTargetDataSources(targetDataSources); ds.setDefaultTargetDataSource(masterDataSource()); return ds; } } ``` #### 第三步:修复MyBatis配置 ```java @Configuration public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dynamicDataSource) throws Exception { MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean(); factory.setDataSource(dynamicDataSource); factory.setMapperLocations(...); factory.setTypeAliasesPackage(...); // 必须添加MyBatis-Plus插件 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); factory.setPlugins(interceptor); return factory.getObject(); } } ``` #### 第四步:检查依赖冲突 运行以下命令检查依赖树: ```bash mvn dependency:tree -Dincludes=com.alibaba:druid,com.baomidou:mybatis-plus,com.baomidou:dynamic-datasource ``` #### 第五步:验证配置顺序 确保配置类加载顺序正确: 1. 先加载DataSource配置 2. 再加载MyBatis配置 3. 最后加载事务配置 ### 常见问题排查表 | 现象 | 检查点 | 解决方案 | |------|--------|----------| | 仍报DataSource找不到 | 1. 是否所有模块都排除了自动配置<br>2. 是否在@SpringBootApplication中排除 | 检查所有依赖模块的自动配置 | | 数据源初始化失败 | 1. 数据库连接参数是否正确<br>2. 网络是否通畅 | 使用telnet测试数据库连接 | | 事务不生效 | 1. 是否启用了@EnableTransactionManagement<br>2. 是否配置了PlatformTransactionManager | 添加事务管理器bean | ### 特别注意 1. 如果你使用RuoYi框架,检查是否有多余的`DataSource`配置残留 2. 确保没有在其他地方通过`@Bean`手动定义了DataSource 3. 检查`spring.datasource`和`spring.datasource.dynamic`配置是否混用 ### 验证步骤 1. 启动时观察日志是否有"DynamicDataSource"初始化成功消息 2. 在测试类中注入DataSource并输出其class名称: ```java @Autowired private DataSource dataSource; @PostConstruct public void checkDataSource() { System.out.println("当前数据源类型:" + dataSource.getClass().getName()); } ``` ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值