返回顶部
首页 > 资讯 > 精选 >基于Spring怎么整合mybatis的mapper
  • 379
分享到

基于Spring怎么整合mybatis的mapper

2023-07-05 09:07:42 379人浏览 安东尼
摘要

本篇内容主要讲解“基于spring怎么整合mybatis的mapper”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Spring怎么整合mybatis的mapper”吧!Spring整合my

本篇内容主要讲解“基于spring怎么整合mybatis的mapper”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Spring怎么整合mybatis的mapper”吧!

    Spring整合mybatis的mapper生成过程

    基于Spring怎么整合mybatis的mapper

    mapperScannerConfigurer实现了BeandifinitionReGIStryPostProcessor

    后置处理beanFactory时会调用其postProcessBeanDefinitionRegistry

    基于Spring怎么整合mybatis的mapper

    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {    if (this.processPropertyPlaceHolders) {      processPropertyPlaceHolders();    }     ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);    scanner.setAddToConfig(this.addToConfig);    scanner.setAnnotationClass(this.annotationClass);    scanner.setMarkerInterface(this.markerInterface);    scanner.setsqlSessionFactory(this.sqlSessionFactory);    scanner.setSqlSessionTemplate(this.sqlSessionTemplate);    scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName);    scanner.setSqlSessionTemplateBeanName(this.sqlSessionTemplateBeanName);    scanner.setResourceLoader(this.applicationContext);    scanner.setBeanNameGenerator(this.nameGenerator);    scanner.setMapperFactoryBeanClass(this.mapperFactoryBeanClass);    scanner.registerFilters();//扫描包集合,注册mapper的beandifinition    scanner.scan(StringUtils.tokenizeToStringArray(this.basePackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS));  }

    基于Spring怎么整合mybatis的mapper

    ClassPathMapperScanner#doScan

    public Set<BeanDefinitionHolder> doScan(String... basePackages) {    Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages);     if (beanDefinitions.isEmpty()) {      LOGGER.warn(() -> "No MyBatis mapper was found in '" + Arrays.toString(basePackages) + "' package. Please check your configuration.");    } else {//会对bean信息进行一些更改和添加,如设置propertyValues,向其中添加sqlsessionFactory等属性信息等      processBeanDefinitions(beanDefinitions);    }     return beanDefinitions;  }

    ClassPathBeanDefinitionScanner#doScan

    protected Set<BeanDefinitionHolder> doScan(String... basePackages) {Assert.notEmpty(basePackages, "At least one base package must be specified");Set<BeanDefinitionHolder> beanDefinitions = new LinkedHashSet<>();for (String basePackage : basePackages) {//遍历集合扫描包,获取包下的可用的mapper信息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;}

     基于Spring怎么整合mybatis的mapper

    如上在进行包扫描时,会调用ClassPathBeanDefinitionScanner#doScan,进行beanDefinition的扫描和注册

    执行完后调用ClassPathMapperScanner#processBeanDefinitions

    private void processBeanDefinitions(Set<BeanDefinitionHolder> beanDefinitions) {//有省略部分           //这里有遍历所有mapper//将所有mapper的beanClass改为了mapperFactoryBean,最后生成的bean也是该类型的,只有在用到的//时候才会调用getObject生成mapper      definition.setBeanClass(this.mapperFactoryBeanClass);//接下来是添加一些MapperFactoryBean的属性信息到beandefinition里,在生成实例的时候,会根据//此处传入的值来进行具体设置,如sqlsessionFactory      definition.getPropertyValues().add("addToConfig", this.addToConfig);             if (StringUtils.hasText(this.sqlSessionFactoryBeanName)) {        definition.getPropertyValues().add("sqlSessionFactory", new RuntimeBeanReference(this.sqlSessionFactoryBeanName));            } else if (this.sqlSessionFactory != null) {        definition.getPropertyValues().add("sqlSessionFactory", this.sqlSessionFactory);              }       if (StringUtils.hasText(this.sqlSessionTemplateBeanName)) {                definition.getPropertyValues().add("sqlSessionTemplate", new RuntimeBeanReference(this.sqlSessionTemplateBeanName));              } else if (this.sqlSessionTemplate != null) {                definition.getPropertyValues().add("sqlSessionTemplate", this.sqlSessionTemplate);              }  }

    确定了所有的mapper的beanDefinition为MapperFactoryBean类型后,

    确定在生成的bean皆为MapperFactoryBean,在getBean时会调用MapperFactoryBean#getObject

    基于Spring怎么整合mybatis的mapper

    mapperInterface是在MapperFactoryBean创建时,会调用有参构造创建实例,值是创建是

    基于Spring怎么整合mybatis的mapper

    基于Spring怎么整合mybatis的mapper

     构造方法参数的获取从mdb中

    基于Spring怎么整合mybatis的mapper

    创建除了传入mapperInterface,还会在设置属性值时调用MapperFactoryBean的父类SqlSessionDaoSupport#setSqFactory 将mdb中的sqlsessionfactory传入其中

    基于Spring怎么整合mybatis的mapper

    mdb的sqlsessionFactory信息来历

    基于Spring怎么整合mybatis的mapper

    查看方法栈调用,可以看到在开始填充属性时会去mdb中判断是否有propertyValue,如果有就返回,这就是之前扫描mapper后ClassPathMapperScanner#processBeanDefinitions对mdb的一些设置

    在创造service时,如果有@Autowire 注入mapper,在createBean时会调用getObject

    mdb只有一份,可得sqlsessionfactory即只有一份,sqlsessionTemplate一个mapper一份。

    到此,相信大家对“基于Spring怎么整合mybatis的mapper”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: 基于Spring怎么整合mybatis的mapper

    本文链接: https://lsjlt.com/news/351034.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 基于Spring怎么整合mybatis的mapper
      本篇内容主要讲解“基于Spring怎么整合mybatis的mapper”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Spring怎么整合mybatis的mapper”吧!Spring整合my...
      99+
      2023-07-05
    • 基于Spring整合mybatis的mapper生成过程
      目录Spring整合mybatis的mapper生成过程ClassPathMapperScanner#doScanClassPathBeanDefinitionScanner#doS...
      99+
      2023-03-07
      Spring整合mybatis mapper Spring mybatis mapper mybatis的mapper
    • 基于Spring整合mybatis注解扫描是否成功的问题
      目录Spring整合mybatis注解扫描是否成功Mybatis注解@MapperScan扫描包报:Invalid bound statement (not found)总结Spri...
      99+
      2024-04-02
    • Spring基于注解整合Redis完整实例
      在《Redis之——Spring整合Redis》一文中,向大家介绍了如何将spring与Redis整合起来,但不是基于注解的形式,很多同学都希望能够通过注解的形式来简单的将Spring与Redis整合起来,这样,在使用的时候,只需要在相应的...
      99+
      2023-05-31
      spring redis 注解
    • Spring + Spring Boot + MyBatis + MongoDB的整合教程
      前言我之前是学Spring MVC的,后面听同学说Spring Boot挺好用,极力推荐我学这个鬼。一开始,在网上找Spring Boot的学习资料,他们博文写得不是说不好,而是不太详细。我就在想我要自己写一篇尽可能详细的文章出来,下面话不...
      99+
      2023-05-30
      springboot mybatis mongodb
    • Spring整合Mybatis的全过程
      1.Spring配置文件 1.1配置数据库连接池 <!--读取文件--> <util:properties id="config" location="cl...
      99+
      2024-04-02
    • spring整合mybatis的方法是什么
      Spring整合MyBatis的方法有以下几种: 使用Spring的XML配置文件进行整合: 在Spring配置文件中配置数据...
      99+
      2023-10-25
      spring mybatis
    • Mybatis整合Spring 由于版本引起的BUG问题
      错误信息:org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [SpringMVC] in context with path...
      99+
      2023-05-31
      mybatis 整合 spring
    • 使用spring怎么对mybatis进行整合
      本篇文章为大家展示了使用spring怎么对mybatis进行整合,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 数据库连接配置信息jdbc.properties#mysql version dat...
      99+
      2023-05-31
      spring mybatis
    • 基于spring+springmvc+hibernate 整合深入剖析
      目录1.新建一个maven web项目2.pom文件,导入jar包3.配置文件4.spring-mvc和spring整合5.spring和hibernate整合6.总结三大框架反反复...
      99+
      2024-04-02
    • Spring整合MyBatis的实现步骤
      目录一、Spring 项目整体目录结构二、Spring 整合 MyBatis 开发环境三、Mapper 接口无实现类开发整合MyBatis 是一款常用的持久层框架,使得程序能够以调用...
      99+
      2023-02-24
      Spring 整合 MyBatis Spring与MyBatis整合
    • Mybatis_day06:Mybatis整合Spring的步骤是什么
      本篇内容介绍了“Mybatis_day06:Mybatis整合Spring的步骤是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大...
      99+
      2024-04-02
    • Spring Boot怎么利用XML方式整合MyBatis
      本篇内容介绍了“Spring Boot怎么利用XML方式整合MyBatis”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言下...
      99+
      2023-06-30
    • 使用Spring boot怎么对Mybatis进行整合
      这篇文章将为大家详细讲解有关使用Spring boot怎么对Mybatis进行整合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、文件结构DataBaseConfiguration.Jav...
      99+
      2023-05-31
      springboot mybatis
    • Spring事务&Spring整合MyBatis的两种方式
      目录Spring整合MyBatis整合方式一整合方式二Spring事务Spring整合MyBatis 在整合之前需要保证mybatis、springframework、mybatis...
      99+
      2023-02-15
      Spring整合MyBatis Spring事务
    • SpringBoot怎么整合mybatis+mybatis-plus
      本文小编为大家详细介绍“SpringBoot怎么整合mybatis+mybatis-plus”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot怎么整合mybatis+mybatis-plus”文章能帮助大家解决疑惑,下面跟...
      99+
      2023-07-02
    • Spring Boot整合Mybatis的配置方法
      这篇文章主要讲解了“Spring Boot整合Mybatis的配置方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot整合Mybatis的配置方法”吧!目录配置文件形式p...
      99+
      2023-06-20
    • Spring和Mybatis整合的原理详解
      目录前言简单猜想案例搭建通过扫描接口正式开始setBeanNamesetApplicationContextafterPropertiespostProcessBeanDefinit...
      99+
      2024-04-02
    • Spring整合MyBatis的实现方法是什么
      这篇文章主要讲解了“Spring整合MyBatis的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring整合MyBatis的实现方法是什么”吧!一、Spring 项目整体...
      99+
      2023-07-05
    • SpringBoot怎么整合Mybatis
      这篇文章主要介绍了SpringBoot怎么整合Mybatis的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么整合Mybatis文章都会有所收获,下面我们一起来看看吧。Mybatis的简单介...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作