SpringBoot——整合MyBatis

news2024/11/30 18:43:39

前情回顾:

在开始介绍SpringBoot整合MyBatis之前,我们先来复习一下在Spring中整合MyBaits是如何来做的。其中的核心思想是将MyBatis中的SqlSession对象交给Spring去管理,并且Spring提供了一个Maper接口扫描器对象去完成为Mapper接口创建动态代理对象的过程,其中的具体步骤由以下几个方面组成:

1、要引入需要用到的依赖坐标,这一步是比较需要细心的,要保证引入的Jar包不会冲突,需要自己做版本管理,我在做整合MyBatis的时候用到的依赖坐标的pom文件内容如下:

<dependencies>
        <!--        mybatis的核心依赖坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <!--        mysql连接类的依赖坐标-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <!--        这是整合中后加的Spring整合MyBatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!--        数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        <!--        junit单元测试的依赖坐标-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <!--        配合Spring进行测试的单元-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.21.RELEASE</version>
        </dependency>
        <!--        spring的核心依赖坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.21.RELEASE</version>
        </dependency>
        <!--        spring的Jdbc包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.21.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

其中有一些Jar包如果版本发生了改变就很容易导致冲突,引起报错,所以这一步需要细心一些。

2、编写配置文件,我们使用注解的方式,这一步也是核心所在,使用@Bean标签将我们用到的所有的对象都注册到容器中,被Spring管理,基本就完成了Spring的整合。

3.做测试,在我们做测试的时候,对于JUnit4还是JUnit5的测试支持还是有一些区别的,注意我们在导入Test包的时候需要注意。

这是我们在Spring中整合MyBatis的时候的常规做法,那么我们来看一下我们在SpringBoot中是如何完成整合的。

SpringBoot整合MyBaits:

第一步肯定也是要引入依赖,那么看一下我们需要引入何种依赖:

我们不需要导入任何的依赖!

是的,如果你在创建项目的时候勾选了MySQLDriver,MyBatis,lombok这三个选项的话,那么在导入依赖的时候,你不需要导入任何的额外的依赖了,SpringBoot已经帮你导入好了,并且你也不需要关心Jar包冲突,SprigBoot也帮你自动调试好了,只要是SpringBoot内部维护的技术,所有的jar包都不会冲突。

我们来看一下在项目创建的时候都导入了什么jar包:

如果你们的Jar包也和我的一样,那么我们就可以继续下一步了,下一步就是创建一个类来封装我们从数据库中查询到的数据:

 这一步我们已经做了很多次了,所以我们就直接展示一张图片就不放代码了,我们使用lombok中的@Data注解来代替我们之前的Get和Set方法。然后呢?对应上面的步骤是不是就应该是创建一个Mapper接口,里面定义查询方法了:

这一步我们也做过很多次了,展示一下内容就可以了,代码自己敲很简单。

然后就可以进行测试类,是不是感觉少点什么啊,是不是少了配置SqlSessionFactory对象,包扫描对象,这是不是都没有啊。SpringBoot已经很贴心的帮我们做好了。是不是我们直接测试就知道了:

测试的内容跟我们之前是一样的,展示一下,然后直接运行:

 肯定是通过了,既然我们没有配置,那他是怎么知道我们写的Mapper是一个Dao层接口的呢,关键在于我们直接写在UserMapper上的一个注解叫做@Mapper,之前这个注解可以不写,因为我们指定他要扫描的包,但是现在我们不指定了,这个注解就一定要写,他和之前一样,会扫描引导类所在的包以及子包,遇到这个注解标注的类,就会放到容器中,并创建它的动态代理对象,然后调用方法,调用SQL语句进行查询。SqlSessionFactory也是同样的,SpringBoot内部就帮我们维护了一个SqlSessionFactory对象,你说你要是不信,直接从容器中获取试试就知道了:

package com.spring;

import com.spring.dao.UserMapper;
import com.spring.pojo.User;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringBootTest02Application {
    public static void main(String[] args) {
//        获取容器对象
        ConfigurableApplicationContext context = SpringApplication.run(SpringBootTest02Application.class, args);
//        获取容器中的SqlSessionFactory对象
        SqlSessionFactory bean = context.getBean(SqlSessionFactory.class);
//        获取容器中的Mapper对象
        UserMapper bean1 = context.getBean(UserMapper.class);
//        输出对象,只要不为空那就表示获取到了
        System.out.println(bean);
        System.out.println(bean1);
//        使用Mapper对象调用方法,执行SQL语句,如果返回值正确,那就表示这个Mapper确实是我们自己写的那个
        User user = bean1.selectUserById(1);
        System.out.println(user);
    }
}

我们之前说我们在引导类中加载容器对象,这个容器怎么体现呢?就是通过引导类中执行的方法的返回值就是容器对象,既然容器对象有了,我们直接getBean,获取到SqlSessionFactory也是可以的吧,如果这个地方不理解,说明之前在Spring阶段对于容器以及被容器管理的Bean的理解不是很到位。

我们获取这个Bean,顺便获取我们的Mapper的动态代理对象的Bean肯定也是可以获取到的吧,因为我们的Mapper接口会在Bean中生成一个动态代理对象,否则单纯的接口是肯定没法调用的。

最后我们用Mapper调用方法试一下,这个Mapper对象是否可以正常的执行,其实我们知道这个程序是肯定可以执行成功的,关键在于执行结果:

第一个最上面的红色框中的是不是就是我们的SqlSessionFactory对象啊,只不过它加了一个Default表示这是一个默认的,他自己内部维护的,那么第二个自然就是我们的Mapper动态代理对象了,前缀是Mapper,Proxy表示代理。下面的红色框就是我们的执行结果,获取到的内容跟我们数据库中的内容是一样的,说明我们的配置是正确的。右边需要看的就是一个单词叫做Hikari,这是SpringBoot的默认的数据源,在之后我们会详细的介绍SpringBoot内部维护的多个数据源方案,以及如何配置我们自己的数据源方案。

总结: 

我们这一节主要讲的是SpringBoot如何整合MyBartis,其实非常的简单,就是引入依赖,写配置,做测试。和之前Spring中的整合,省去了测试Jar包冲突的部分,省去了配置SqlSessionFactory的部分,省去了配置Mapper扫描器的部分,在之后我们还会整合很多的第三方技术,其实基本流程都差不多,我们之后会总结SpringBoot整合第三方技术的基本流程。

现阶段我们只需要知道如何使用SpringBoot整合MyBatis,以及如何在程序中使用MyBatis的技术与数据库做交互

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/527718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 中常见的加密算法,DES、3DES、AES、RSA

加密算法是一种将数据转换为不可读形式的算法&#xff0c;以保护数据的机密性和完整性。加密算法被广泛应用于计算机网络、数据库、电子商务等领域&#xff0c;用于保护敏感数据的安全性&#xff0c;如用户密码、信用卡信息、医疗记录等。在 Java 中&#xff0c;有许多常见的加…

【GigaGAN论文总结】Scaling up GANs for Text-to-Image Synthesis

【GigaGAN论文总结】Scaling up GANs for Text-to-Image Synthesis 1、论点2、贡献3、方法概览Sample-adaptive kernel selectionInterleaving attention with convolutionGenerator designDiscriminator designMulti-scale input, multi-scale output adversarial lossMatchin…

高性能ADC/DAC FMC子卡推出-FMC164

FMC164 子卡集成 4 通道 1Gsps 采样率&#xff0c;16 位 高性能ADC采样&#xff0c;板载4 通道1.25Gsps 16 位DA。板载时钟芯片 HMC7044&#xff0c;可以提供 JESD204B所需要的各种时钟。具有同步/触发功能&#xff0c;模拟信号采用 SSMC 射频连接器输入和输出。板载时钟芯片为…

ant-design实现树的穿梭框,穿梭后右侧是已选树(二)

根据上一篇目标一&#xff0c;进一步实现树的穿梭框 主要内容: 基于ant-design树的穿梭框&#xff0c;实现穿梭后右侧是已选树&#xff0c;&#xff08;当前antd右侧只有一个层级&#xff09; 理想的树的穿梭框&#xff1a; 左边是完整的树&#xff0c;右边是已选的树&#x…

Java面试知识点(全)- DB mysql面试知识点

[Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 SQL优化 r m y s q l q u e r y ( " S E L E C T u s e r n a m e F R O M u s e r W H E R E s i g n u p d a t e > ′ r mysql_query(…

美国原油CFD价格波动受到哪些因素影响?

经过多年的发展&#xff0c;石油技术已经从煤炭转向原油作为主要能源&#xff0c;这种商品用于各种产品&#xff0c;包括汽油、塑料、药品等。因此&#xff0c;它的价值很高&#xff0c;美国原油CFD价格变动时全世界都在关注。对于交易者来说&#xff0c;美国原油CFD价格波动性…

从零开始Vue3+Element Plus的后台管理系统(五)——尝试多种图标ICON方案iconify

iconfont是过去使用较多的图标方案&#xff0c;后来更倾向于使用SVG&#xff0c;因为SVG更灵活兼容性更好。在最近的几个Vue2项目中&#xff0c;因为强调功能弱化设计所以直接用Element UI自带的图标即可满足需求。 Element Plus的图标库相对Element UI更加丰富&#xff0c;然…

flac格式如何转mp3?这几种方法快收藏起来吧

将FLAC格式转换为MP3格式&#xff0c;可以使用一些转换工具&#xff0c;如优速音频处理器等&#xff0c;也可以使用其他专业音频转换软件。FLAC是一种无损音频编码格式&#xff0c;通常用于保留原始音频质量&#xff0c;但相应的文件大小较大。而MP3是一种有损压缩音频编码格式…

MFC类继承实现CEdit自绘文字颜色,边框,背景色

效果 新建一个继承于CEdit的类CMyEdit 在他的窗体OnNcPaint函数中实现绘制边框,它所响应的消息是WM_NCPAINT void CMyEdit::OnNcPaint() {// TODO: 在此处添加消息处理程序代码// 不为绘图消息调用 CEdit::OnNcPaint()////执行默认的窗体处理过程Default();

linux环境安装使用FastDFS,FastDHT详解

01-简介 GitHub&#xff1a;happyfish100 (YuQing) GitHub FastDFS高性能的分布式文件系统&#xff0c;主要功能包含文件的存储、同步、访问&#xff08;上传和下载&#xff09;&#xff0c;特别适用于以文件为主体的网络站点&#xff08;图片分享和视频分享&#xff09;。 Fa…

2023年Java面试正确姿势(1000+面试题附答案解析)

前言 2023 跳槽不迷茫&#xff0c;大家可以先收藏再看&#xff0c;后续跳槽都能用上的&#xff01; 一键获取最新java文档。 Java程序员绝大部分工作的时间都是增删改查&#xff0c;很多人觉得这项工作没什么技术含量&#xff0c;任何一件事情都要站在不同的角度去考虑&#xf…

shell的数组

数组定义方法 方法一&#xff1a;数组名&#xff08; value0 value1 value2 ...&#xff09; 方法二&#xff1a;数组名&#xff08;[0]value [1]value [2]value...&#xff09; 方法三&#xff1a;列表名"value0 value1 value2 ..." 数组名&#xff08;$列表名&…

【WLAN从入门到精通-基础篇】

WLAN定义和基本架构 本文参考https://forum.huawei.com/enterprise/zh/thread/580888898454831104 1. WLAN定义 WLAN的全称是Wireless Local Area Network&#xff0c;中文含义是无线局域网&#xff0c;WLAN的定义有广义和狭义两种&#xff1a;广义上讲WLAN是以各种无线电波…

使用Kotlin函数式编程技术构建强大的 Android 应用程序

使用Kotlin函数式编程技术构建强大的 Android 应用程序 Kotlin 是一种现代的多用途编程语言&#xff0c;在 Android 应用程序开发人员中迅速流行起来。Kotlin 有别于其他编程语言的关键特性之一是它对函数式编程的强大支持。Kotlin 函数式编程允许开发人员编写更清晰、更简洁、…

本地生活服务:老将、新秀同台竞技

配图来自Canva可画 本地生活服务领域又热闹起来了。 事实上&#xff0c;本地生活服务一直为各路玩家所看好。最近几年&#xff0c;互联网大厂频频布局本地生活服务领域&#xff0c;其中抖音、快手等短视频平台更是持续加大在本地生活服务领域的布局力度。 前不久&#xff0c…

Grafana系列-统一展示-10-Explore Jaeger

系列文章 Grafana 系列文章 Explore Jaeger 你可以通过Explore查询和显示 Jaeger 的 trace。有 3 种方法: Query by searchQuery by trace IDUpload a JSON trace file Query by search 要使用该方法: 从 Query 类型选择器中选择 Search。填写搜索表格&#xff1a;(和 J…

2023第十三届中国数字营销与电商创新峰会 嘉宾揭晓

2023第十三届中国数字营销与电商创新峰会将于7月6日-7日在上海召开。 本次峰会将通过七大热点主题帮助品牌主突破模式能力&#xff0c;回归初心、精耕细作&#xff0c;实现可持续增长&#xff1b;提升产品能力&#xff0c;实现可持续长期增长&#xff1b;优化营销能力&#xf…

HTTP第11讲——HTTP的特点

灵活可扩展 首先&#xff0c; HTTP 协议是一个“灵活可扩展”的传输协议。 HTTP 协议最初诞生的时候就比较简单&#xff0c;本着开放的精神只规定了报文的基本格式&#xff0c;比如用空格分隔单词&#xff0c;用换行分隔字段&#xff0c;“headerbody”等&#xff0c;报文里的…

分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因

车载蓝牙通话只有前喇叭声音&#xff0c;后面喇叭无声背后原因 大家有没有注意到车载蓝牙连接后通话的时候只有前喇叭的有声音&#xff0c;后面喇叭没声音呢&#xff1f;特别是后装的车载多媒体上基本都是这样&#xff0c;细思下为什么这样的原因&#xff0c; 采访后装车载技术…

【软考备战·五月模考】希赛网五月模考软件设计师上午题

文章目录 一、成绩报告二、错题总结第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题 三、知识查缺 题目及解析来源&#xff1a;2023上半年软考-模考大赛 一、成绩报告 二、错题总结 第一题 解析&#xff1a; 瀑布模型 中各个活动按 线性顺序 连…