1使用springboot整合mybatis-plus后,調(diào)用自定義的方法正常,調(diào)用BaseMapper中自帶的方法報(bào)錯(cuò)如下:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.linose.uutm.mapper.receiveMapper.selectList(receiveQueryWrapper);
at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:227) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:49) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.6.jar:3.4.6]
at com.sun.proxy.$Proxy70.selectOne(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne(ServiceImpl.java:259) ~[mybatis-plus-extension-3.1.1.jar:3.1.1]
at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:192) ~[mybatis-plus-extension-3.1.1.jar:3.1.1]
2檢查:
(1)檢查是不是引入 jar 沖突
<dependency>
? ? <groupId>com.baomidou</groupId>
? ? <artifactId>mybatis-plus</artifactId>
? ? <version>2.1.9</version>
</dependency>
<dependency>
? ? <groupId>com.baomidou</groupId>
? ? <artifactId>mybatis-plus-boot-starter</artifactId>
? ? <version>3.1.2</version>
</dependency>
<dependency>
? ? <groupId>com.baomidou</groupId>
? ? <artifactId>mybatis-plus-annotation</artifactId>
? ? <version>3.1.2</version>
</dependency>
<dependency>
? ? <groupId>com.baomidou</groupId>
? ? <artifactId>mybatis-plus-extension</artifactId>
? ? <version>3.1.2</version>
</dependency>
(2)檢查掃描以及namespace對(duì)應(yīng)關(guān)系
檢查xml文件所在的package名稱是否和interface對(duì)應(yīng)的package名稱一一對(duì)應(yīng)
檢查xml文件的namespace是否和xml文件的package名稱一一對(duì)應(yīng)
檢查函數(shù)名稱能否對(duì)應(yīng)上
去掉xml文件中的中文注釋
(3)檢查是否都已經(jīng)編譯到相應(yīng)路徑
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
(4)發(fā)現(xiàn)上述都沒問題
看bug發(fā)現(xiàn) SqlSessionFactory使用原生的,應(yīng)該使用MybatisSqlSessionFactory
解決方法:將mybatis的sqlSessionFactory替換成mybatis-plusd的MybatisSqlSessionFactoryBean,添加配置類MybatisPlusConfig?
package com.linose.uutm.config;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.boot.autoconfigure.MybatisProperties;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.StringUtils;
import javax.sql.DataSource;
@Configuration
public class MybatisPlusConfig {
? ? @Autowired
? ? private DataSource dataSource;
? ? @Autowired
? ? private MybatisProperties properties;
? ? @Autowired
? ? private ResourceLoader resourceLoader = new DefaultResourceLoader();
? ? @Autowired(required = false)
? ? private Interceptor[] interceptors;
? ? @Autowired(required = false)
? ? private DatabaseIdProvider databaseIdProvider;
? ? /**
? ? *? mybatis-plus分頁插件
? ? */
? ? @Bean
? ? public PaginationInterceptor paginationInterceptor() {
? ? ? ? PaginationInterceptor page = new PaginationInterceptor();
? ? ? ? page.setDialectType("mysql");
? ? ? ? return page;
? ? }
? ? /**
? ? * 這里全部使用mybatis-autoconfigure 已經(jīng)自動(dòng)加載的資源。不手動(dòng)指定
? ? * 配置文件和mybatis-boot的配置文件同步
? ? * @return
? ? */
? ? @Bean
? ? public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() {
? ? ? ? MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
? ? ? ? mybatisPlus.setDataSource(dataSource);
? ? ? ? mybatisPlus.setVfs(SpringBootVFS.class);
? ? ? ? if (StringUtils.hasText(this.properties.getConfigLocation())) {
? ? ? ? ? ? mybatisPlus.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
? ? ? ? }
? ? ? ? if (!ObjectUtils.isEmpty(this.interceptors)) {
? ? ? ? ? ? mybatisPlus.setPlugins(this.interceptors);
? ? ? ? }
? ? ? ? MybatisConfiguration mc = new MybatisConfiguration();
? ? ? ? mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
? ? ? ? //數(shù)據(jù)庫字段設(shè)計(jì)為駝峰命名,默認(rèn)開啟的駝峰轉(zhuǎn)下劃線會(huì)報(bào)錯(cuò)字段找不到
? ? ? ? mc.setMapUnderscoreToCamelCase(true);
? ? ? ? mybatisPlus.setConfiguration(mc);
? ? ? ? if (this.databaseIdProvider != null) {
? ? ? ? ? ? mybatisPlus.setDatabaseIdProvider(this.databaseIdProvider);
? ? ? ? }
? ? ? ? if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
? ? ? ? ? ? mybatisPlus.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
? ? ? ? }
? ? ? ? if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
? ? ? ? ? ? mybatisPlus.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());
? ? ? ? }
? ? ? ? if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
? ? ? ? ? ? mybatisPlus.setMapperLocations(this.properties.resolveMapperLocations());
? ? ? ? }
? ? ? ? return mybatisPlus;
? ? }
}