• 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,感谢阅读!

  • 相关阅读:
    二叉树的最近公共祖先、二叉搜索数的最近公共祖先
    不说废话,推荐一款超实用免费配音软件~
    【openGauss】两种在openGauss中使用存储过程生成文本文件的方式
    A-Level物理例题解析及练习Phase Difference
    protobuf的优缺点
    Jackson自定义序列化
    Shell 脚本学习笔记
    计算机网络——基本概念(计算机网络,Internet,网络协议)
    golang判断文本文件是否是BOM格式
    leetcode 1110. Delete Nodes And Return Forest 删点成林(中等)
  • 原文地址:https://blog.csdn.net/gzyes/article/details/134023280