当前位置: 首页 > news >正文

Spring Boot整合MyBatis

引言

在现代Java开发中,Spring Boot和MyBatis被广泛使用,它们分别代表了轻量级的企业级开发框架和优秀的持久化框架。本文将探讨如何在Spring Boot项目中整合MyBatis,以构建高效、灵活且易于维护的持久层。通过这一完美结合,开发者能够充分发挥Spring Boot的便捷和MyBatis的灵活,提升开发效率和代码质量。

Spring整合MyBatis

  • 引入依赖
<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--1.导入mybatis与spring整合的jar包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!--导入spring操作数据库必选的包--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency>
</dependencies>

注意:druid 不是必须,按需引入。

  • Spring核心配置
// 使用@Configuration注解标记该类为Spring配置类,用于定义和注册bean。  
@Configuration  
// 使用@ComponentScan注解来指定Spring应扫描的包路径,以查找组件、配置和注解。  
@ComponentScan("com.example")  
// 使用@PropertySource注解来指定外部属性文件的位置,以便从这些文件中加载属性值。  
@PropertySource("jdbc.properties")  
// 定义一个公共类SpringConfig。  
public class SpringConfig {  }
  • MyBatis要交给Spring接管的bean
//定义mybatis专用的配置类
@Configuration
public class MyBatisConfig {
//    定义创建SqlSessionFactory对应的bean@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){//SqlSessionFactoryBean是由mybatis-spring包提供的,专用于整合用的对象SqlSessionFactoryBean sfb = new SqlSessionFactoryBean();//设置数据源替代原始配置中的environments的配置sfb.setDataSource(dataSource);//设置类型别名替代原始配置中的typeAliases的配置sfb.setTypeAliasesPackage("com.example.pojo");return sfb;}
//    定义加载所有的映射配置@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.example.dao");return msc;}}
  • 数据源对应的bean,此处使用Druid数据源
@Configuration
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Bean("dataSource")public DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}
}
  • 数据库连接信息(properties格式)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_mybatis
jdbc.username=root
jdbc.password=root
  • 缺点
  1. 配置复杂:相对于 Spring Boot 的自动配置,Spring 需要手动配置 MyBatis 的相关组件,如 SqlSessionFactory、Mapper 等。这需要开发人员对 MyBatis 和 Spring 有更深入的了解。
  2. 依赖管理不便:在 Spring 中,需要手动添加和管理 MyBatis 和其他相关库的依赖。而在 Spring Boot 中,通过自动配置和集成的依赖管理,可以更方便地管理和升级这些库的版本。

Spring Boot整合MyBatis

  • 数据准备
CREATE TABLE `user` (`id` int(10) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`pwd` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
  • 实体类

创建与数据库表对应的实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {private Integer id;private String name;private String pwd;
}
  • 引入依赖

pom.xml中添加Spring Boot和MyBatis的相关依赖:

<dependencies><!-- Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
</dependencies>
  • 配置数据库信息

application.propertiesapplication.yml中配置数据库连接信息:

#.配置相关信息
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis01username: rootpassword: root
  • 配置mybatis相关配置
mybatis:mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径type-aliases-package: com.example.pojo # 配置哪个包下的类有默认的别名
  • 编写Mapper接口

创建Mapper接口,定义对数据库的操作,使用@Mapper注解标明该接口是MyBatis的Mapper。

注意在接口上加上 @Mapper @Repository 注解
@Repository
@Mapper
public interface UserMapper {public List<User> findAll();
}
  • 编写mapper接口对应的xml文件

在resources目录下创建mapper/UserMapper.xml文件,编写SQL语句,定义与Mapper接口中方法对应的数据库操作。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><select id="findAll" resultType="com.example.pojo.User">select * from user</select>
</mapper>
  • 编写Spring Boot 主启动类

在Spring Boot的主应用类上添加@MapperScan注解,指定Mapper接口所在的包路径:

@MapperScan( basePackages = "com.example.mapper")
@SpringBootApplication
public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}
}
  • 测试

编写单元测试,验证MyBatis的持久化操作,确保整合的正确性。在业务层中注入UserMapper,即可通过调用Mapper接口的方法进行数据库操作。

@SpringBootTest(classes = UserApplication.class)
public class MyTest {@AutowiredUserMapper userMapper;@Testpublic void tesMapper(){System.out.println(userMapper.findAll());}
}

通过以上步骤,你已成功地将Spring Boot与MyBatis整合,构建了一个高效的持久层。这个结合体为开发者提供了Spring Boot的便捷配置和MyBatis的灵活性,使得数据库操作更加轻松、高效。在实际应用中,通过使用MyBatis的动态SQL、缓存机制等高级特性,可以更灵活地满足各种业务需求。

结语

Spring Boot整合MyBatis是构建现代Java应用的常见实践,本文详细介绍了整合的基础配置和操作步骤。通过这一结合,开发者可以借助Spring Boot的自动化配置和MyBatis的灵活性,轻松构建可维护、高效的持久层。这个强大的组合使得数据库操作更加愉悦,为应对各类业务场景提供了稳健的解决方案。

相关文章:

Spring Boot整合MyBatis

引言 在现代Java开发中&#xff0c;Spring Boot和MyBatis被广泛使用&#xff0c;它们分别代表了轻量级的企业级开发框架和优秀的持久化框架。本文将探讨如何在Spring Boot项目中整合MyBatis&#xff0c;以构建高效、灵活且易于维护的持久层。通过这一完美结合&#xff0c;开发…...

MySQL语句 | 在MySQL中解析JSON或将表中字段值合并为JSON

MySQL提供了一系列的JSON函数来处理JSON数据&#xff0c;包括从JSON字符串中提取值和将表中字段值合并为JSON等。 在MySQL中解析JSON 可使用JSON_EXTRACT函数提取JSON字符串中指定字段的值&#xff0c;使用JSON_UNQUOTE函数去除提取的字符串值周围的引号&#xff0c;以得到原…...

基于springboot+vue的图书个性化推荐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…...

将自然数序列剔除掉包含4的数字,求第k(1e12)个数是什么

题目 思路&#xff1a;将k转化为九进制&#xff0c;然后将大于等于4的数字加一 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back const int maxn 1e6 5, inf 1e9, maxm 5e3 5; int a[maxn], b[maxn]; string s; int n, …...

用Photoshop来制作GIF动画

录了个GIF格式的录屏文件&#xff0c;领导让再剪辑下&#xff0c;于是用Photoshop2023&#xff08;PS版本低至CS6操作方式一样&#xff09;进行剪辑&#xff0c;录屏文件有约1400帧&#xff0c;由于我处理的帧数太多&#xff0c;PS保存为GIF格式时&#xff0c;还是挺耗时的&…...

原地swap(inplace_swap)

inplace_swap algorithm based on exclusive-or (^) void inplace_swap(int *x, int *y) {*y *x ^ *y;*x *x ^ *y;*y *x ^ *y; }原理(展开为二进制计算异或即可)&#xff1a; 0 ^ 0 0 0 ^ 1 1 1 ^ 0 1 1 ^ 1 0 reverse_array algorithm based on inplace_swap void re…...

《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)

目录 开头语内存飙升问题分析与案例问题背景&#xff1a;我华为云的一个服务器运行我的一个项目“csdn-automatic-triplet-0.0.1-SNAPSHOT.jar”&#xff0c;由于只是用来测试的服务器&#xff0c;只有2G&#xff0c;所以分配给堆的内存1024M查询内存使用&#xff08;top指令&a…...

统计学-R语言-4.6

文章目录 前言列联表条形图及其变种---单式条形图条形图及其变种---帕累托图条形图及其变种---复式条形图条形图及其变种---脊形图条形图及其变种---马赛克图饼图及其变种---饼图饼图及其变种---扇形图直方图茎叶图箱线图小提琴图气泡图总结 前言 本篇文章是对数据可视化的补充…...

git提权

实验环境——vulnhub-dc2靶场 git提权 前提&#xff1a;用户可以使用sudo中git权限 查看sudo权限 sudo -l可以发现git命令存在sudo提权 基于此进行权限提升 方式&#xff1a; sudo git help config #在末行命令模式输入 !/bin/bash 或 !sh #完成提权 sudo git -p help…...

实验四 SQL语言

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…...

2024年简历石沉大海,别投了,软件测试岗位饱和了....

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…...

JS执行顺序

众所周知&#xff0c;JavaScript 是单线程语言,只能同时执行做一件事(js只有一个线程&#xff0c;称之为main thread-主线程) 1.Javascript 运行机制 main thread 主线程和 call-stack 调用栈(执行栈)&#xff0c;所有的任务都会被放到调用栈等待主线程执行。 2.Javascript 任…...

Vscode 上安装 Compilot

GitHub Copilot 是由 OpenAI 和 GitHub 开发的 AI 工具。其目的是通过自动完成代码来帮助开发人员使用集成开发环境 &#xff08;IDE&#xff09;&#xff0c;如 Visual Studio Code。它目前仅作为技术预览版提供&#xff0c;因此只有已在候补名单上被接受的用户才能访问它。对…...

Spring集成MyBatis与MyBatis-Plus添加分页插件

项目场景&#xff1a; MyBatis使用分页插件PageHelperMyBatis-Plus3.4.0版本之前添加分页插件&#xff0c;使用配置PaginationInterceptor&#xff1b;MyBatis-Plus3.4.0版本添加分页插件&#xff0c;使用配置MybatisPlusInterceptor&#xff1b; 配置示例&#xff1a; 1、My…...

Windows下载安装vcpkg并使用它来安装第三方库(visualstudio)

1.使用Git下载vcpkg仓库&#xff08;下载比较慢&#xff0c;个人比较喜欢打开下面网址然后用迅雷下载&#xff0c;速度飞快&#xff09; git clone "https://github.com/Microsoft/vcpkg.git"2.下载好之后解压打开文件夹&#xff0c;双击bootstrap-vcpkg.bat文件&…...

leetcode-2788按分隔符拆分字符串

题目链接 2788. 按分隔符拆分字符串 - 力扣&#xff08;LeetCode&#xff09; 解题思路 class Solution:def splitWordsBySeparator(self, words: List[str], separator: str) -> List[str]:result []for i in words:for j in i.split(separator):if j:result.append(j)…...

使用Ctrl+Alt+T快速打开Windows Terminal终端

在Ubuntu中我们通常使用CtrlAltT来快速打开终端&#xff0c;这样即炫酷又方便。然而在Windows并没有默认快捷键打开终端的操作&#xff0c;需要我们折腾一番。操作也不复杂&#xff0c;可以通过一般人都不知道用来干什么的“快捷方式”来实现。 创建Windows Terminal终端的快捷…...

Redis 消息队列和发布订阅

文章目录 基本模式生产者消费者原理&模型redis实现java实现 发布者订阅者原理&模型redis实现java实现 stream模式原理&模型工作原理redis实现Java实现 选型外传 基本模式 采用redis 三种方案&#xff1a; ● 生产者消费者&#xff1a;一个消息只能有一个消费者 ●…...

去掉element-ui的el-table的所有边框+表头+背景颜色

实例: 1.去掉table表头(加上:show-header"false") <el-table:data"tableData":show-header"false"style"width: 100%"> </el-table> 2.去掉table所有边框 ::v-deep .el-table--border th.el-table__cell, ::v-deep .el…...

还在手动复制文章吗?教你如何一键将文章从notion同步到WordPress

本文会给大家介绍如何在WordPress上安装一个插件&#xff0c;实现将notion上写的文章自动同步到WordPress上&#xff0c;从而提高写作效率&#xff0c;接下来请跟随我的脚步一起来操作吧&#xff01; 一、插件安装 在WordPress后台添加新插件页面中搜索“notion”&#xff0c;…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...