Spring Boot中集成MyBatis操作数据库详细教程

目录

  • 前言
  • 1. 项目依赖配置
    • 1.1 引入MyBatis和数据库驱动依赖
    • 1.2 数据源配置
  • 2. 创建数据库映射实体类
  • 3. 创建Mapper层接口
  • 4. 创建Service层
    • 4.1 定义Service接口
    • 4.2 实现Service接口
  • 5. 创建Controller层
  • 6. 运行和测试项目
    • 6.1 启动项目
    • 6.2 测试接口
  • 7. 总结

前言

在Java开发中,MyBatis是一款轻量级且灵活的持久层框架,支持SQL语句和自定义映射,尤其适合需要复杂SQL操作的应用场景。结合Spring Boot,我们可以更加方便地使用MyBatis进行数据操作。本篇文章将手把手地介绍如何在Spring Boot项目中集成MyBatis,并实现基础的增删改查操作。我们会从依赖配置开始,到实体类、Mapper接口、Service和Controller的创建,最终形成一个简洁易用的应用结构。
在这里插入图片描述

1. 项目依赖配置

在Spring Boot项目中使用MyBatis的第一步,是在pom.xml文件中引入MyBatis的依赖。这里使用mybatis-spring-boot-starter来实现快速集成,同时加入MySQL驱动程序mysql-connector-java,实现与数据库的连接。

1.1 引入MyBatis和数据库驱动依赖

pom.xml文件中加入以下依赖配置:

<dependencies><!-- MyBatis Spring Boot Starter 依赖 --><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><scope>runtime</scope></dependency>
</dependencies>

1.2 数据源配置

接下来,在application.properties中配置数据库连接信息,以便MyBatis能够正确访问数据库。在这里,我们设置数据库URL、用户名、密码及其他连接信息。

spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 指定MyBatis的Mapper XML文件位置
mybatis.mapper-locations=classpath:mapper/*.xml

2. 创建数据库映射实体类

MyBatis通过实体类来映射数据库表的字段。以User表为例,创建一个实体类User来表示用户信息,包含ID、用户名、邮箱等字段。

com.example.demo.model包中创建User类,与数据库中的用户表结构相对应。该类包含属性及其getter和setter方法。

package com.example.demo.model;public class User {private Long id;private String username;private String email;// Getter 和 Setter 方法public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

3. 创建Mapper层接口

Mapper层是MyBatis与数据库进行交互的核心。通过Mapper接口定义数据操作方法,使用MyBatis的@Select等注解书写SQL语句,实现增删改查等数据库操作。

com.example.demo.mapper包中创建UserMapper接口,并用@Mapper注解标记。这里定义的接口方法将被MyBatis自动实现,完成相应的SQL操作。

package com.example.demo.mapper;import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserMapper {@Select("SELECT * FROM user")List<User> findAll();@Select("SELECT * FROM user WHERE id = #{id}")User findById(Long id);
}

此接口中的方法findAll()findById()分别用于查询所有用户和根据ID查询特定用户的信息。

4. 创建Service层

Service层主要封装业务逻辑,进一步管理数据操作。通过Service层,我们可以将数据库操作与业务需求分离,提高代码的可读性和维护性。

4.1 定义Service接口

com.example.demo.service包中创建UserService接口,定义获取所有用户和根据ID查找用户的方法:

package com.example.demo.service;import com.example.demo.model.User;import java.util.List;public interface UserService {List<User> getAllUsers();User getUserById(Long id);
}

4.2 实现Service接口

com.example.demo.service.impl包中创建UserServiceImpl类,实现UserService接口。使用@Service注解声明这是一个服务类,并通过@Autowired注入UserMapper,调用Mapper接口方法实现数据库操作。

package com.example.demo.service.impl;import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getAllUsers() {return userMapper.findAll();}@Overridepublic User getUserById(Long id) {return userMapper.findById(id);}
}

在这里,我们通过UserServiceImpl实现具体的业务逻辑,进一步包装了Mapper中的数据库操作,使得Controller层能够更专注于接口设计。

5. 创建Controller层

Controller层是前端和后端交互的接口层,用于接收客户端请求,调用Service层的业务逻辑,并返回处理结果。我们使用Spring MVC的@RestController注解来创建控制器。

com.example.demo.controller包中创建UserController类,用于处理用户相关的HTTP请求。通过@Autowired注入UserService,并定义接口方法实现获取用户列表和根据ID查找用户的功能。

package com.example.demo.controller;import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getUserById(id);}
}

上述代码实现了两个接口方法:

  • getAllUsers():用于获取所有用户信息。
  • getUserById(Long id):根据用户ID获取特定用户信息。

6. 运行和测试项目

完成了以上步骤后,可以运行项目并测试接口,确认功能实现情况。

6.1 启动项目

运行Spring Boot项目的主类DemoApplication中的main方法,启动应用程序。

6.2 测试接口

可以使用Postman等工具测试API接口。例如,发送GET请求至http://localhost:8080/users即可获取所有用户信息,发送GET请求至http://localhost:8080/users/{id}则可以获取指定用户信息。

7. 总结

通过本教程,我们完成了在Spring Boot中集成MyBatis的全过程。从项目依赖配置、实体类、Mapper接口的创建,到Service层和Controller层的开发,逐步实现了数据库的基本操作。通过这种结构化的分层设计,项目代码清晰,业务逻辑和数据操作实现了分离,易于维护和扩展。MyBatis结合Spring Boot的方式能够高效地完成数据持久化操作,希望这篇文章能帮助大家更好地理解和使用这两者的集成。

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

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

相关文章

【大语言模型】ACL2024论文-07 BitDistiller: 释放亚4比特大型语言模型的潜力通过自蒸馏

【大语言模型】ACL2024论文-07 BitDistiller: 释放亚4比特大型语言模型的潜力通过自蒸馏 目录 文章目录 【大语言模型】ACL2024论文-07 BitDistiller: 释放亚4比特大型语言模型的潜力通过自蒸馏目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果代码推荐阅读指数&…

鸿蒙next打包流程

目录 下载团结引擎 添加开源鸿蒙打包支持 打包报错 路径问题 安装DevEcoStudio 可以在DevEcoStudio进行打包hap和app 包结构 没法直接用previewer运行 真机运行和测试需要配置签名,DevEcoStudio可以自动配置, 模拟器安装hap提示报错 安装成功,但无法打开 团结1.3版本新增工具…

基于Jeecgboot3.6.3vue3的flowable流程online表单的审批使用介绍

更多技术支持与服务请加入我的知识星球或加我微信&#xff0c;名称:亿事达nbcio技术交流社区https://t.zsxq.com/iPi8F 今天介绍一下基于jeecgboot3.6.3的flowable流程使用online表单进行审批的情况 1、首先建立一个online应用类型的流程&#xff0c;如下&#xff1a; 2、进行…

【LeetCode】【算法】238. 除自身以外数组的乘积

LeetCode 238. 除自身以外数组的乘积 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。 请不…

如何构建一个可扩展的测试自动化框架?

以下为作者观点&#xff1a; 假设你是测试自动化方面的新手&#xff0c;想参与构建一个框架。在这种情况下&#xff0c;重要的是要了解框架所需的组件&#xff0c;以及它们是如何组合的。思考项目的具体需求和目标&#xff0c;以及可能遇到的困难和挑战。 假如你是一个测试架…

实战:索引的命中机制

在 SQL Server 中,查询是否能命中索引(即是否能使用 Index Seek)取决于多个因素,包括索引的结构、查询条件的排列、和数据库优化器的策略。以下是一些常见的命中索引和不能命中索引的情况,及其详细解释: 一、命中索引的情况 1. 前导列匹配(典型的命中索引场景) 索引结…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行&#xff0c;镜像是容器的只读模板&#xff0c;容器是模板的一个实例。镜像是分层结…

C++【string类,模拟实现string类】

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 为什么学习string类 C语言中的字符串 标准库中的string类 auto和范围for auto关键字 迭代器 范围for string类的常用接口说明和使用 1. string类对象的常见构造 2.string类对象的容量操作 3…

A019基于SpringBoot的校园闲置物品交易系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

【赵渝强老师】Redis的RDB数据持久化

Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出会造成服务器中的数据库状态也会消失。所以 Redis 提供了数据持久化功能。Redis支持两种方式的持久化&#xff0c;一种是RDB方式&#xff1b;另一种是AOF&#xff08;ap…

Excel:vba实现批量插入图片批注

实现的效果&#xff1a;实现的代码如下&#xff1a; Sub InsertImageNamesAndPictures()Dim PicPath As StringDim PicName As StringDim PicFullPath As StringDim RowNum As IntegerDim Name As StringDim Comment As CommentDim folder As FileDialog 定义文件选择对话框 清…

tomcat启动失败和缓存清理办法

tomcat只在学校接触过并且是在window xp和win7的电脑上配置过&#xff08;中途升级过电脑系统&#xff09;&#xff0c;只记得在windows系统上可以将其设置成服务管理。但我已毕业10多年了&#xff0c;学的知识早就不知道丢哪里了。这次为了修改一个07&#xff0c;08年的项目&a…

ReactPress:深入解析技术方案设计与源码

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress是一个基于React框架开发的开源发布平台&#xff0c;它不仅仅是一个简单的博客系统&#xff0c;更是一个功能全…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

先锋精科委身芯片“圈子” 引致交易不公允和信披不透明

不要违背圈子的规则&#xff0c;但也不要盲从圈子的规则。 ——语出马云。 引 言 “圈子”是钥匙&#xff0c;也是一把锁。 走进“圈子”&#xff0c;将获得包括资金、订单、货源、技术等企业发展所需的资源&#xff0c;能够助推一家企业乃至整个行业的跨越式发展&#…

MinerU容器构建教程

一、介绍 MinerU作为一款智能数据提取工具&#xff0c;其核心功能之一是处理PDF文档和网页内容&#xff0c;将其中的文本、图像、表格、公式等信息提取出来&#xff0c;并转换为易于阅读和编辑的格式&#xff08;如Markdown&#xff09;。在这个过程中&#xff0c;MinerU需要利…

【论文复现】基于深度学习的手势识别算法

本文所涉及所有资源均在这里可获取。 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐、摄影的一位博主。 &#x1f4d7;本文收录于论文复现系列&#xff0c;大家有兴趣的可以看一看…

使用QtWebEngine的Mac应用如何发布App Store

前言 因为QtWebEngine时第三方包,苹果并不直接支持进行App Store上签名和发布,所以构建和发布一个基于使用QtWebEngine的应用程序并不容易,这里我们对Qt 5.8稍微做一些修改,以便让我们的基于QtWeb引擎的应用程序并让签名能够得到苹果的许可。 QtWebEngine提供了C++和Qml的…

智能新纪元:人工智能技术的社会影响与伦理挑战-亿发

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正以其不可阻挡之势&#xff0c;深刻改变着我们的生产、生活和学习方式。它不仅是一项技术革命&#xff0c;更是推动社会进步的重要力量。本文将探讨人工智能如何重塑未来&#xff0c;以及它所带来的深远影响。 AI…

云平台虚拟机运维笔记整理,使用libvirt创建和管理虚拟机,以及开启虚拟机嵌套,虚拟磁盘扩容,物理磁盘扩容等等

云平台虚拟机运维笔记整理,使用libvirt创建和管理虚拟机,以及开启虚拟机嵌套,虚拟磁盘扩容,物理磁盘扩容等等。 掌握和使用qemu和libvirt,分别使用它们创建一个cirros虚拟机,并配置好网络。 宿主机node0的系统为ubuntu16,IP为192.168.56.200。 qemu和libvirt简介 QEMU…