利用 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
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 的分页功能
- 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
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |