• SB了!给注解的数组属性赋值,我竟然...


    项目中用到了mybatis-plus。springboot集成mybatis-plus项目,通常会使用内置mybatis工具包的org.mybatis.spring.annotation.MapperScan注解,来完成Mapper类的扫描。MapperScan注解源码见下。

    1. public @interface MapperScan {
    2. /**
    3. * Alias for the {@link #basePackages()} attribute. Allows for more concise
    4. * annotation declarations e.g.:
    5. * {@code @MapperScan("org.my.pkg")} instead of {@code @MapperScan(basePackages = "org.my.pkg"})}.
    6. *
    7. * @return base package names
    8. */
    9. String[] value() default {};
    10. /**
    11. * Base packages to scan for MyBatis interfaces.
    12. * Note that only interfaces with at least one method will be registered; concrete classes will be ignored.
    13. * 翻译:用于扫描MyBatis接口的基础package(可多个)。请注意,只有具有至少一个方法的接口才会被注册;具体类将被忽略。
    14. *
    15. * @return base package names for scanning mapper interface
    16. */
    17. String[] basePackages() default {};
    18. }

    项目使用这个MapperScan注解来决定扫描Mapper类所在的包。见下方MybatisPlusConfig配置类。

    1. package springtrans;
    2. import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    3. import org.mybatis.spring.annotation.MapperScan;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. @Configuration
    7. @MapperScan(value={"springtrans.**.mapper"})
    8. public class MybatisPlusConfig {
    9. /**
    10. * 分页插件
    11. */
    12. @Bean
    13. public PaginationInterceptor paginationInterceptor() {
    14. // 设置sql的limit为无限制,默认是500
    15. return new PaginationInterceptor().setLimit(-1);
    16. }
    17. }

    近期在对项目中的结算代码进行优化,这里,我们先设定结算表仓储类名称是SettlementMapper。这次重构涉及到需要屏蔽SettlementMapper的update操作。实现途径是将SettlementMapper从现有package移出去,并且让mybatis-plus追加扫描SettlementMapper所在的package。

    于是,修改MybatisPlusConfig中MapperScan的value值。

    1. @Configuration
    2. @MapperScan(value={"springtrans.**.mapper, springtrans.transtest.manager"})
    3. public class MybatisPlusConfig {
    4. ...
    5. }

    不料,运行testcase出现了下面的NoSuchBeanDefinitionException异常。

    1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'springtrans.transtest.entity.OrderMapper' available:
    2. expected at least 1 bean which qualifies as autowire candidate.
    3. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    4. at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1695)
    5. at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1253)
    6. at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207)
    7. at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:636)
    8. ... 44 more

    聪明的你,是不是看出了其中的端倪?

    哈哈,我竟然犯了如此低级失误。
    正确姿势是:

    1. @Configuration
    2. @MapperScan(value={"springtrans.**.mapper", "springtrans.transtest.manager"})
    3. public class MybatisPlusConfig {
    4. ...
    5. }

    EOF,感谢阅读!

  • 相关阅读:
    UNIAPP实战项目笔记38 购物车的添加商品到购物车功能
    数据治理-数据仓库和商务智能-部分内容
    递归之法 && 信息携带者
    crmebpro2.2.2多店版,可包更新
    【开发环境简称】PRD生产环境-常见环境英文缩写简称
    Oracle + MyBatis 批量更新 update
    Unity中RampTex介绍和应用: 溶解特效优化
    项目经理如何做好项目管理中的风险管理
    5.2.SpringBoot整合Kafka
    七夕节最深情表白文案从此告别搓衣板
  • 原文地址:https://blog.csdn.net/gzyes/article/details/134023280