Hibernate与MybatisPlus的混用问题(Invalid bound statement (not found))
当项目里已经有了Hibernate后:
spring:jpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:format_sql: true
再配置yml文件就会失效:
mybatis-plus:mapper-locations: classpath:mapper/*.xml# 全局策略global-config:db-config:# 自动生成id 策略为Long类型雪花算法id-type: ASSIGN_IDconfiguration:use-deprecated-executor: falsemap-underscore-to-camel-case: truecache-enabled: falselog-impl: org.apache.ibatis.logging.stdout.StdOutImpl
于是必须重新在配置文件的Bean中定义MybatisPlus的配置:
package com.xxx.xxx;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;/*** MybatisPlus配置*/
@Slf4j
@Configuration
/**因为与hibernate混用,被hibernate覆盖了,需要重新定义**/
@MapperScan(basePackages = "com.xxx.mapper", sqlSessionFactoryRef = "mybatisSqlSessionFactory")
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}@Beanpublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}/*** 因为与hibernate混用,被hibernate覆盖了,配置需要重新定义,放在yml中配置会被覆盖* @param dataSource* @return* @throws Exception*/@Beanpublic SqlSessionFactory mybatisSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();bean.setDataSource(dataSource);// 加载 mapper.xml 文件Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml");bean.setMapperLocations(resources);// 设置别名包bean.setTypeAliasesPackage("com.qxh.mapper");MybatisConfiguration configuration = new MybatisConfiguration();configuration.setMapUnderscoreToCamelCase(true);configuration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);configuration.setUseDeprecatedExecutor(false);configuration.setCacheEnabled(false);bean.setConfiguration(configuration);// 设置全局配置GlobalConfig globalConfig = new GlobalConfig();GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();dbConfig.setIdType(IdType.ASSIGN_ID);bean.setGlobalConfig(globalConfig);return bean.getObject();}
}
之前用的yml去配置,一直报错:Invalid bound statement (not found),花了我好几个小时,原来是被覆盖了。