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

打印 上一主题 下一主题

主题 936|帖子 936|积分 2818

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

  • 创建实体类 Book。
  • 创建 Mapper 接口 BookMapper。
  • 创建 Service 层 BookService 和 BookServiceImpl。
  • 创建 Controller 层 BookController。
  • 设置 MyBatis-Plus 和数据库毗连。
1. 项目结构

  1. src
  2. ├── main
  3. │   ├── java
  4. │   │   └── com
  5. │   │       └── example
  6. │   │           ├── DemoApplication.java
  7. │   │           ├── entity
  8. │   │           │   └── Book.java
  9. │   │           ├── mapper
  10. │   │           │   └── BookMapper.java
  11. │   │           ├── service
  12. │   │           │   ├── BookService.java
  13. │   │           │   └── impl
  14. │   │           │       └── BookServiceImpl.java
  15. │   │           └── controller
  16. │   │               └── BookController.java
  17. │   └── resources
  18. │       └── application.properties
  19. └── test
  20.     └── java
  21.         └── com
  22.             └── example
  23.                 └── DemoApplicationTests.java
复制代码

2. 添加依赖

在 pom.xml 中添加 MyBatis-Plus 和 MySQL 依赖:
POP.XML
 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>3.4.3</version>
  9.         <relativePath/> <!-- lookup parent from repository -->
  10.     </parent>
  11.     <groupId>com.example</groupId>
  12.     <artifactId>demo3</artifactId>
  13.     <version>0.0.1-SNAPSHOT</version>
  14.     <name>demo3</name>
  15.     <description>demo3</description>
  16.     <url/>
  17.     <licenses>
  18.         <license/>
  19.     </licenses>
  20.     <developers>
  21.         <developer/>
  22.     </developers>
  23.     <scm>
  24.         <connection/>
  25.         <developerConnection/>
  26.         <tag/>
  27.         <url/>
  28.     </scm>
  29.     <properties>
  30.         <java.version>23</java.version>
  31.     </properties>
  32.     <dependencies>
  33.         <dependency>
  34.             <groupId>org.springframework.boot</groupId>
  35.             <artifactId>spring-boot-starter-web</artifactId>
  36.         </dependency>
  37.       <!-- jakarta相关依赖 -->
  38.         <dependency>
  39.             <groupId>org.hibernate.validator</groupId>
  40.             <artifactId>hibernate-validator</artifactId>
  41.             <version>8.0.0.Final</version> <!-- 或者选择一个适合Spring Boot 3.x的最新版本 -->
  42.         </dependency>
  43.         <dependency>
  44.             <groupId>jakarta.validation</groupId>
  45.             <artifactId>jakarta.validation-api</artifactId>
  46.             <version>3.0.2</version> <!-- 或者更高版本,确保与Spring Boot 3.x兼容 -->
  47.         </dependency>
  48.         <dependency>
  49.             <groupId>org.glassfish</groupId>
  50.             <artifactId>jakarta.el</artifactId>
  51.             <version>4.0.2</version> <!-- 提供EL表达式语言支持 -->
  52.         </dependency>
  53.       <!-- jakarta相关依赖 -->
  54.         
  55.         <!-- swagger-ui依赖 -->
  56.         <dependency>
  57.             <groupId>org.springdoc</groupId>
  58.             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  59.             <version>2.7.0</version>
  60.         </dependency>
  61.         <dependency>
  62.             <groupId>org.projectlombok</groupId>
  63.             <artifactId>lombok</artifactId>
  64.             <version>1.18.30</version> <!-- 或者选择一个适合Spring Boot 3.x的最新版本 -->
  65.         </dependency>
  66.         <!-- MybatisPlus依赖 -->
  67.         <dependency>
  68.             <groupId>com.baomidou</groupId>
  69.             <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  70.             <version>3.5.5</version>
  71.         </dependency>
  72.         <!-- MYSQL依赖 -->
  73.         <dependency>
  74.             <groupId>com.mysql</groupId>
  75.             <artifactId>mysql-connector-j</artifactId>
  76.         </dependency>
  77.         <dependency>
  78.             <groupId>org.springframework.boot</groupId>
  79.             <artifactId>spring-boot-starter-test</artifactId>
  80.             <scope>test</scope>
  81.         </dependency>
  82.     </dependencies>
  83.     <build>
  84.         <plugins>
  85.             <plugin>
  86.                 <groupId>org.springframework.boot</groupId>
  87.                 <artifactId>spring-boot-maven-plugin</artifactId>
  88.             </plugin>
  89.         </plugins>
  90.     </build>
  91. </project>
复制代码
3. 设置数据库和 MyBatis-Plus

在 application.properties 中设置数据库毗连和 MyBatis-Plus:
application.properties


  1. spring.application.name=demo3
  2. spring.datasource.url=jdbc:mysql://192.168.1.10:3306/databasename**?useSSL=false&serverTimezone=UTC
  3. spring.datasource.username=user***
  4. spring.datasource.password=psd***
  5. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  6. # MyBatis-Plus 配置
  7. mybatis-plus.mapper-locations=classpath:mapper/*.xml
  8. mybatis-plus.type-aliases-package=com.example.com.mapper
  9. # OpenAPI 配置
  10. #springdoc.swagger-ui.path=/swagger-ui.html
复制代码
启动 MyBatis-Plus 的分页功能 

  1. MybatisPlusConfig.java
复制代码
  1. package com.example.demo.config;
  2. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  3. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class MybatisPlusConfig {
  8.     @Bean
  9.     public MybatisPlusInterceptor mybatisPlusInterceptor() {
  10.         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  11.         interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
  12.         return interceptor;
  13.     }
  14. }
复制代码




4. 创建实体类

利用 MyBatis-Plus 的注解定义实体类。
Book.java


  1. package com.example.demo.entity;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import com.baomidou.mybatisplus.annotation.TableName;
  5. import lombok.Data;
  6. @Data // 使用 Lombok 自动生成 getter 和 setter 方法
  7. @TableName("books") // 指定数据库表名
  8. public class Book {
  9.     @TableId(type = IdType.AUTO) // 主键自增
  10.     private Long id;
  11.     private String name;
  12.     private String author;
  13. }
复制代码
5. 创建 Mapper 接口

继承 MyBatis-Plus 的 BaseMapper 接口,自动得到 CRUD 方法。
BookMapper.java

  1. package com.example.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.example.entity.Book;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper
  6. public interface BookMapper extends BaseMapper<Book> {
  7.     // 无需手动编写 CRUD 方法,BaseMapper 已提供
  8. }
复制代码
6. 创建 Service 层

利用 MyBatis-Plus 的 IService 和 ServiceImpl 简化 Service 层代码。
BookService.java

  1. package com.example.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.example.entity.Book;
  4. public interface BookService extends IService<Book> {
  5.     // 可以在此定义自定义方法
  6. }
复制代码
BookServiceImpl.java

  1. package com.example.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.example.entity.Book;
  4. import com.example.mapper.BookMapper;
  5. import com.example.service.BookService;
  6. import org.springframework.stereotype.Service;
  7. @Service
  8. public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {
  9.     // 无需手动实现 CRUD 方法,ServiceImpl 已提供
  10. }
复制代码
7. 创建 Controller 层

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


  1. package com.example.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.example.entity.Book;
  6. import com.example.service.BookService;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.web.bind.annotation.*;
  9. import java.util.List;
  10. @RestController
  11. @RequestMapping("/books")
  12. public class BookController {
  13.     @Autowired
  14.     private BookService bookService;
  15.     // 获取所有书籍
  16.     @GetMapping
  17.     public List<Book> findAll() {
  18.         return bookService.list();
  19.     }
  20.     // 根据 ID 获取书籍
  21.     @GetMapping("/{id}")
  22.     public Book findById(@PathVariable Long id) {
  23.         return bookService.getById(id);
  24.     }
  25.     // 创建书籍
  26.     @PostMapping
  27.     public void insert(@RequestBody Book book) {
  28.         bookService.save(book);
  29.     }
  30.     // 更新书籍
  31.     @PutMapping("/{id}")
  32.     public void update(@PathVariable Long id, @RequestBody Book book) {
  33.         book.setId(id);
  34.         bookService.updateById(book);
  35.     }
  36.     // 删除书籍
  37.     @DeleteMapping("/{id}")
  38.     public void delete(@PathVariable Long id) {
  39.         bookService.removeById(id);
  40.     }
  41.     // 分页查询书籍
  42.     @GetMapping("/page")
  43.     public IPage<Book> getBooksByPage(
  44.             @RequestParam(defaultValue = "1") int pageNum, // 默认第 1 页
  45.             @RequestParam(defaultValue = "10") int pageSize // 默认每页 10 条
  46.     ) {
  47.         Page<Book> page = new Page<>(pageNum, pageSize);
  48.         return bookService.page(page);
  49.     }
  50.     // 根据名称搜索书籍
  51.     @GetMapping("/search")
  52.     public List<Book> search(@RequestParam String keyword) {
  53.         QueryWrapper<Book> queryWrapper = new QueryWrapper<>();
  54.         queryWrapper.like("name", keyword).or().like("author", keyword);
  55.         return bookService.list(queryWrapper);
  56.     }
  57. }
复制代码
8. 创建数据库表

在 MySQL 中创建 books 表:
  1. CREATE TABLE books (
  2.     id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3.     name VARCHAR(100) NOT NULL,
  4.     author VARCHAR(100) NOT NULL
  5. );
复制代码
9. 运行项目

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


  • 获取所有书籍
    bash
    复制
    1. curl http://localhost:8080/books
    复制代码
  • 根据 ID 获取书籍
    bash
    复制
    1. curl http://localhost:8080/books/1
    复制代码
  • 创建书籍
    bash
    复制
    1. curl -X POST -H "Content-Type: application/json" -d '{"name": "Spring Boot in Action", "author": "Craig Walls"}' http://localhost:8080/books
    复制代码
  • 更新书籍
    bash
    复制
    1. 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
    复制
    1. curl -X DELETE http://localhost:8080/books/1
    复制代码
  • 分页查询书籍
    bash
    复制
    1. curl http://localhost:8080/books/page?pageNum=1&pageSize=5
    复制代码
  • 搜索书籍
    bash
    复制
    1. curl http://localhost:8080/books/search?keyword=Spring
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表