广告
返回顶部
首页 > 资讯 > 精选 >mybatis集成到spring的方式有哪些
  • 829
分享到

mybatis集成到spring的方式有哪些

2023-07-06 13:07:55 829人浏览 泡泡鱼
摘要

本篇文章和大家了解一下mybatis集成到spring的方式有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1 前言1.1 集成spring前使用mybatis的方式mybatis单独使用时,一般的写法如下所示://

本篇文章和大家了解一下mybatis集成到spring的方式有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

1 前言

1.1 集成spring前使用mybatis的方式

mybatis单独使用时,一般的写法如下所示:

// mybatis初始化String resource = "mybatis-config.xml";  InputStream inputStream = Resources.getResourceAsStream(resource);  // 读取配置文件,创建sqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 打开SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();  // 执行SQL语句List list = sqlSession.selectList("com.gameloft9.demo.dataaccess.dao.system.UserMapper.getByLoginName");

1.2 集成mybatis到spring的关键步骤

将mybatis集成到spring之后,就可以被spring的ioc容器托管,再也不用自己创建SqlSessionFactory 、打开SqlSession等操作。具体的集成方法可以参考之前写的文章:spring集成mybatis进行数据库访问,其中最重要的配置就是定义好SqlSessionFactoryBean,如下所示:

<!--mybatis sqlSeesionFactory配置--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:mybatis-config.xml" /><property name="mapperLocations" value="classpath:mapper/*Mapper.xml" /><property name="typeAliasesPackage" value="com.gameloft9.demo.dataaccess.model" /></bean>

因此想要了解spring集成mybatis的原理,就应该从SqlSessionFactoryBean入手。

2 SqlSessionFactoryBean对象分析

SqlSessionFactoryBean,顾名思义跟SqlSessionFactory有着莫大的关系,它的类结构如下所示:

mybatis集成到spring的方式有哪些

SqlSessionFactoryBean实现了InitializingBean接口,我们知道InitializingBean在Bean的生命周期里面扮演了重要的角色,spring创建bean的流程大概是:
1、创建beanFactory
2、加载beanDefinition
3、通过反射创建bean实例
4、bean的生命周期扩展点调用
其中第4步骤又包含:
5、如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
6、如果bean实现IntializingBean了,调用它的afterPropertySet方法。
7、如果bean定义了init-method,调用init方法
8、如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
9、如果bean实现了 DisposableBean,它将调用destroy()方法。
10、如果bean定义了destroy-method,调用destroy方法。
因此在我们xml配置好的dataSource,configLocation等属性设置好后,SqlSessionFactoryBean就在afterPropertySet()方法里面对SqlSessionFactory进行初始化。

mybatis集成到spring的方式有哪些

2.1 buildSqlSessionFactory做了什么事情?

buildSqlSessionFactory里面就是具体怎么创建SqlSeesionFactory的,代码流程比较长,我们用一个简单时序图来展示:

mybatis集成到spring的方式有哪些

在解析完各种配置后,调用了return this.sqlSessionFactoryBuilder.build(configuration);来创建buildSqlSessionFactory,是不是和之前的方式很类似了?只是一个是入参是resource,一个是我们解析后的配置configuration对象。

2.2 为什么是SqlSessionFactoryBean却可以使用SqlSessionFactory?

我们注册的是SqlSessionFactoryBean这个bean,为什么却说SqlSessionFactory也成为了spring的bean呢?因为我们的SqlSessionFactoryBean还实现了FactoryBean这个接口。

Spring 中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean 即 FactoryBean。FactoryBean跟普通Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。
一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,Spring为此提供了一个org.springframework.bean.factory.FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化Bean的逻辑。

然后回到maybatis这里,我们通过时序图确实发现创建SqlSessionFactory十分复杂,要解析大量的配置之后才能创建,因此我们实现了FactoryBean接口:

mybatis集成到spring的方式有哪些

在getObject里面选择性的进行初始化并返回SqlSessionFactory对象。
至于获取SqlSessionFactorybean实例的时候,是怎么走到FactoryBean的getObject的方法的,可以参考AbstractBeanFactory.getBean方法,这属于spring ioc范畴了,这个需要很长的篇幅才能讲清楚,有机会我会单独写一篇spring怎么创建bean和获取bean的。

3 验证demo

如果你有demo的话,可以单步跟踪。如果没有的话,可以使用作者之前做过的一个基于layui的通用后台系统,简单的安装mysql和客户端之后(本地安装Mysql和客户端真的很简单30分钟搞定吧)、稍微改下配置就可以直接运行这个项目(这个项目麻雀虽小,但五脏俱全,如果觉得好用,可以帮忙点个start)。

验证之前,我们先做个猜想:SqlSessionFactory是在afterPropertiesSet里初始化的还是在getObject里判断为空再初始化的?

我们分别在SqlSessionFactoryBean的afterPropertiesSet和getObject打上断点,然后debug项目,如下所示:

mybatis集成到spring的方式有哪些

可以看到,在SqlSessionFactoryBean实例创建后,在afterPropertiesSet对SqlSessionFactory进行了初始化和创建。然后在获取它的时候,走的是getObject方法(这时候sqlSessionFactory已经不为空了):

mybatis集成到spring的方式有哪些

4 举一反三

4.1 插件的配置是在SqlSessionFactoryBean的定义里面还是configuration的xml结点下面?

demo里的插件我们是写在mybatis-config.xml里面的configuration结点里面的,如下所示:

mybatis集成到spring的方式有哪些

这是通用的做法,当然你也可以经常看到有人配置在SqlSessionFactoryBean的定义里面,如下所示:

mybatis集成到spring的方式有哪些

那么问题来了,这两个有什么区别吗?
这个比较简单,作者自问自答一下。
这两个都可以作为插件的配置方式,都会起作用,因为在buildSqlSessionFactory过程中,如果发现插件不为空,就会添加到插件集合里面去,如下所示:

mybatis集成到spring的方式有哪些

然后再解析xml时,又会将configuration的配置解析一遍,里面也包含插件的解析过程:

mybatis集成到spring的方式有哪些

mybatis集成到spring的方式有哪些

所以我们只需要在一个地方配置好就行了。然后它们有一个细微的差别,因为configuration是mybatis的配置,所以在configuration中的插件配置,是通过调用setProperties方法将属性传递进来,然后设置到插件的属性中。SqlSessionFactoryBean的插件配置不会调用setProperties方法,直接走的setter注入将属性注入进去。

mybatis集成到spring的方式有哪些

这个大家也可以自行验证下。

4.2 mybatis的事务管理和spring的事务管理什么关系?

如果你仔细看了SqlSessionFactoryBean创建SqlSessionFactory的过程,那么肯定会注意到有这么一个调用:

if (this.transactionFactory == null) {      this.transactionFactory = new SpringManagedTransactionFactory();    }

因为我们配置的是spring的事务,在mybatis的配置文件里面没有为SqlSessionFactoryBean配置事务,如下所示:

mybatis集成到spring的方式有哪些

所以那段代码里面transactionFactory会因为==null,而创建一个SpringManagedTransactionFactory,下面的截图也刚好印证了我们的观点。

mybatis集成到spring的方式有哪些

那么问题来了,mybatis的事务和spring的事务是什么关系?它们是怎么配合的?
这个问题回答比较复杂,需要有spring事务的知识,大家可以尝试自己找答案,或者等作者后续的文章来解答。

5 总结

mybatis通过SqlSessionFactoryBean将SqlSessionFactory对象集成到spring中,它实现了InitializingBean接口,在SqlSessionFactoryBean初始化时解析配置并创建DefaultSqlSessionFactory对象。它还实现了FactoryBean,在getObject时返回我们创建好的DefaultSqlSessionFactory,使得DefaultSqlSessionFactory也被spring管理起来。
很多框架集成到spring的方法基本都是靠InitializingBean和FactoryBean这两个接口来实现的,这是一种非常好的设计,值得我们好好学习

以上就是mybatis集成到spring的方式有哪些的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注编程网精选频道哦!

--结束END--

本文标题: mybatis集成到spring的方式有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • mybatis集成到spring的方式有哪些
    本篇文章和大家了解一下mybatis集成到spring的方式有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1 前言1.1 集成spring前使用mybatis的方式mybatis单独使用时,一般的写法如下所示://...
    99+
    2023-07-06
  • mybatis集成到spring的方式详解
    目录1 前言1.1 集成spring前使用mybatis的方式1.2 集成mybatis到spring的关键步骤2 SqlSessionFactoryBean对象分析2.1 buil...
    99+
    2023-05-20
    mybatis集成spring mybatis集成到spring
  • spring、mybatis配置方式有哪些
    这篇文章将为大家详细讲解有关spring、mybatis配置方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 动态代理实现 不用写dao的实现类这种方式比较简单,不用实现dao层,只需要定义接...
    99+
    2023-05-30
    spring mybatis
  • spring mybatis获取mapper的方式有哪些
    本篇内容介绍了“spring mybatis获取mapper的方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring-myba...
    99+
    2023-07-05
  • 详解Spring Boot集成MyBatis(注解方式)
    MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。spring Boot是能支持快速创建Spring应用的Java框架。本文通过一个例子来学习Spring B...
    99+
    2023-05-31
    spring boot mybatis
  • PHP和Spring框架在Bash环境下的集成方式有哪些?
    随着互联网的快速发展,Web应用程序的开发和维护变得越来越重要。PHP和Spring是两个常用的Web开发框架,它们都能够帮助开发人员快速构建高效、安全、可靠的Web应用程序。在Bash环境下,PHP和Spring框架的集成方式有多种,下...
    99+
    2023-09-10
    npm bash spring
  • Spring Cloud集成项目有哪些
    这篇文章主要讲解了“Spring Cloud集成项目有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Cloud集成项目有哪些”吧!Spring Cloud Config配置...
    99+
    2023-06-05
  • mybatis分页的方式有哪些
    本篇内容主要讲解“mybatis分页的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis分页的方式有哪些”吧!mybatis分页的方式:1、借助数组进行分页,首先查询出全部数...
    99+
    2023-07-04
  • Spring用到的设计模式有哪些
    Spring用到的设计模式有哪些1、简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring...
    99+
    2022-02-01
    java教程 spring 设计模式
  • Mybatis typeAlias的配置方式有哪些
    这篇文章主要介绍了Mybatis typeAlias的配置方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mybatis typeAlias的配置方式有哪些文章都会有所收获,下面我们一起来看看吧。Myb...
    99+
    2023-06-26
  • spring的注入方式有哪些
    Spring的注入方式有三种:1. 构造器注入(Constructor Injection):通过构造方法来注入依赖对象。2. Se...
    99+
    2023-09-27
    spring
  • Spring的配置方式有哪些
    Spring的配置方式有以下几种:1. XML配置:使用XML文件配置Spring的各种组件,包括Bean的定义、依赖关系、AOP等...
    99+
    2023-08-15
    Spring
  • spring配置的方式有哪些
    在Spring框架中,配置的方式有以下几种: XML配置:使用XML文件来配置Spring的各种组件、依赖关系和属性等。XML文...
    99+
    2023-10-25
    spring
  • spring 的配置方式有哪些
    这篇文章将为大家详细讲解有关spring 的配置方式有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。就目前来说spring的配置方式一般为两种:JAVA配置和注解配置//注解配置:@Se...
    99+
    2023-05-31
    spring
  • iOS SDK集成的方法有哪些
    这篇文章主要介绍了iOS SDK集成的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇iOS SDK集成的方法有哪些文章都会有所收获,下面我们一起来看看吧。###CocoaPods集成安装CocoaPo...
    99+
    2023-06-05
  • Spring涉及到的设计模式有哪些
    这篇文章主要介绍“Spring涉及到的设计模式有哪些”,在日常操作中,相信很多人在Spring涉及到的设计模式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring涉及到的设计模式有哪些”的疑惑有所...
    99+
    2023-06-02
  • Spring注入方式有哪些
    本篇内容介绍了“Spring注入方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring的三种注入方式属性(filed)注入这种...
    99+
    2023-06-25
  • 详解Spring集成Redis的两种方式
    目录一、使用Jedis方式集成1、增加依赖2、配置项3、配置连接池4、测试使用spring-data-redis1、引入依赖2、配置项3、使用4、可能会遇到的坑哨兵和集群总结:在工作...
    99+
    2022-11-12
  • Spring AOP实现的方式有哪些
    Spring AOP实现的方式有以下几种:1. 基于XML的配置:通过在Spring配置文件中使用元素来配置切面和通知。2. 基于注...
    99+
    2023-08-18
    Spring AOP
  • spring装配bean的方式有哪些
    Spring装配Bean的方式有以下几种:1. 基于XML配置文件:通过在XML配置文件中定义Bean的方式进行装配,可以使用元素定...
    99+
    2023-09-27
    spring bean
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作