spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0

使用 MyBatis-Plus 操作 books 表。我们将实现以下功能:

  1. 创建实体类 Book

  2. 创建 Mapper 接口 BookMapper

  3. 创建 Service 层 BookService 和 BookServiceImpl

  4. 创建 Controller 层 BookController

  5. 配置 MyBatis-Plus 和数据库连接。

1. 项目结构

src
├── main
│   ├── java
│   │   └── com
│   │       └── example
│   │           ├── DemoApplication.java
│   │           ├── entity
│   │           │   └── Book.java
│   │           ├── mapper
│   │           │   └── BookMapper.java
│   │           ├── service
│   │           │   ├── BookService.java
│   │           │   └── impl
│   │           │       └── BookServiceImpl.java
│   │           └── controller
│   │               └── BookController.java
│   └── resources
│       └── application.properties
└── test└── java└── com└── example└── DemoApplicationTests.java

2. 添加依赖

在 pom.xml 中添加 MyBatis-Plus 和 MySQL 依赖:

POP.XML
 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo3</artifactId><version>0.0.1-SNAPSHOT</version><name>demo3</name><description>demo3</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>23</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jakarta相关依赖 --><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>8.0.0.Final</version> <!-- 或者选择一个适合Spring Boot 3.x的最新版本 --></dependency><dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId><version>3.0.2</version> <!-- 或者更高版本,确保与Spring Boot 3.x兼容 --></dependency><dependency><groupId>org.glassfish</groupId><artifactId>jakarta.el</artifactId><version>4.0.2</version> <!-- 提供EL表达式语言支持 --></dependency><!-- jakarta相关依赖 --><!-- swagger-ui依赖 --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version> <!-- 或者选择一个适合Spring Boot 3.x的最新版本 --></dependency><!-- MybatisPlus依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency><!-- MYSQL依赖 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3. 配置数据库和 MyBatis-Plus

在 application.properties 中配置数据库连接和 MyBatis-Plus:

application.properties

spring.application.name=demo3spring.datasource.url=jdbc:mysql://192.168.1.10:3306/databasename**?useSSL=false&serverTimezone=UTC
spring.datasource.username=user***
spring.datasource.password=psd***
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis-Plus 配置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.type-aliases-package=com.example.com.mapper# OpenAPI 配置
#springdoc.swagger-ui.path=/swagger-ui.html

启动 MyBatis-Plus 的分页功能 

MybatisPlusConfig.java
package com.example.demo.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

4. 创建实体类

使用 MyBatis-Plus 的注解定义实体类。

Book.java

package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data // 使用 Lombok 自动生成 getter 和 setter 方法
@TableName("books") // 指定数据库表名
public class Book {@TableId(type = IdType.AUTO) // 主键自增private Long id;private String name;private String author;
}

5. 创建 Mapper 接口

继承 MyBatis-Plus 的 BaseMapper 接口,自动获得 CRUD 方法。

BookMapper.java
package com.example.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.Book;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface BookMapper extends BaseMapper<Book> {// 无需手动编写 CRUD 方法,BaseMapper 已提供
}

6. 创建 Service 层

使用 MyBatis-Plus 的 IService 和 ServiceImpl 简化 Service 层代码。

BookService.java
package com.example.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.Book;public interface BookService extends IService<Book> {// 可以在此定义自定义方法
}
BookServiceImpl.java
package com.example.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.Book;
import com.example.mapper.BookMapper;
import com.example.service.BookService;
import org.springframework.stereotype.Service;@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {// 无需手动实现 CRUD 方法,ServiceImpl 已提供
}

7. 创建 Controller 层

在控制器中调用 Service 层的方法。

BookController.java

package com.example.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.entity.Book;
import com.example.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate BookService bookService;// 获取所有书籍@GetMappingpublic List<Book> findAll() {return bookService.list();}// 根据 ID 获取书籍@GetMapping("/{id}")public Book findById(@PathVariable Long id) {return bookService.getById(id);}// 创建书籍@PostMappingpublic void insert(@RequestBody Book book) {bookService.save(book);}// 更新书籍@PutMapping("/{id}")public void update(@PathVariable Long id, @RequestBody Book book) {book.setId(id);bookService.updateById(book);}// 删除书籍@DeleteMapping("/{id}")public void delete(@PathVariable Long id) {bookService.removeById(id);}// 分页查询书籍@GetMapping("/page")public IPage<Book> getBooksByPage(@RequestParam(defaultValue = "1") int pageNum, // 默认第 1 页@RequestParam(defaultValue = "10") int pageSize // 默认每页 10 条) {Page<Book> page = new Page<>(pageNum, pageSize);return bookService.page(page);}// 根据名称搜索书籍@GetMapping("/search")public List<Book> search(@RequestParam String keyword) {QueryWrapper<Book> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", keyword).or().like("author", keyword);return bookService.list(queryWrapper);}
}

8. 创建数据库表

在 MySQL 中创建 books 表:

CREATE TABLE books (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,author VARCHAR(100) NOT NULL
);

9. 运行项目

启动项目后,可以使用以下 API 进行测试:

  • 获取所有书籍

    bash

    复制

    curl http://localhost:8080/books
  • 根据 ID 获取书籍

    bash

    复制

    curl http://localhost:8080/books/1
  • 创建书籍

    bash

    复制

    curl -X POST -H "Content-Type: application/json" -d '{"name": "Spring Boot in Action", "author": "Craig Walls"}' http://localhost:8080/books
  • 更新书籍

    bash

    复制

    curl -X PUT -H "Content-Type: application/json" -d '{"name": "Spring Boot in Action (2nd Edition)", "author": "Craig Walls"}' http://localhost:8080/books/1
  • 删除书籍

    bash

    复制

    curl -X DELETE http://localhost:8080/books/1
  • 分页查询书籍

    bash

    复制

    curl http://localhost:8080/books/page?pageNum=1&pageSize=5
  • 搜索书籍

    bash

    复制

    curl http://localhost:8080/books/search?keyword=Spring

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

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

相关文章

RabbitMQ从入门到实战-2

文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机&#xff08;IDEA中&#xff09;基于Bean声明队列和交换机基于注解声明&#xff08;推&#xff09; 消息转换器配置Json消息转换器 业务改造&#…

《苍穹外卖》SpringBoot后端开发项目核心知识点与常见问题整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

可编辑PPT解析数字化转型是什么意思,传统企业的数字化、数字转型数字化变革之路

《传统企业数字化转型之路》是一份43页的PPT&#xff0c;主要探讨了传统企业在数字化转型过程中面临的挑战和解决方案。文档从竞品分析、竞标分析、整体环境、客户需求、品牌效应、市场份额、技术架构和部门效率等方面进行了详细讨论&#xff0c;指出如果企业在这些方面都存在问…

Pytorch系列教程:可视化Pytorch模型训练过程

深度学习和理解训练过程中的学习和进步机制对于优化性能、诊断欠拟合或过拟合等问题至关重要。将训练过程可视化的过程为学习的动态提供了有价值的见解&#xff0c;使我们能够做出合理的决策。训练进度必须可视化的两种方法是&#xff1a;使用Matplotlib和Tensor Board。在本文…

5.1 程序调试

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 本节中为了演示方便&#xff0c;使用的代码如下&#xff1a; 【例 5.1】【项目&#xff1a;code5-001】程序的调试。 static void Ma…

webRTC实现一对一通话视频流程

WebRTC 需要一个 信令服务器&#xff08;使用 WebSocket、Socket.io 或 WebRTC SDP 交换&#xff09;&#xff0c;用于两端互相交换连接信息&#xff08;SDP、ICE&#xff09;。 具体流程 1. 获取本地音视频流 设备 A 和 B 通过 getUserMedia() 获取摄像头和麦克风的音视频流…

理解 XSS 和 CSP:保护你的 Web 应用免受恶意脚本攻击

在当今的互联网世界中&#xff0c;Web 应用的安全性至关重要。随着网络攻击技术的不断演进&#xff0c;开发者需要采取多种措施来保护用户数据和应用的完整性。本文将深入探讨两种关键的安全概念&#xff1a;XSS&#xff08;跨站脚本攻击&#xff09; 和 CSP&#xff08;内容安…

数据结构--【栈与队列】笔记

栈的应用【实验题】 使用栈实现后缀表达式计算&#xff0c;其中&#xff0c;在后缀表达式中&#xff0c;输入的数字为整数&#xff0c;且为正数&#xff0c;数字、符号之间用空格隔开&#xff0c;整个后缀表达式用“#”表示结束。其中&#xff0c;整个后缀表达式长度不超过200…

Spring中的对象创建与生命周期管理

控制Spring工厂创建对象的次数 1.如何控制简单对象的创建次数 <bean id"account" scope"singleton|prototype" class"xxx.xxx.xxx"/> singleton:只会创建一次简单对象 默认值 prototype:每一次创建都会创建新的对象 2.如何控制复杂对象的…

Chainlit 实现SSO单点登录CAS授权完整代码图文教程

前言 之前写了一篇关于chanlit如何实现登录授权文章 《Chainlit 实现自定Oauth2.0登录完整代码图文教程》 ,文章以为接入gitee OAuth授权为例,图文并茂介绍如何操作,并附带了完整代码示例。这次我们实现更有难度的事情,使用chanlit实现CAS中央用户登录授权,下面是完整教程…

推理大模型时代,TextIn ParseX助力出版业知识资产重构

在大语言模型&#xff08;LLM&#xff09;与推理能力快速进化的技术浪潮下&#xff0c;出版机构沉淀数十年的非结构化数据资产&#xff0c;包括书籍、期刊、手稿及历史档案&#xff0c;正在焕发新的机遇。基于文档解析、NLP与大模型的推理生成能力&#xff0c;我们在图书馆层层…

【AI大模型智能应用】Deepseek生成测试用例

在软件开发过程中&#xff0c;测试用例的设计和编写是确保软件质量的关键。 然而&#xff0c;软件系统的复杂性不断增加&#xff0c;手动编写测试用例的工作量变得异常庞大&#xff0c;且容易出错。 DeepSeek基于人工智能和机器学习&#xff0c;它能够依据软件的需求和设计文…

[算法] 判断是否为字符串重排(simple, 面试)

文章目录 1. 题意2. 思路3. 编码 好的, 今天我们又是崭新的一天呐, 我们来分享一道很简单的题目 -> 判断是否为字符串重排 因为是简单 面试题的组合, 我们来一步一步走~ 力扣有个题解写的不错, 在这里分享一下: 力扣题解链接 1. 题意 给定两个由小写字母组成的字符串 s1…

健康养生:拥抱活力,畅享生活

在这个像高速列车般疾驰的现代社会&#xff0c;人们在忙碌中常常忘了呵护自己的身体。健康养生&#xff0c;就如同列车的保养手册&#xff0c;看似平淡无奇&#xff0c;实则是让我们保持最佳状态、驶向美好生活的关键。​ 饮食&#xff0c;是健康养生的 “砖石”。你看那色彩斑…

每日学习之一万个为什么

Mybatis官网 https://mybatis.org/mybatis-3/zh_CN/configuration.html Myabtis 入参 #{} 与 ${} 区别&#xff1a;前者占位符赋值&#xff0c;后者字符串拼接会在动态field和关键字用到但要防止SQL注入。 SQL中单个参数&#xff0c;占位符中建议写 形参名 如果是多个参数…

SpringBoot注解驱动CRUD工具:spring-avue-plus

项目背景 作为一个后端小伙伴&#xff0c;最大的痛点就是写完的接口需要拥有一些可视化的页面去承载这些功能使用【如果是只给后端那么swagger也足够了&#xff0c;非后端有点呛】如果有专业前端去弄确实也快&#xff0c;但是小公司呀~~~ 学呗~妈呀&#xff0c;现在的前端也挺…

manus对比ChatGPT-Deep reaserch进行研究类学术相关数据分析!谁更胜一筹?

没有账号&#xff0c;只能挑选一个案例 一夜之间被这个用全英文介绍全华班出品的新爆款国产AI产品的小胖刷频。白天还没有切换语言的选项&#xff0c;晚上就加上了。简单看了看团队够成&#xff0c;使用很长实践的Monica创始人也在其中。逐渐可以理解&#xff0c;重心放在海外产…

蛋白质功能预测论文阅读记录2025(DPFunc、ProtCLIP)

前言 最近研究到瓶颈了&#xff0c;怎么优化都提升不了&#xff0c;遂开始看点最新的论文。 DPFunc 2025.1.2 Nature Communication 中南大学 论文地址&#xff1a;DPFunc: accurately predicting protein function via deep learning with domain-guided structure inform…

c语言经典案例题

1. 交换两个数的值&#xff1a; #include <stdio.h> #define CRT_SECURE_NO_WARNINGS int main() {int a 5, b 10, c 0;c a;a b;b c;printf("a%d b%d", a, b); } 2. 键盘录入一个数组判断数组最大值&#xff1a; #include <stdio.h> #define CR…

facebook游戏投广:提高广告关键数据的方法

在当今竞争激烈的数字营销领域&#xff0c;游戏广告的投放效果直接关系到游戏公司的市场表现和盈利能力。然而&#xff0c;许多游戏公司在广告投放上面临着诸多挑战&#xff0c;如高昂的成本、低效的转化率以及难以追踪的效果。那么&#xff0c;如何才能通过数据分析真正提升游…