Spring Boot 整合 MyBatis
🙈作者简介:练习时长两年半的Java up主
🙉个人主页:程序员老茶
🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭 格言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手,点个关注不迷路,感谢宝子们一键三连
目录
- 课程名:Java
- 内容/作用:知识点/设计/实验/作业/练习
- 学习:Java
- Spring Boot 整合 MyBatis
- 简介
- 准备工作
- 创建项目
- 添加依赖
- 配置数据库
- 创建实体类
- 创建数据访问接口
- 创建数据访问映射文件
- 创建数据访问实现类
- 创建控制器
- 运行项目
- 总结
课程名:Java
内容/作用:知识点/设计/实验/作业/练习
学习:Java
当然可以,以下是使用 Markdown 格式编写的 Spring Boot 整合 MyBatis 的详细教程:
Spring Boot 整合 MyBatis
简介
Spring Boot 是一个用于简化 Spring 应用开发的框架,而 MyBatis 是一个优秀的持久层框架。在本篇文章中,我们将学习如何使用 Spring Boot 整合 MyBatis,以便在项目中实现数据访问和持久化。
准备工作
在开始之前,确保已经安装了以下软件:
- JDK 1.8 或更高版本
- Maven 3.2 或更高版本
- MySQL 数据库
创建项目
首先,我们需要创建一个新的 Spring Boot 项目。可以通过以下方式使用 Maven 命令创建一个基本的 Spring Boot 项目:
mvn archetype:generate -DgroupId=com.example -DartifactId=mybatis-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
这将创建一个名为 mybatis-demo
的项目。
添加依赖
在创建的项目中,打开 pom.xml
文件,并添加以下依赖项:
<dependencies><!-- Spring Boot 依赖 --><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.0.1</version></dependency><!-- MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency>
</dependencies>
这些依赖项将用于引入 Spring Boot、MyBatis 和 MySQL 相关的功能。
配置数据库
在项目中,我们需要配置数据库连接。在 src/main/resources
目录下创建一个名为 application.properties
的文件,并添加以下内容:
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_demo?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.mybatisdemo.entity
在上述配置中,我们指定了 MySQL 数据库的 URL、用户名和密码,以及 MyBatis XML 文件所在的位置和实体类的包名。
创建实体类
在开始编写数据库访问逻辑之前,我们需要先创建实体类来映射数据库中的表。在 src/main/java/com/example/mybatisdemo/entity
目录下创建一个名为 User.java
的文件,并添加以下内容:
package com.example.mybatisdemo.entity;public class User {private Long id;private String name;private Integer age;// Getters and Setters
}
这个实体类包含了三个属性,分别是 id、name 和 age。
创建数据访问接口
接下来,我们需要创建数据访问接口,用于定义数据库操作的方法。在 src/main/java/com/example/mybatisdemo/mapper
目录下创建一个名为 UserMapper.java
的文件,并添加以下内容:
package com.example.mybatisdemo.mapper;import com.example.mybatisdemo.entity.User;import java.util.List;public interface UserMapper {List<User> findAll();User findById(Long id);void insert(User user);void update(User user);void delete(Long id);
}
在这个接口中,我们定义了几个基本的数据库操作方法,例如查询所有用户、根据 ID 查询用户、插入用户、更新用户和删除用户。
创建数据访问映射文件
在 MyBatis 中,我们需要创建一个 XML 文件来定义实际的 SQL 语句。在 src/main/resources/mapper
目录下创建一个名为 UserMapper.xml
的文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.mybatisdemo.entity.User"><id column="id" property="id" /><result column="name" property="name" /><result column="age" property="age" /></resultMap><select id="findAll" resultMap="BaseResultMap">SELECT * FROM user</select><select id="findById" parameterType="java.lang.Long" resultMap="BaseResultMap">SELECT * FROM user WHERE id = #{id}</select><insert id="insert">INSERT INTO user(name, age) VALUES (#{name}, #{age})</insert><update id="update">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}</update><delete id="delete">DELETE FROM user WHERE id = #{id}</delete></mapper>
在上述映射文件中,我们使用了 <resultMap>
元素来定义数据库字段和实体类属性的映射关系,然后使用各种 SQL 语句定义了具体的数据库操作。
创建数据访问实现类
接下来,我们需要创建数据访问实现类,用于实际执行数据库操作。在 src/main/java/com/example/mybatisdemo/mapper
目录下创建一个名为 UserMapperImpl.java
的文件,并添加以下内容:
package com.example.mybatisdemo.mapper;import com.example.mybatisdemo.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public class UserMapperImpl implements UserMapper {private final SqlSession sqlSession;public UserMapperImpl(SqlSession sqlSession) {this.sqlSession = sqlSession;}@Overridepublic List<User> findAll() {return sqlSession.selectList("findAll");}@Overridepublic User findById(Long id) {return sqlSession.selectOne("findById", id);}@Overridepublic void insert(User user) {sqlSession.insert("insert", user);}@Overridepublic void update(User user) {sqlSession.update("update", user);}@Overridepublic void delete(Long id) {sqlSession.delete("delete", id);}
}
在这个实现类中,我们使用 SqlSession
来执行实际的 SQL 语句,并实现了之前在接口中定义的各个方法。
创建控制器
最后一步是创建一个控制器来处理 HTTP 请求,并调用数据访问接口。在 src/main/java/com/example/mybatisdemo/controller
目录下创建一个名为 UserController.java
的文件,并添加以下内容:
package com.example.mybatisdemo.controller;import com.example.mybatisdemo.entity.User;
import com.example.mybatisdemo.mapper.UserMapper;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {private final UserMapper userMapper;public UserController(UserMapper userMapper) {this.userMapper = userMapper;}@GetMappingpublic List<User> getAllUsers() {return userMapper.findAll();}@GetMapping("/{id}")public User getUserById(@PathVariable("id") Long id) {return userMapper.findById(id);}@PostMappingpublic void addUser(@RequestBody User user) {userMapper.insert(user);}@PutMapping("/{id}")public void updateUser(@PathVariable("id") Long id, @RequestBody User user) {user.setId(id);userMapper.update(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable("id") Long id) {userMapper.delete(id);}
}
在这个控制器中,我们使用 @RestController
注解将其标记为一个 RESTful Web 服务,并使用各种 HTTP 请求方法来处理用户的 CRUD 操作。
运行项目
现在,我们已经完成了整个项目的编写。可以使用以下命令来启动 Spring Boot 应用程序:
mvn spring-boot:run
然后,可以使用 Postman 或浏览器访问 http://localhost:8080/users
来测试我们的 API,以及对数据库进行增删改查操作。
至此,我们成功地使用 Spring Boot 整合 MyBatis 完成了一个简单的数据访问项目。
总结
在本篇文章中,我们详细介绍了如何使用 Spring Boot 整合 MyBatis,以及如何进行数据库访问和持久化操作。我们从创建项目、添加依赖、配置数据库,到编写实体类、映射文件、数据访问接口和实现类,最后创建控制器来处理 API 请求,完成了一个简单的示例项目。通过学习本文,希望你能够熟悉 Spring Boot 和 MyBatis 的使用,能够在实际项目中应用这些知识。
每日一问:
请简述一下关键词全栈。
全栈是指一种开发工程师的角色或技能集,具备设计、开发、部署和维护全流程的能力。关键词全栈可以涉及包括前端、后端、数据库、服务器等各种不同领域。全栈开发工程师需要具备多种技能,包括但不限于编程语言、数据库管理、网络安全、数据结构和算法等。具体来说,前端方面需要熟悉 HTML、CSS、JavaScript等技术;后端方面需要熟悉多种编程语言,如Java、Python、Ruby等以及熟练使用数据库管理系统;服务器方面需要掌握Linux系统的常用命令和操作等。全栈开发工程师不仅要具备技术方面的能力,还需要具备良好的沟通和协作能力,能够在团队中负责全栈开发流程的各个环节。
往期专栏 |
---|
Java全栈开发 |
数据结构与算法 |
计算机组成原理 |
操作系统 |
数据库系统 |
物联网控制原理与技术 |
相关文章:
Spring Boot 整合 MyBatis
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...

2023高教社杯数学建模A题B题C题D题E题思路模型 国赛建模思路分享
文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…...

手机木马远程控制复现
目录 目录 前言 系列文章列表 渗透测试基础之永恒之蓝漏洞复现http://t.csdn.cn/EsMu2 思维导图 1,实验涉及复现环境 2,Android模拟器环境配置 2.1,首先从官网上下载雷电模拟器 2.2,安装雷电模拟器 2.3, 对模拟器网络进行配置 2.3.1,为什么要进行配置…...

linux 安装Docker
# 1、yum 包更新到最新 yum update # 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、 设置yum源 yum-config-manager --add-repo h…...
Java中的值传递与引用传递 含面试题
面试题分享 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档…...
SQL中CONVERT()函数用法详解
SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft SQL Server™ 表达式。。 data_type 目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。 length nchar、nva…...

借助各大模型的优点生成原创视频(真人人声)Plus
【技术背景】 众所周知,组成视频的3大元素,即文本语音图片。接着小编逐一介绍生成原创视频的过程。 【文本生成】 天工AI搜索(thttp://iangong.cn) 直接手机短信验证就可以使用,该大模型已经接入互联网,…...

技能大赛物联网赛项参赛软件建设方案
一、概述 信息与通信技术的目标已经从任何时间、任何地点连接任何人,发展到连接任何物品的阶段,而万物的连接就形成了物联网。物联网的主要特征是通过条码识读设备、射频识别 (RFID)装置、红外感应器、全球定位系统、激光扫描器等信息传感设备…...
蓝桥杯官网练习题(凯撒加密)
题目描述 给定一个单词,请使用凯撒密码将这个单词加密。 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移 3 位后被替换成密文。即 a 变为 d,b 变为 e,⋯⋯,w 变为z,x 变为 a&#x…...
JavaScript 数组中常用的方法
添加 push:数组末尾添加unshift:数组首位添加splice(1, 0, ‘新增内容’):再指定位置插入,第二参数为0,表示新增;大于0,表示修改 删除 pop:删除末尾shift:删除首位slice(…...

YOLOV7改进-添加基于注意力机制的目标检测头(DYHEAD)
DYHEAD 复制到这: 1、models下新建文件 2、yolo.py中import一下 3、改IDetect这里 4、论文中说6的效果最好,但参数量不少,做一下工作量 5、在进入IDetect之前,会对RepConv做卷积 5、因为DYHEAD需要三个层输入的特征层一致&am…...

爬虫爬取mp3文件例子
相信训练模型时数据集的获取也是一个很头疼的事情,搞cv领域的可以扛着摄像头架起三脚架拍摄获取(以前干过),但是如果是nlp领域的呢,特别是chatgpt等大模型出来后对这类文本等数据的需求更大,如果没有现成的…...
说说什么是间隙锁
分析&回答 间隙锁为了解决RR(可重复读)级别下当前读导致的幻读问题,锁的对象是索引叶子节点的next指针。 快照读 在RR隔离级别下:快照读有可能读到数据的历史版本,也有可能读到数据的当前版本。所以快照读无需用…...
python小题库(三)
大家好呀,今天继续更新python小题库。 题11:实现学生成绩排序 # 问题:实现学生成绩排序 # 如学生的成绩是字典形式 students [{"sno": 101, "sname": "小张", "sgrade": 88},{"sno": 10…...
【前端设计模式】之单例模式
在前端开发中,单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供全局访问点。在实现单例模式时,有一些最佳实践和高级技巧可以帮助我们编写更优雅和可维护的代码。 1. 使用闭包 使用闭包是实现单例模式的一种常见…...
Linux——(第六章)常用指令(一)
目录 一、帮助指令 1.man获取帮助信息 2.help指令 3.常用快捷键 二、文件和目录相关指令 1.pwd 指令 2.ls 指令 3.cd 指令 4.mkdir 指令 5.rmdir指令 6.touch指令 7.cp 指令 8.rm 指令 9.mv 指令 10.cat 指令 11.more 指令 12.less 指令 13.echo 指令 14.he…...

第19章_瑞萨MCU零基础入门系列教程之RTC
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

6、Spring之依赖注入源码解析(上)
依赖注入底层原理流程图: Spring中Bean的依赖注入原理| ProcessOn免费在线作图,在线流程图,在线思维导图 Spring中到底有几种依赖注入的方式? 首先分两种: 手动注入自动注入手动注入 在XML中定义Bean时,就是手动注入,因为是程序员手动给某个属性指定了值。 <bean n…...

vscode各种配置的方法
一. vscode配置 vscode 是微软公司提供的一个 代码编辑器。是做C/C常用的编辑器。 在安装后,可以根据自己需要自行安装常用的配置插件。同时,也可以在设置栏设置自己需要的功能,以方便使用。 下面学习 vscode的几种常见的设置。 二. vsco…...
每天几道面试题(第一天)
目录 第一幕 、第一场)某大厦楼下大门前第二场)电梯中第三场)走廊中 友情提醒 背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第一幕 、 第一场)某大厦楼下大门前…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...