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

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

  1. 创建实体类 Book

  2. 创建 Mapper 接口 BookMapper

  3. 创建 Service 层 BookServiceBookServiceImpl

  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 的 IServiceServiceImpl 简化 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
相关推荐
好多大米3 分钟前
2.JVM-通俗易懂理解类加载过程
java·jvm·spring·spring cloud·tomcat·maven·intellij-idea
青云交5 分钟前
Java 大视界 -- 基于 Java 的大数据分布式数据库架构设计与实践(125)
java·大数据·分布式·分布式数据库·架构设计·数据处理·高可用性
跪在镜子前喊帅6 分钟前
【面试】JVM
java·面试
biubiubiu07067 分钟前
SpringBoot基础Kafka示例
spring boot·kafka·linq
茂茂在长安11 分钟前
JAVA面试_进阶部分_java中四种引用类型(对象的强、软、弱和虚引用)
java·jvm·面试
shengjk112 分钟前
数据湖的背景、现状与未来
人工智能·后端
程序员鱼皮12 分钟前
带大家做了个 AI 项目,没想到这么简单!
java·程序员·ai 编程
北京_宏哥23 分钟前
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
java·selenium·前端工程化
北京_宏哥27 分钟前
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
java·前端·selenium