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

  • 相关阅读:
    家庭实验室系列文章-如何迁移树莓派系统到更大的 SD 卡?
    无锅一身轻,IT资产账号密码就该这么管理
    【js逆向实战】某sakura动漫视频逆向
    过五关,斩六将!「网易/美团/菜鸟」已拿offer【Java岗】
    GSCoolink GSV650X HDMI1to4 Splitter
    如何正确的关闭Redis服务器
    工业路由器项目应用(4g+5g两种工业路由器项目介绍)
    数据结构- 树
    大专三年总结2019-2022
    MYSQLg高级------Sharding-JDBC 实现读写分离
  • 原文地址:https://blog.csdn.net/gzyes/article/details/134023280