• spring-boot集成mybatis真的很简单吗?


    在日常的后端开发中,使用mybatis作为DAO层的持久框架已经是惯例。但很多时候都是在别人搭好的框架中进行开发,对怎么搭建环境是一知半解,今天就来实践下。

    一、集成分哪些步骤

    来看下集成mybatis需要哪些步骤,

    1、确定环境及依赖

    2、配置文件;

    3、测试

    二、环境及依赖

    这里,基于springboot集成mybatis。先看下具体的版本,

    springboot:2.3.3.RELEASE

    mybatis-spring-boot-starter:2.3.0

    mysql驱动:8.0.32

    下面具体看下这些依赖,spring-boot自不用说,就是在这个环境下的;

    mybatis-spring-boot-starter

    mybatis-spring-boot-starter是针对mybatis和spring-boot集成而开发的一个依赖,里边包含了所需的依赖,方便集成,其实spring官方还有很多这样的starter,例,

    可以看到官方提供了很多starter供开发者使用。怎么没看到mybatis-spring-boot-starter呐,不急,它不是官方提供的,而是mybatis官方提供的,多提一句,对于starter的命名官方也给出了这样的建议,官方提供的spring-boot-starter-*,而第三方的则是thirdpartyproject-spring-boot-starter,

    详见:https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/pdf/spring-boot-reference.pdf

    你想创建自己的starter吗,可以在文末“推荐阅读”里找到相关的博文。

    mysql驱动也不用说,要使用程序访问mysql,自然少不了mysql的驱动。

    用一张图来描述下,springboot下集成mybatis的一个逻辑流程,

    我们都知道,可以在程序中直接使用JDBC访问mysql,也可以使用mybatis访问mysql,在spring的环境下则通过mybatis-spring访问mysql。从图中可以看到访问路径更长了,那集成mybatis的意义是什么,答案是使用更简单,还记得刚学习的时候使用JDBC的噩梦吗?

    看下,引入的依赖,我这里使用父子项目,采用在父pom中管理依赖,子pom使用的原则。

    父pom.xml

               
                <dependency>
                    <groupId>org.mybatis.spring.bootgroupId>
                    <artifactId>mybatis-spring-boot-starterartifactId>
                    <version>2.3.0version>
                dependency>
                
                <dependency>
                    <groupId>com.mysqlgroupId>
                    <artifactId>mysql-connector-jartifactId>
                    <version>8.0.32version>
                dependency>

    子pom.xml这里不再列出,看下最终的依赖,

    可以看到mybatis-spring-boot-starter中已经包含了mybatis、mybatis-spring等依赖,mybatis依赖不用单独引了。换句话说,在spring-boot中集成mybatis且连接mysql使用下面两个依赖即可,

    1、mybatis-spring-boot-starter

    2、mysql-connector-j

    访问其他数据库换掉驱动即可。

    三、配置文件

    我们知道使用mybaits的目的是访问数据库,而且mybatis访问数据库使用的是JDBC驱动的方式,那么配置的话,可以分为两块,

    1、mybatis配置

    2、JDBC配置文件

    3.1、mybatis配置

    使用过mybatis的都了解,mybatis是基于xml的,使用xml来写sql实现数据库的访问,java是面向对象的,所以要操作文件,或者说调用xml中的方法需要一个对象,这个对象就是Mapper接口,所以,mybatis的配置文件有两块,一个是配置xml,另一个就是告诉mybatis将xml映射到哪些接口中。

    application.yml中配置mybatis的xml

    mybatis:
      mapper-locations: classpath*:mapper/*.xml

    这些xml文件在resource文件夹下,

    接下来就是mapper接口,使用@MapperScan注解,在启动类上配置扫描的包

    这样就完成了mybatis的配置。接下来就是JDBC的配置。

    3.2、JDBC配置文件

    结合之前使用JDBC的经验,我们知道要创建一个JDBC连接需要知道数据库驱动名,连接URL、用户名、密码,这些就可以了。这里也是配置这些,在application.yml中进行配置,

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
        username: root
        password: 123456

    这样JDBC的配置就可以了。上边的具体配置需要自行修改成自己的。

    有小伙伴说不对,我的配置里还有多了一个,

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
        username: root
        password: 123456
        type: com.alibaba.druid.pool.DruidDataSource

    没错,多的配置是datasource的类型,这里可以不配,默认是com.zaxxer.hikari.HikariDataSource,当然了也可以指定,比如使用c3p0、druid等第三方数据库连接池,这都是可以的(前提引入相关依赖)。不配置默认使用下面三个中的一个,有兴趣的可以看下org.springframework.boot.jdbc.DataSourceBuilder类的实现,

     

    以上,就完成配置。经过这几步就完成了mybatis和spring-boot的集成,是不是很好奇为什么这么简单?下面简单分析下。

     

    四、mybatis是怎么集成到springboot中的

    讲这个问题之前,先要达成一个共识:spring是一个bean的容器,管理bean的生命周期。

    来看下mybatis中的Mapper接口,该接口会被实例化为一个代理对象,在代理对象中有一个sqlSession的变量,该变量是SqlSessionTemplate类型的,SqlSessionTemplate是mybatis中的类,

    它是怎么被注入到spring管理的类中,答案是通过MybatisAutoConfiguration这个类,该类在mybatis-spring-boot-starter中,有这样一个方法,

    该方法会生成一个sqlSessionTemplate,这样就可以和mybatis联系在一起了,而更有意思的是下面这个方法,生成sqlSessionFactory的方法,追踪该方法可以看到mybatis的源码中,并熟悉整个流程。

    感兴趣的小伙伴可以自己看下源码哦,同时也可以看“推荐阅读”中有关mybaits源码的分析。

     

    五、总结

    关于spring-boot集成mybatis的有关问题就分享到这儿了,遵循下面几点,

    1、添加相关依赖,mybatis-spring-boot-starter、数据库驱动;

    2、mybatis的配置,扫描mapper接口、加载xml文件;

    3、数据源配置,驱动类、url、user、password等;

    最后,本文用到的源码均可关注下方公众号获得,欢迎与志同道合的你一起交流学习。

    推荐阅读

    我的第一个springboot  starter

    mybatis源码配置文件解析之一:解析properties标签

    springboot引入mybatis遇到的坑

  • 相关阅读:
    scala语法(一)(有java基础速学)
    【Android】【基础】
    JavaScript 对象 Object
    Softing IT Networks线上研讨会 | 9月 (下篇)
    Qt QMetaObject::invokeMethod
    儿童运动护齿市场现状及未来发展趋势分析
    【毕业设计】深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别
    CleanMyMac4.11.3macOS系统垃圾清理应用
    【微信小程序】轮播图——swpier组件
    session和jwt
  • 原文地址:https://www.cnblogs.com/teach/p/17461592.html