我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于Spring怎么整合mybatis的mapper

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于Spring怎么整合mybatis的mapper

本篇内容主要讲解“基于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”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    基于Spring怎么整合mybatis的mapper

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

    下载Word文档

    猜你喜欢

    基于Spring怎么整合mybatis的mapper

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

    基于Spring整合mybatis的mapper生成过程

    这篇文章主要介绍了Spring整合mybatis的mapper生成过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-07

    Mybatis整合Spring 由于版本引起的BUG问题

    错误信息:org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [SpringMVC] in context with path
    2023-05-31

    spring整合mybatis的方法是什么

    Spring整合MyBatis的方法有以下几种:使用Spring的XML配置文件进行整合:在Spring配置文件中配置数据源和事务管理器。使用`SqlSessionFactoryBean`配置MyBatis的`SqlSessionFact
    2023-10-25

    使用spring怎么对mybatis进行整合

    本篇文章为大家展示了使用spring怎么对mybatis进行整合,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 数据库连接配置信息jdbc.properties#mysql version dat
    2023-05-31

    使用Spring boot怎么对Mybatis进行整合

    这篇文章将为大家详细讲解有关使用Spring boot怎么对Mybatis进行整合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、文件结构DataBaseConfiguration.Jav
    2023-05-31

    Spring Boot怎么利用XML方式整合MyBatis

    本篇内容介绍了“Spring Boot怎么利用XML方式整合MyBatis”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言下图是整个整
    2023-06-30

    Spring整合MyBatis的实现方法是什么

    这篇文章主要讲解了“Spring整合MyBatis的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring整合MyBatis的实现方法是什么”吧!一、Spring 项目整体
    2023-07-05

    使用Spring Boot 怎么对mybatis与swagger2进行整合

    本篇文章给大家分享的是有关使用Spring Boot 怎么对mybatis与swagger2进行整合,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先是pom文件的一些依赖
    2023-05-31

    利用spring与springmvc对mabytis进行整合时无法注入mapper怎么解决

    利用spring与springmvc对mabytis进行整合时无法注入mapper怎么解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 单元测试的时候,单
    2023-05-31

    Java Spring之基于注解的AOP怎么配置

    本篇内容主要讲解“Java Spring之基于注解的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之基于注解的AOP怎么配置”吧!1 环境搭建1.1 第一步:
    2023-07-05

    springboot怎么整合mybatis实现数据库的更新批处理

    本文小编为大家详细介绍“springboot怎么整合mybatis实现数据库的更新批处理”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot怎么整合mybatis实现数据库的更新批处理”文章能帮助大家解决疑惑,下面跟着小编的
    2023-07-05

    基于md5的文件完整性检测是怎么样的

    这期内容当中小编将会给大家带来有关基于md5的文件完整性检测是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。md5sum是Linux平台下面用来检测文件完整性的给力工具,维基百科是这样来解释 md
    2023-06-06

    C++怎么实现基于不相交集合的kruskal算法

    这篇文章主要介绍“C++怎么实现基于不相交集合的kruskal算法”,在日常操作中,相信很多人在C++怎么实现基于不相交集合的kruskal算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么实现基于
    2023-07-05

    Spring Security基于注解的接口角色访问控制怎么实现

    本文小编为大家详细介绍“Spring Security基于注解的接口角色访问控制怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Security基于注解的接口角色访问控制怎么实现”文章能帮助大家解决疑惑,下面跟着小编的
    2023-06-16

    Spring IOC容器基于XML外部属性文件的Bean管理怎么配置

    本篇内容主要讲解“Spring IOC容器基于XML外部属性文件的Bean管理怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC容器基于XML外部属性文件的Bean管理怎
    2023-06-30

    基于matlab对比度和结构提取的多模态解剖图像融合怎么实现

    本篇内容主要讲解“基于matlab对比度和结构提取的多模态解剖图像融合怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于matlab对比度和结构提取的多模态解剖图像融合怎么实现”吧!一、
    2023-06-21

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录