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

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=demo3

spring.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 {

    @Bean
    public 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 {

    @Autowired
    private BookService bookService;

    // 获取所有书籍
    @GetMapping
    public List<Book> findAll() {
        return bookService.list();
    }

    // 根据 ID 获取书籍
    @GetMapping("/{id}")
    public Book findById(@PathVariable Long id) {
        return bookService.getById(id);
    }

    // 创建书籍
    @PostMapping
    public 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.kler.cn/a/584470.html

相关文章:

  • 【GPT入门】第20课 文心千帆注册与API调用
  • 【工具变量】中国地级市科技金融试点政策名单数据(2000-2024年)
  • 【Academy】跨站点脚本 XSS ------ Cross-site scripting
  • uniapp APP使用web-view内嵌 h5 解决打包发版浏览器有缓存需要清除的问题
  • LLaMA:开放且高效的基础语言模型
  • 深度学习 模型和代码
  • mysql进阶——数据类型一篇详解
  • 在 Linux 64 位系统上安装 Oracle 11g R2 数据库的完整指南
  • 2025-3-13 leetcode刷题情况(贪心算法--区间问题)
  • Prompt优化 COT/COD
  • 时间有限,如何精确设计测试用例?5种关键方法
  • pop_dialog_state(state: State)弹出对话栈并返回到主助手,让整个对话流程图可以明确追踪对话流,并将控制权委派给特定的子对话图。
  • 使用conda将python环境打包,移植到另一个linux服务器项目中
  • Matplotlib高阶技术全景解析
  • 【数据挖掘】知识蒸馏(Knowledge Distillation, KD)
  • kali linux 漏洞扫描
  • (每日一题) 力扣 179 最大数
  • 前端面试:如何实现预览 PDF 文件?
  • 基于深度学习的肺炎X光影像自动诊断系统实现,真实操作案例分享,值得学习!
  • 【文献阅读】SPRec:用自我博弈打破大语言模型推荐的“同质化”困境