使用 MyBatis-Plus 操作 books
表。我们将实现以下功能:
-
创建实体类
Book
。 -
创建 Mapper 接口
BookMapper
。 -
创建 Service 层
BookService
和BookServiceImpl
。 -
创建 Controller 层
BookController
。 -
配置 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