SpringBoot集成MybatisPlus

embedded/2024/12/22 2:33:49/

1. 初始化 Spring Boot 项目

首先,使用 Spring Initializr 生成一个 Spring Boot 项目,并添加以下依赖:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis Plus Starter --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.3</version></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- Spring Boot Starter Test (for testing purposes) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

2. 添加数据库配置

在 src/main/resources/application.properties 文件中添加数据库配置,并包含 user 表的 SQL 建表语句:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=cn.shutdown.demo.model
# User 表的 SQL 建表语句
CREATE TABLE `user` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,`email` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

确保数据库连接信息正确,并且已经创建了一个名为 your_database 的数据库。

创建 User 实体类

在 src/main/java/cn/shutdown/demo/model 目录下创建 User.java:

package cn.shutdown.demo.model;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;
}

创建 UserMapper 接口

在 src/main/java/cn/shutdown/demo/mapper 目录下创建 UserMapper.java:

package cn.shutdown.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.shutdown.demo.model.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {// 这里不需要写额外的代码,因为 BaseMapper 已经提供了基本的 CRUD 操作
}

创建 UserService 接口和实现类

在 src/main/java/cn/shutdown/demo/service 目录下创建 IUserService.java 和 UserServiceImpl.java:

package cn.shutdown.demo.service;import com.baomidou.mybatisplus.extension.service.IService;
import cn.shutdown.demo.model.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;public interface IUserService extends IService<User> {IPage<User> selectUserPageByQuery(Page<User> page, UserQuery query);
}
package cn.shutdown.demo.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.shutdown.demo.mapper.UserMapper;
import cn.shutdown.demo.model.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.shutdown.demo.model.UserQuery;public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {@Overridepublic IPage<User> selectUserPageByQuery(Page<User> page, UserQuery query) {// 这里可以根据query对象中的属性来构建动态的查询条件// 例如,使用MyBatis Plus的条件构造器return baseMapper.selectPage(page, getQueryWrapper(query));}private QueryWrapper<User> getQueryWrapper(UserQuery query) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();if (query.getName() != null) {queryWrapper.like("name", query.getName());}if (query.getEmail() != null) {queryWrapper.like("email", query.getEmail());}// 可以根据需要添加更多的查询条件return queryWrapper;}
}

创建 UserController 类

在 src/main/java/cn/shutdown/demo/controller 目录下创建 UserController.java:

package cn.shutdown.demo.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import cn.shutdown.demo.model.User;
import cn.shutdown.demo.service.IUserService;
import cn.shutdown.demo.model.UserQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Optional;@RestController
public class UserController {@Autowiredprivate IUserService userService;@GetMapping("/users")public IPage<User> listUsers(@RequestParam(defaultValue = "1") int currentPage,@RequestParam(defaultValue = "10") int pageSize,@RequestParam(required = false) String name,@RequestParam(required = false) String email) {Page<User> page = new Page<>(currentPage, pageSize);UserQuery query = new UserQuery();query.setName(name);query.setEmail(email);return userService.selectUserPageByQuery(page, query);}
}

配置 MyBatis Plus 分页插件

在 src/main/java/cn/shutdown/demo/config 目录下创建 MyBatisPlusConfig.java:

package cn.shutdown.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 {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

运行项目

确保你的数据库已经运行,并且 user 表已经创建。运行 Spring Boot 应用程序,然后访问 http://localhost:8080/users?pageNum=1&pageSize=10 来测试分页查询。

添加模糊查询功能
如果需要添加模糊查询功能,可以按照之前的步骤进行扩展,添加 UserQuery 类、更新 UserService 和 UserMapper,并在 UserController 中添加新的接口。


http://www.ppmy.cn/embedded/103918.html

相关文章

Call openai-node in the backend or call https in the frontend?

题意&#xff1a;在后端调用 openai-node 还是在前端调用 https&#xff1f; 问题背景&#xff1a; I have a web application by ReactJS and Nodejs. This application calls OpenAI APIs. 我有一个使用 ReactJS 和 Node.js 开发的 Web 应用程序。这个应用程序调用 OpenAI …

C语言 | Leetcode C语言题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b))int lengthLongestPath(char * input){int n strlen(input);int pos 0;int ans 0;int * level (int *)malloc(sizeof(int) * (n 1));memset(level, 0, sizeof(int) * (n 1));while (po…

docker加速配置 daemon.json

配置docker 加速 提高下载速度 在某些地区&#xff0c;尤其是中国&#xff0c;Docker Hub 的访问速度可能较慢&#xff0c;导致镜像下载时间过长。通过配置加速器&#xff0c;可以显著提高镜像的拉取速度&#xff0c;减少等待时间。 减少网络不稳定带来的影响 网络不稳定可能导…

HTML基本标签

文章目录 HTML介绍HTML标签介绍标题标签段落标签换行标签span标签div标签img标签超链接标签特殊字符格式化标签 HTML介绍 HTML&#xff08;HyperText Markup Language&#xff09;是超文本标记语言。它由一系列的元素&#xff08;即标签&#xff09;组成&#xff0c;每个标签都…

单元测试、系统测试和集成测试知识详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff…

Python网络爬虫模拟登录与验证解析

内容导读 使用Selenium模拟登录 使用Cookies登录网站 模拟表单登录网站 爬虫识别简单的验证码 实例解析 一、使用Selenium模拟登录 1、为什么要模拟登录 在互联网上存在大量需要登录才能访问的网站&#xff0c;要爬取这些网站&#xff0c;就需要学习爬虫的模拟登录。对…

Vite项目启动服务器时报错 Error: Cannot find module @rollup/rollup-win32-x64-msvc.

前言&#xff1a; 网上找了很多方法&#xff0c;尝试后都不行。在某篇文章评论区种找到了一种方法解决了&#xff0c;谨以此篇文章记录解决问题的方案&#xff0c;方便日后使用。 解决方法&#xff1a;github链接 Cannot find module rollup/rollup-win32-x64-msvc (rollup 4.…

掌握测试的艺术:深入探索Python的pytest库

文章目录 **掌握测试的艺术&#xff1a;深入探索Python的pytest库**背景&#xff1a;为什么选择pytest&#xff1f;pytest是什么&#xff1f;如何安装pytest&#xff1f;5个简单的库函数使用方法1. pytest.main()2. pytest.skip()3. pytest.mark.parametrize()4. pytest.raises…