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

news/2024/11/14 7:24:19/

目录

  • 前言
  • 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方法。

java">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操作。

java">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查找用户的方法:

java">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接口方法实现数据库操作。

java">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查找用户的功能。

java">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.ppmy.cn/news/1545739.html

相关文章

vscode摸鱼学习插件开发

不知道大家在摸鱼的时候&#xff0c;会不会想要学习&#xff1f; 或者有没有考公人&#xff0c;下班要学习的&#xff1f; 上班时间摸鱼&#xff0c;下班时间不够学习&#xff1f; 为此&#xff0c;我决定开发一个vscode插件&#xff0c;来刷粉笔题 粉笔插件名称&#xff1a;…

RabbitMQ的应用

七种工作模式介绍 1.Simple(简单模式) P&#xff1a;生产者&#xff0c;也就是要发送信息的程序 C&#xff1a;消费者&#xff0c;消息的接收者 Queue&#xff1a;消息队列。图中黄色背景部分&#xff0c;类似一个邮箱&#xff0c;可以缓存发送信息&#xff1b;生产者向其中…

数据结构和算法入门

复杂度 大O记法 计算机怎么判断程序性能&#xff1f; 我们都知道编程基本上是在和数据打交道&#xff0c;大多数程序基本都在处理获取数据、查询数据、操作数据、返回数据相关的逻辑。 因此出现了数据结构和算法&#xff0c;这两者出现本质为了解决如何能够更快、更省进行数…

IDEA git提交时如何忽略某个文件或文件夹

步骤如下 英文界面操作顺序 打开file——>settings——>Editor——>File Types 中文插件操作顺序 打开 文件——>设置——>编辑器——> 文件类型 安装下面的操作顺序添加想要屏蔽文件类型后缀即可&#xff1a;

PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)

此内容是论文总结&#xff0c;重点看思路&#xff01;&#xff01; 文章概述 这篇文章提出了PointMamba&#xff0c;一种基于状态空间模型&#xff08;SSM&#xff09;的点云分析方法&#xff0c;通过引入线性复杂度算法来实现高效的全局建模。与传统基于Transformer的点云方…

Qt菜单功能实现

本文介绍Qt菜单功能实现。 Qt开发过程中&#xff0c;菜单功能用的还是比较多的&#xff0c;本文针对菜单栏和右键菜单功能实现作简要描述。 1.菜单栏 1)界面设计 在界面中添加菜单栏&#xff08;本例中名为“menubar”&#xff09;&#xff0c;并依次添加需要的菜单&#x…

CentOS操作系统安装过程简介

以下是在CentOS&#xff08;以CentOS 7为例&#xff09;中使用Anaconda安装器的一般步骤&#xff1a; 1. 准备工作 - 首先&#xff0c;需要获取CentOS 7的安装介质&#xff0c;可以是光盘或者制作好的USB启动盘。然后将计算机设置为从对应的安装介质启动。 2. 启动安装程序 -…

Node(节点)、Menu(菜单) 和 Tab(标签页)之间的关系

在系统开发中&#xff0c;尤其是在涉及到前端界面设计和后台管理系统时&#xff0c;我们经常会看到 Node&#xff08;节点&#xff09;、Menu&#xff08;菜单&#xff09; 和 Tab&#xff08;标签页&#xff09; 这几个概念。这些概念有不同的用途和功能&#xff0c;理解它们之…