前边分享了springboot项目的创建及springboot项目的默认配置文件等,想温习的小伙伴可移步至文章末尾阅读,感谢。今天来分享下springboot引入mybatis框架的步骤,有小伙伴会说很简单,引入依赖,加上配置就完事了,话是没有错的,但是你知道每一步都在做什么吗,本着知其然知其所以然的态度,一步一步实现mybatis框架的引入。会有很多意想不到的精彩,继续下去吧。

一、引入mybatis的依赖

  在springboot中要使用mybatis的,必然要引入mybatis的依赖,使用过spring的小伙伴都知道要在spring项目中使用mybatis,除了要引入mybatis的依赖外,还要引入spring和mybatis结合的依赖,名字是mybatis-spring.XXX.jar。springboot摒弃了先引入mybaits,再引入mybatis-spring的不便,开发了下面的依赖

  1. <!--mybatis的依赖 -->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>2.2.0</version>
  6. </dependency>

  可以看到这是一个“starter”,要说明的是springboot开发了很多这样的“starter”,提供springboot和其他中间件的集成。先看下“mybatis-spring-boot-starter”这样一个starter都包含哪些依赖,

  在“mybatis-spring-boot-starter”的依赖中有“mybatis.3.5.7”和“mybatis-spring.2.0.6”,还有“spring-boot-starter-jdbc”和“mybaits-spring-boot-autoconfigure”两个依赖,说明“mybatis-spring-boot-starter”不光引入了mybatis相关的依赖还有其他的。现在来尝试下启动程序看看是什么情况,

可以看到程序自动退出了,很神奇什么错误也没打自动退出了,为了把异常打印出来在启动类的代码中加入try catch,如下

  1. package com.my.template;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /**
  5. * 启动类
  6. * @date 2022/6/3 21:32
  7. */
  8. @SpringBootApplication
  9. public class BootServer {
  10. public static void main(String[] args) {
  11. try {
  12. SpringApplication.run(BootServer.class);
  13. }catch (Exception e){
  14. e.printStackTrace();
  15. }
  16. }
  17. }

  再看下启动日志,

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]:
  2. Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException:
  3. Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception;
  4. nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException:
  5. Failed to determine a suitable driver class
  6. at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655)
  7. at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635)
  8. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
  9. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176)
  10. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)

  从日志中大体可以看处在创建“dataSource”这个bean的时候报错了,并且有这样一个异常“org.springfraemwork.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException”,为什么有这样一个异常,而且没有有引入有关“autoconfigure.jdbc”的包啊,还记得前边在引入“mybatis-spring-boot-starter”的时候,其依赖了该包,所以抛该异常也不足为奇。另外上面还有“Failed to instantiate [com.zaxxer.hikari.HikariDataSource]”这样一句,也是由于在“spring-boot-starter-jdbc”包中引入了相关依赖,

好了,上边分析了,日志中的异常情况。回到问题的开始点,为什么会创建“dataSource”这样一个bean,这是因为在springboot启动的时候会默认创建一个名为“dataSource”的bean,放到spring的环境中。是如何创建的呐?是因为springboot有自动配置的功能,也就springboot启动的时候会默认加载“spring-boot-autoconfigure”下的spring.factories文件中的类,

在“spring.factories”文件中有这样一个类“org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration”,该类是DataSouce的自动配置类,

另外,重要的一点是,springboot在不配置数据源的时候默认使用的是“HikariDataSource”,这也是为什么在依赖中会出现“com.zaxxer.HikarCP”依赖的原因,

要创建HikariDataSource,比然要创建数据库连接,那么就需要数据库的驱动,由于没有在application.properties文件中配置,那么代码肯定会走到下面的地方,

也就会出现启动过程中下面的错误,

分析到这里,问题就很明显了,springboot在默认情况下要创建HikariDataSource的数据源,最终其实是要创建数据库连接,创建数据库连接就需要数据库启动程序,这里没有数据库驱动所以报错了

  我这里要连接mysql数据库,这里把mysql的数据库驱动依赖再加上,

  1. <!--mysql的驱动程序-->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>8.0.26</version>
  6. </dependency>

重要的一点在application.properites中配置,

  1. server.port=9099
  2. #数据库驱动
  3. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  4. #用户名
  5. spring.datasource.username=root
  6. spring.datasource.password=root
  7. #连接地址
  8. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test

注意,在配置的时候不要配置”spring.datasource.hikari“开头的属性,笔者开始的时候,想着这里使用的是”hikariDataSource“,那么我配置”spring.datasouce.hikari“前缀的属性即可,结果老是不对,这里一定要配置的是”spring.datasource“开头的属性。

配置以后,再启动服务,如下

可以看到这里已经正常启动了,俗话说没有报错就是最好的,并且在上图也提示,”No MyBatis mapper war found in [com.my.template] package“,也就是说springboot默认会扫描mapper文件。

二、HikariDataSource是什么

  上面提到springboot默认的数据源是HikariDataSource,那么HikariDataSource是什么?HikariDataSource是一个数据库连接池,其github地址为:https://github.com/brettwooldridge/HikariCP,和平时使用的c3p0、dbcp2、druid是一样的,前面说到HikariDataSource是sprinboot默认的数据库连接池,只要引入了”spring-boot-starter-jdbc“,那么HikariDataSource会默认引入,而且在application.properties中无需指定数据源的类型,

  1. spring.datasource.type=com.zaxxer.hikari.HikariDataSource

如果想使用其他的也可以,需要引入相应的依赖,然后在application.properties中进行配置,以Druid为例,

  1. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

  后面,会对常用的数据库连接池做一个汇总,敬请关注。

三、总结

  本文主要分享了在springboot中使用mybatis的一些问题,

  1、springboot默认的数据源为HikariDataSource,可以通过spring.datasource.type来修改;

  2、配置HikariDataSource的时候,注意配置”spring.datasource“前缀的属性;

  3、springboot中使用mybatis,直接引入”mybatis-spring-boot-starter“更方便,不过要注意版本;

  4、除了引入mybatis的相关依赖,不要忘了引入相关的数据库驱动jar;

最后,遗留一个小问题,mybatis-spring-boot-starter是什么,你想过吗,下期更精彩!

推荐阅读

5分钟快速搭建一个springboot的项目

springboot竟然有5种默认的加载路径,你未必都知道

springboot如何使用自定义配置文件

springboot多环境下如何进行动态配置

springboot引入mybatis遇到的坑的更多相关文章

  1. springboot+dubbo+mybatis多模块项目invalid boundexception

    invalid boundexception的原因大抵是因为mybatis扫描不到mapper映射文件(xml),无法将mapper接口类(java)中的接口与mapper映射器绑定起来.这可能是因为 ...

  2. SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例

    1.前言 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelp ...

  3. springBoot+mysql+mybatis demo [基本配置] [遇到的问题]

    springBoot+mysql+mybatis的基本配置: 多环境 application.properties spring.profiles.active=dev spring.applicat ...

  4. JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎

    上篇博客我们聊了<JavaEE开发之SpringBoot工程的创建.运行与配置>,从上篇博客的内容我们不难看出SpringBoot的便捷.本篇博客我们继续在上篇博客的基础上来看一下Spri ...

  5. spring-boot整合mybatis(1)

    sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...

  6. SpringBoot14 SpringBoot整合mybatis

    1 版本说明 springboot:2.0 jdk:1.8 2 创建springBoot项目 创建项目时勾选必要web,MySQL,mybatis相关依赖 创建完成后再pom文件中添加自动部署.lom ...

  7. SpringBoot配置mybatis

    一直都说SpringBoot是零配置,当然,真正实现零配置是不可能的,但是在配置mybatis这里真的是太简单了,哈哈,下面我们一起看一下. 1.先导入基于SpringBoot的mybatis依赖包 ...

  8. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

  9. springboot整合mybatis出现的一些问题

    springboot整合mybatis非常非常的简单,简直简单到发指.但是也有一些坑,这里我会详细的指出会遇到什么问题,并且这些配置的作用 整合mybatis,无疑需要mapper文件,实体类,dao ...

随机推荐

  1. Ubuntu更换apt镜像源

    1. 手动更改 备份镜像源 cd /etc/apt cp sources.list sources.list.bak 修改镜像源 sudo vim sources.list # 复制粘贴下面镜像源,保 ...

  2. 推荐个我在用的免费翻译软件,支持多家翻译API整合

    前段时间发了个关于<Spring支持PHP>的视频:点击查看 然后有小伙伴留言说:"你这个翻译好像很好用的样子". 的确,我自己也觉得很好用.之前视频没看过的不知道是哪 ...

  3. Java语言学习day32--8月07日

    ###07正则表达式邮箱地址验证 * A: 正则表达式邮箱地址验证 * a: 案例代码 public class RegexDemo2 { public static void main(String ...

  4. sqlmap源码分析(一)

    Sqlmap源码分析(一) 此次分析的sqlmap目标版本为1.6.1.2#dev 只对sqlmap的核心检测代码进行详细分析其他的一带而过 sqlmap.py文件结构 为了不让篇幅过长下面只写出了s ...

  5. python基础练习题(题目 计算两个矩阵相加)

    day30 --------------------------------------------------------------- 实例044:矩阵相加 题目 计算两个矩阵相加. 分析:矩阵可 ...

  6. PyTorch环境配置

    PyTorch环境配置 本文档用于记录PyTorch环境配置过程中的要点. PyTorch环境配置 安装Miniconda 安装PyTorch 配置远程开发工具 基于CUDA的张量 导入警告问题 参考 ...

  7. vue 收集表单数据 (有错误的请各位大佬指点)

     收集表单数据:        若: <input type="text"/>, 则v-model收集 的是value值,用户输入的就是value值.        若 ...

  8. [没接触过kubevirt?]15分钟快速入门kubevirt

    @ 目录 本文介绍 前言 环境准备 详细版 搭建步骤 安装KubeVirt 安装virtctl客户端工具 创建VirtualMachine 启动VirtualMachineInstance 启动和停止 ...

  9. cobalt strike4.4的下载和使用

    cobalt strike4.4的下载和使用 cobalt strike4.4下载和汉化 首先下载cobaltstrike.jar yunzhongzhuan.com/#sharefile=cZ5vo ...

  10. vue - Vue脚手架/消息订阅与发布

    今天的内容有意思了,朋友们继续对我们之前的案例完善,是这样的我们之前是不是靠props来完成父给子,子给父之间传数据,其实父给子最好的方法就是props但是自给父就不是了,并且今天学下来,不仅如此,组 ...