• mybatis-plus的 mapper.xml 路径配置的坑


    spring boot整合mybatis-plus使用mysql和Oracle多数据源的时候,遇到如下问题:

    mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件。

    特此记录一下,问题如下:

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.husy.mapper.SystemUserMapper.findUserByName
    
        at com.baomidou.mybatisplus.core.override.MybatisMapperMethod$SqlCommand.<init>(MybatisMapperMethod.java:242)
        at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.<init>(MybatisMapperMethod.java:54)
        at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedMapperMethod$0(MybatisMapperProxy.java:65)
        at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
        at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedMapperMethod(MybatisMapperProxy.java:65)
        at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:60)
        at com.sun.proxy.$Proxy72.findUserByName(Unknown Source)
        at com.husy.service.impl.SystemUserServiceImpl.findUserByName(SystemUserServiceImpl.java:23)

    首先我放xml的包的是没问题的,而是引入的架包和配置问题,问题配置如下:

    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.msl.moniter.entity

    解决方法:请将mybatis-plus改成mybatis,mybatis,mybtis,重要的说三遍,

    必要的架包如下

    <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-core</artifactId>
    <version>3.1.2</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
    <version>2.1.0</version>
    </dependency>

    注意第一个是mybatis-spring-boot-start ,不是mybatisplus-spring-boot-start

    还要在mybatis配置文件里声明MybatisSqlSessionFactoryBean,至此问题解决

    @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 已经自动加载的资源。不手动指定
         * 配置文件和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()));
            }
            mybatisPlus.setConfiguration(properties.getConfiguration());
            if (!ObjectUtils.isEmpty(this.interceptors)) {
                mybatisPlus.setPlugins(this.interceptors);
            }
            MybatisConfiguration mc = new MybatisConfiguration();
            mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
            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;
        }
    }

    不知道是造作不正确还是jar问题,如下验证没有通过

    经过查阅:

    • 如果引用mybatis-plus-boot-starter 依赖,需要配置 mybatis-plus.mapper-locations
    • 如果引用mybatis-plus 依赖,需要配置 mybatis.mapper-locations

    参考:

    https://blog.csdn.net/u013234928/article/details/94060733

    https://blog.csdn.net/qq_21747795/article/details/81217264

  • 相关阅读:
    自己封装的json工具类
    使用BigDecimal进行精确计算工具类
    keytool的使用
    自己封装的数字证书签名及签名验证方法,附带生成证书的语句
    用jxl导出数据到excel
    用jxl解析excel内容
    html的<marquee></marquee>标签实现滚动效果
    request、response 中文乱码问题与解决方式
    httpclient4.3.6/httpcore-4.4自己封装的工具类
    Tomcat优化总结
  • 原文地址:https://www.cnblogs.com/Sincerity/p/11990445.html
Copyright © 2020-2023  润新知