精华内容
下载资源
问答
  • IDEA 无法自动装配Mapper ,运行报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),Eclipse正常运行 解决方法: 在pom.xml文件里面加入如下代码 <build> <resources...

    IDEA 无法自动装配Mapper ,运行报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),Eclipse正常运行

    解决方法:
    pom.xml文件里面加入如下代码

    <build>
    	<resources>
    		<resource>
    			<directory>src/main/java</directory>
    			<includes>
    				<include>**/*.xml</include>
    			</includes>
    		</resource>
    	</resources>
    </build>
    

    参考: https://blog.csdn.net/DackChen/article/details/94401505
    https://blog.csdn.net/luoposhushengyizhuce/article/details/80633908

    展开全文
  • 如图: 解决方法: 转载: https://blog.csdn.net/j754379117/article/details/71639043 转载于:https://www.cnblogs.com/tianhengblogs/p/10630012.html

    如图:

     

    解决方法:

     

    转载:

    https://blog.csdn.net/j754379117/article/details/71639043

     

    转载于:https://www.cnblogs.com/tianhengblogs/p/10630012.html

    展开全文
  • mapper扫描,自动装配

    2021-03-04 15:43:58
    自动装配是springboot的一大特点 关键类: 1、MapperScannerConfigurer 2、ClassPathMapperScanner 类定义及图 MapperScannerConfigurer public class MapperScannerConfigurer implements ...

    自动装配是springboot的一大特点

    关键类:

    1、MapperScannerConfigurer
    2、ClassPathMapperScanner
    类定义及图
    MapperScannerConfigurer

    public class MapperScannerConfigurer
        implements BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware, BeanNameAware 
      
    

    在这里插入图片描述
    ClassPathMapperScanner

    public class ClassPathMapperScanner extends ClassPathBeanDefinitionScanner {
    

    在这里插入图片描述
    关键方法
    1、MapperScannerConfigurer----->postProcessBeanDefinitionRegistry

    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
      if (this.processPropertyPlaceHolders) {
        processPropertyPlaceHolders();
      }
    // 构建扫描
      ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
      scanner.setAddToConfig(this.addToConfig);
      // 扫描过滤注解,这里是Mapper.class
      scanner.setAnnotationClass(this.annotationClass);
      // 标记接口
      scanner.setMarkerInterface(this.markerInterface);
      // 下面几个属性都是mybatis需要连接数据库需要的
      scanner.setSqlSessionFactory(this.sqlSessionFactory);
      scanner.setSqlSessionTemplate(this.sqlSessionTemplate);
      scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName);
      scanner.setSqlSessionTemplateBeanName(this.sqlSessionTemplateBeanName);
      // 下面是生成springbean所需要的
      scanner.setResourceLoader(this.applicationContext);
      scanner.setBeanNameGenerator(this.nameGenerator);
      scanner.setMapperFactoryBeanClass(this.mapperFactoryBeanClass);
      if (StringUtils.hasText(lazyInitialization)) {
        scanner.setLazyInitialization(Boolean.valueOf(lazyInitialization));
      }
      // 扫描过滤
      scanner.registerFilters();
      // 进行扫描
      scanner.scan(
          StringUtils.tokenizeToStringArray(this.basePackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS));
    }
    

    2、ClassPathMapperScanner-----scan() 扫面装配方法,但是并没scan方法,它是委托给了ClassPathBeanDefinitionScanner类中的scan进行关键的扫描装配,关键代码如下
    scan

    /**
     * Perform a scan within the specified base packages.
     * @param basePackages the packages to check for annotated classes
     * @return number of beans registered
     */
    public int scan(String... basePackages) {
        // 获取注册的bean的数量
       int beanCountAtScanStart = this.registry.getBeanDefinitionCount();
       // 真正的扫描
       doScan(basePackages);
    
       // 如果有必要的话,注册注解配置处理器
       if (this.includeAnnotationConfig) {
          AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
       } 
       return (this.registry.getBeanDefinitionCount() - beanCountAtScanStart);
    }
    

    scan方法调用了doscan进行最终的扫描装配工作

    /**
     * Perform a scan within the specified base packages,
     * returning the registered bean definitions.
     * <p>This method does <i>not</i> register an annotation config processor
     * but rather leaves this up to the caller.
     * @param basePackages the packages to check for annotated classes
     * @return set of beans registered if any for tooling registration purposes (never {@code null})
     */
    protected Set<BeanDefinitionHolder> doScan(String... basePackages) {
        // 根据指定的基础包进行扫描装配bean到spring中
       Assert.notEmpty(basePackages, "At least one base package must be specified");
       Set<BeanDefinitionHolder> beanDefinitions = new LinkedHashSet<>();
       for (String basePackage : basePackages) {
           // 扫描包路径下的所有类(候选组件),由于前面已经设定了过滤,所以只会扫描之前含有指定注解的类型进行装配
          Set<BeanDefinition> candidates = findCandidateComponents(basePackage);
          for (BeanDefinition candidate : candidates) {
             ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(candidate);
             // 设置作用范围
             candidate.setScope(scopeMetadata.getScopeName());
             String beanName = this.beanNameGenerator.generateBeanName(candidate, this.registry);
             if (candidate instanceof AbstractBeanDefinition) {
                postProcessBeanDefinition((AbstractBeanDefinition) candidate, beanName);
             }
             if (candidate instanceof AnnotatedBeanDefinition) {
                AnnotationConfigUtils.processCommonDefinitionAnnotations((AnnotatedBeanDefinition) candidate);
             }
             if (checkCandidate(beanName, candidate)) {
                BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(candidate, beanName);
                definitionHolder =
                      AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);
                beanDefinitions.add(definitionHolder);
                registerBeanDefinition(definitionHolder, this.registry);
             }
          }
       }
       return beanDefinitions;
    }
    

    关键代码,查找所有的候选组件 findCandidateComponents

    /**
     * Scan the class path for candidate components.
     * @param basePackage the package to check for annotated classes
     * @return a corresponding Set of autodetected bean definitions
     */
    public Set<BeanDefinition> findCandidateComponents(String basePackage) {
       if (this.componentsIndex != null && indexSupportsIncludeFilters()) {
          return addCandidateComponentsFromIndex(this.componentsIndex, basePackage);
       }
       else {
           // 扫描包路径下的所有候选组件
          return scanCandidateComponents(basePackage);
       }
    }
    
    private Set<BeanDefinition> scanCandidateComponents(String basePackage) {
       Set<BeanDefinition> candidates = new LinkedHashSet<>();
       try {
          String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
                resolveBasePackage(basePackage) + '/' + this.resourcePattern;
          Resource[] resources = getResourcePatternResolver().getResources(packageSearchPath);
          boolean traceEnabled = logger.isTraceEnabled();
          boolean debugEnabled = logger.isDebugEnabled();
          for (Resource resource : resources) {
             if (traceEnabled) {
                logger.trace("Scanning " + resource);
             }
             if (resource.isReadable()) {
                try {
                   MetadataReader metadataReader = getMetadataReaderFactory().getMetadataReader(resource);
                   if (isCandidateComponent(metadataReader)) {
                      ScannedGenericBeanDefinition sbd = new ScannedGenericBeanDefinition(metadataReader);
                      sbd.setSource(resource);
                      // 关键代码,判断是否一个候选的组件,如果我们自己写一个扫描组件,那么要自定义该方法
                      if (isCandidateComponent(sbd)) {
                         if (debugEnabled) {
                            logger.debug("Identified candidate component class: " + resource);
                         }
                         candidates.add(sbd);
                      }
                      else {
                         if (debugEnabled) {
                            logger.debug("Ignored because not a concrete top-level class: " + resource);
                         }
                      }
                   }
                   else {
                      if (traceEnabled) {
                         logger.trace("Ignored because not matching any filter: " + resource);
                      }
                   }
                }
                catch (Throwable ex) {
                   throw new BeanDefinitionStoreException(
                         "Failed to read candidate component class: " + resource, ex);
                }
             }
             else {
                if (traceEnabled) {
                   logger.trace("Ignored because not readable: " + resource);
                }
             }
          }
       }
       catch (IOException ex) {
          throw new BeanDefinitionStoreException("I/O failure during classpath scanning", ex);
       }
       return candidates;
    }
    
    // mybatis 自己实现了
    protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
       AnnotationMetadata metadata = beanDefinition.getMetadata();
       return (metadata.isIndependent() && (metadata.isConcrete() ||
             (metadata.isAbstract() && metadata.hasAnnotatedMethods(Lookup.class.getName()))));
    }
    

    mybatis自己实现了候选组件判断

      /**
       * {@inheritDoc}
       */
      @Override
      protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
        return beanDefinition.getMetadata().isInterface() && beanDefinition.getMetadata().isIndependent();
      }
    

    以上就是对batis扫描mapper自动装配的愚见,欢迎指正。

    展开全文
  • 解决方法收集: 1.增加注解: @SuppressWarnings("SpringJavaAutowiringInspection") 2.修改idea 配置 改成warning ...3.其他网上说的没有加载配置文件,没有设置扫描包的自行解决……...

    解决方法收集:
    1.增加注解:

    @SuppressWarnings("SpringJavaAutowiringInspection")

    2.修改idea 配置
    这里写图片描述

    改成warning

    3.其他网上说的没有加载配置文件,没有设置扫描包的自行解决……

    展开全文
  • spring的自动装配永远都是开启的,只是默认模式是no罢了 spring的自动装配从来都不是在需要注入的地方加上注解,这一点可以从基于xml的方式注入来看出,只需要设置default-autowire属性就够了,默认是no模式 ...
  • idea中Mapper自动装配问题 如果你的MapperScan都弄好了的话 dao实例报错 但是不影响使用 这是idea个别版本的问题 如果你不想看见那个红线 那么 设置下就好了 就不会报红错了 这个错误也是难了我好久 这个错误也是...
  • 解决办法: 在mapper interface上面,添加@Repository注解
  • MyBatis自动装配问题

    千次阅读 2018-12-13 19:19:59
    最近遇到同事在MyBatis的 mapper.xml文件里,定义了&lt;resultMap&gt;标签,但是里面并没有&lt;result&gt;将数据库的列映射为java对象的属性的标签,我认为这种写法是错误的,这样会导致映射不到...
  • 自动生成Mapper与Xml 自动生成PO类 插件下载装配方式: Settings–>Plugins–>Marketplace 中搜索下载安装并重启IDEA即可 Free Mybatis plugin: free-idea-mybatis是一款增强idea对mybatis支持的插件,主要...
  • @Mapper 的使用

    2021-01-10 12:45:06
    可以自动装配dao层,可替代启动时自动扫描,但是启动扫描更加便捷,无须在每个mapper上添加注解 在用idea写一个实现类时引用了mapper类的来调用dao层的处理,使用@Autowired注解时被标红线,找不到bean。 ...
  • 扫描mapper.xml文件问题

    千次阅读 2018-07-19 09:11:44
    @MapperScan(basePackages = {...如果Mapper.xml与Mapper.class在同一个包下且同名,spring扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配Mapper.class。 如果Mapper...
  • 2. 添加数据库表来管理定时任务的Job,并且生成实体和Mapper 3.创建job任务,写好定时器的任务逻辑等待调用 4.创建service层管理啊job,例如job的开启关闭。并且在服务层中将JobDetail和Trigger交予scheduler安排...
  • 如果Mapper.xml与Mapper.class在同一个包下且同名,spring扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配Mapper.class。 如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置...
  • 使用 Idea 的时候,自动装配 Mybatis 的 mapper。会一直出现红色波浪线的警告。看着难受。下面提供几种方式 方式一 为 @Autowired 注解设置required = false 方式二 用 @Resource 替换 @Autowired 方式三 在Mapper...
  • springboot+mybatis+通用mapper

    千次阅读 2018-08-07 17:31:12
    ① mybatis不是一个orm框架,他里面的实体类实际作用都是sql语句查询之后自动装配的结果集 ②tk.mybatis.mapper是一个开源的mybatis插件,是一个可以实现任意 MyBatis 通用方法的框架,项目提供...
  • config.xml配置generatorConfig.xml添加连接池配置类MBG逆向工程生成代码解决逆向生成xxxKey和xxxwithBlobs的问题使用MBG生成的代码访问数据库扫描mapper接口扫描mapper.xml实现访问数据库的控制器自动装配mapper...
  • 今日改造SpringBoot项目时,发现部分子项目下的页面报错,异常信息显示为:创建Bean错误,底层的原因是无法找到Mapper文件的依赖关系,Spring无法自动装配,建议将自动装配设置为true。 经过一番的了解与学习,通过...
  • 如图。...这不是错,只是容器自动装配 不了。。作为程序员,对红色都有过敏。 解决办法两种:1.改idea警告颜色 2.可以在Mapper或是dao层类上添加@Repository注解就可以 小白推荐第二种! ...
  • @Autowired 不成功问题

    2011-12-30 10:04:00
    使用SpringMVC,由于使用MyBatis,所以准备Service类里面,自动装配Mapper接口, 结果发现Mapper接口根本没有实例化,也就是根本没有装配成功。 原因,先来看一下配置文件 <?xml version="1.0" encoding=...
  • SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

自动装配mapper