广告
返回顶部
首页 > 资讯 > 精选 >基于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://www.lsjlt.com/news/351034.html(转载时请注明来源链接)

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

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 基于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+
      2022-11-12
    • 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整合mybatis的方法是什么
      Spring整合MyBatis的方法有以下几种: 使用Spring的XML配置文件进行整合: 在Spring配置文件中配置数据...
      99+
      2023-10-25
      spring mybatis
    • 使用Spring boot怎么对Mybatis进行整合
      这篇文章将为大家详细讲解有关使用Spring boot怎么对Mybatis进行整合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、文件结构DataBaseConfiguration.Jav...
      99+
      2023-05-31
      springboot mybatis
    • Spring Boot怎么利用XML方式整合MyBatis
      本篇内容介绍了“Spring Boot怎么利用XML方式整合MyBatis”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言下...
      99+
      2023-06-30
    • Mybatis_day06:Mybatis整合Spring的步骤是什么
      本篇内容介绍了“Mybatis_day06:Mybatis整合Spring的步骤是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大...
      99+
      2022-10-19
    • 完整的医院就诊挂号系统基于Spring MVC + Spring + MyBatis实现
      目录一、语言和环境二、实现效果三、实现代码资源下载:点此下载 一、语言和环境 1.实现语言: JAVA语言。 2.环境要求: MyEclipse/Eclipse + Tomcat +...
      99+
      2022-11-12
    • Spring整合MyBatis的实现方法是什么
      这篇文章主要讲解了“Spring整合MyBatis的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring整合MyBatis的实现方法是什么”吧!一、Spring 项目整体...
      99+
      2023-07-05
    • 使用Spring Boot 怎么对mybatis与swagger2进行整合
      本篇文章给大家分享的是有关使用Spring Boot 怎么对mybatis与swagger2进行整合,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先是pom文件的一些依赖&l...
      99+
      2023-05-31
      springboot mybatis swagger2
    • 利用spring与springmvc对mabytis进行整合时无法注入mapper怎么解决
      利用spring与springmvc对mabytis进行整合时无法注入mapper怎么解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 单元测试的时候,单...
      99+
      2023-05-31
      spring springmvc mabytis
    • Java Spring之基于注解的AOP怎么配置
      本篇内容主要讲解“Java Spring之基于注解的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之基于注解的AOP怎么配置”吧!1 环境搭建1.1 第一步:...
      99+
      2023-07-05
    • springboot怎么整合mybatis实现数据库的更新批处理
      本文小编为大家详细介绍“springboot怎么整合mybatis实现数据库的更新批处理”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot怎么整合mybatis实现数据库的更新批处理”文章能帮助大家解决疑惑,下面跟着小编的...
      99+
      2023-07-05
    • 基于md5的文件完整性检测是怎么样的
      这期内容当中小编将会给大家带来有关基于md5的文件完整性检测是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。md5sum是Linux平台下面用来检测文件完整性的给力工具,维基百科是这样来解释&nb...
      99+
      2023-06-06
    • C++怎么实现基于不相交集合的kruskal算法
      这篇文章主要介绍“C++怎么实现基于不相交集合的kruskal算法”,在日常操作中,相信很多人在C++怎么实现基于不相交集合的kruskal算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么实现基于...
      99+
      2023-07-05
    • Spring Security基于注解的接口角色访问控制怎么实现
      本文小编为大家详细介绍“Spring Security基于注解的接口角色访问控制怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Security基于注解的接口角色访问控制怎么实现”文章能帮助大家解决疑惑,下面跟着小编的...
      99+
      2023-06-16
    • Spring IOC容器基于XML外部属性文件的Bean管理怎么配置
      本篇内容主要讲解“Spring IOC容器基于XML外部属性文件的Bean管理怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC容器基于XML外部属性...
      99+
      2023-06-30
    • 基于matlab对比度和结构提取的多模态解剖图像融合怎么实现
      本篇内容主要讲解“基于matlab对比度和结构提取的多模态解剖图像融合怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于matlab对比度和结构提取的多模态解剖图像融合怎么实现”吧!一、...
      99+
      2023-06-21
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作