项目是基于springboot + mybatis,后面在集成mybatis-plus时遇到关键问题:
问题一:使用mybatis plus自带的mapper方法都报Invalid bound statement (not found),而在mapper加入自定义的方法都可以正常调用
原因:这是因为先前使用mybatis时mybatisconfig中配置了SqlSessionFactory,而mybatis plus需要用到MybatisSqlSessionFactoryBean, 使用MybatisSqlSessionFactoryBean时,必须注释掉SqlSessionFactory, 否则默认只认SqlSessionFactory;而MybatisSqlSessionFactoryBean支持mybatis plus的同时还兼容SqlSessionFactory
MybatisPlusConfig.java
package com.lis.framework.config; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver; 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.annotation.MapperScan; 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.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.util.StringUtils; import javax.sql.DataSource; import java.io.IOException; /** * **/ @Configuration @MapperScan(value = {"com.lis.mapper.**"}) public class MybatisPlusConfig { @Autowired private DataSource dataSource; @Autowired private MybatisPlusProperties 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("oracle"); return page; } /** * 这里全部使用mybatis-autoconfigure 已经自动加载的资源。不手动指定 配置文件和mybatis-boot的配置文件同步 * * @return * @throws IOException */ @Bean public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() throws IOException { MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean(); mybatisPlus.setDataSource(dataSource); mybatisPlus.setVfs(SpringBootVFS.class); String configLocation = this.properties.getConfigLocation(); if (!StringUtils.isEmpty(configLocation)) { mybatisPlus.setConfigLocation(this.resourceLoader.getResource(configLocation)); } mybatisPlus.setConfiguration(properties.getConfiguration()); mybatisPlus.setPlugins(this.interceptors); MybatisConfiguration mc = new MybatisConfiguration(); mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class); mc.setMapUnderscoreToCamelCase(false);// 数据库和java都是驼峰,就不需要 mybatisPlus.setConfiguration(mc); if (this.databaseIdProvider != null) { mybatisPlus.setDatabaseIdProvider(this.databaseIdProvider); } mybatisPlus.setTypeAliasesPackage(this.properties.getTypeAliasesPackage()); mybatisPlus.setTypeHandlersPackage(this.properties.getTypeHandlersPackage()); mybatisPlus.setMapperLocations(this.properties.resolveMapperLocations()); // 设置mapper.xml文件的路径 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resource = resolver.getResources(this.properties.getMapperLocations()[0]); mybatisPlus.setMapperLocations(resource); return mybatisPlus; } }