Springboot整合MybatisPlus的基本CRUD

目录

  • 前言
  • 1. 搭建项目
  • 2. 基本的CRUD

前言

发现项目框架是MybatisPlus的,由于个人使用该框架的CRUD比较少
对此学习过程中,从零到有开始搭建学习还是比较重要的,感悟会比较多

关于各个类的使用,可看如下文章:

  1. 剖析Java中的Entity、service、serviceImpl、Mapper以及Controller层之间的关系(代码诠释)
  2. 区分JAVA项目中的ENTITY,VO,DTO,BO

1. 搭建项目

为了更好展示
在数据库中设计一张表,并且在表格中添加数据(数据和表格名称具体看个人实操):

其中主键id需要设置自增!

在这里插入图片描述

其内容具体如下所示:

在这里插入图片描述

在代码模块中,搭建基本的spring项目(由于现有的springboot模块比较新,不好兼容,对此需要对pom文件进行修改):

<?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>2.6.15</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><properties><java.version>21</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>2.3.0</version><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><builder>paketobuildpacks/builder-jammy-base:latest</builder></image></configuration></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build></project>

并且配置好数据库文件:

server.port=8081
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/blade_test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root

主体的项目文件如下所示:

在这里插入图片描述

启动类如下所示:

package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

其中User实体类如下所示:

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.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
//@AllArgsConstructor
//@NoArgsConstructor
@TableName("test_user")
public class User {@TableId(type = IdType.AUTO)private int id;private String username;private String password;// 其他字段...
}

对应的Mapper类如下所示:

package com.example.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper extends BaseMapper<User> {// 这里可以自定义一些查询方法
}

其Service类如下所示:

package com.example.demo.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.entity.User;public interface UserService extends IService<User> {// 这里可以自定义一些业务方法
}

Serviceimpl类如下所示:

package com.example.demo.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {// 这里可以实现自定义的业务方法
}

为了方便测试可以写一个Springboot的测试类:(其包名一定要对应一致):

package com.example.demo;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)class DemoApplicationTests {@AutowiredUserMapper userMapper;@AutowiredUserService userService;

2. 基本的CRUD

可以再controller中写入方法,并测试其接口。也可直接再测试类中输入,有可观的输出

类似Controller类中:

package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate UserMapper userMapper;@GetMapping("/select")public User getUserById() {User user = userMapper.selectById(1);return user;}@GetMapping("/{id}")public User getUserById(@PathVariable int id) {return userService.getById(id);}@PostMapping("/add")public String addUser(@RequestBody User user) {userService.save(user);return "User added successfully!";}@PutMapping("/update")public String updateUser(@RequestBody User user) {userService.updateById(user);return "User updated successfully!";}@DeleteMapping("/delete/{id}")public String deleteUser(@PathVariable int id) {userService.removeById(id);return "User deleted successfully!";}
}

通过接口进行测试,具体如下:

在这里插入图片描述

或者直接再测试类:

    @Testpublic void TestSelectById(){User user = userMapper.selectById(1);System.out.println(user);}

结果如下:

在这里插入图片描述

又比如测试类中的这些CRUD方法:(诸如其他,各位博友可自行尝试):

    @Testpublic void getUserById() {List<User> one = userMapper.selectList(Wrappers.<User>lambdaQuery().eq(User::getUsername,"manong"));System.out.println(one);}

截图如下:

在这里插入图片描述

其中service以及mapper都有其各自的方法进行CRUD

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java—AOP案例-记录操作日志

简介&#xff1a;上一篇文章“JAVA语言—AOP基础”已经详细的介绍了AOP的各个功能接口&#xff0c;已经使用步骤&#xff0c;这篇文章就是基于此来做的一个小案例。案例的功能是记录登录的用户对于数据库表的相关信息进行增、删、查、改的操作记录下来&#xff0c;并且存储到数…

腾讯云轻量应用服务器详细介绍(全网超详细说明)

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别优惠&#xff0c;轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、4核8G12M带宽646元15个月等&#xf…

微信小程序开发系列-08自定义组件模版特性

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…

第二篇 创建型设计模式 - 灵活、解耦的创建机制

第二篇&#xff1a;创建型设计模式 - 灵活、解耦的创建机制 创建型设计模式关注对象的创建过程&#xff0c;旨在提供灵活、解耦的创建机制。以下是五种常见的创建型设计模式的详解及其应用场景。 1. 工厂方法模式详解及其应用场景 详解&#xff1a; 工厂方法模式定义了一个用…

点成案例 | 如何利用细胞计数仪在单细胞测序中评估细胞

一、概述 单细胞测序技术能够用来表征异常细胞群&#xff0c;分析稀有细胞和细胞图谱网络&#xff0c;发现异质性等。由于单细胞测序巨大的应用潜力&#xff0c;目前此技术正在经历爆炸性增长。然而&#xff0c;单细胞测序需要成本和时间的大量投资。为了确保时间和资源的投资…

正确的认识 字节码文件

上一篇中认识了JVM的基本组成&#xff0c;我们说JVM只认识字节码文件。那么在字节码文件进入JVM之前&#xff0c;我们先认识了解字节码文件长什么样&#xff0c;我们作为工程师不需要去死扣底层的理论知识&#xff0c;但是我们只是需要正确的打开字节码文件 知道里面有哪些部分…

[Angular] 笔记 22:ElementRef

chatgpt: ElementRef 是 Angular 中的一个类&#xff0c;它用于包装对 DOM 元素的引用。它允许开发者直接访问与 Angular 组件关联的宿主 DOM 元素。 当在 Angular 中需要直接操作 DOM 元素时&#xff0c;可以使用 ElementRef。通常情况下&#xff0c;最好避免直接操作 DOM&a…

Docker启动各种服务

文章目录 1 启动MySQL2 启动maven&#xff0c;用于编译java程序3 容器内启动sshd&#xff0c;用于远程编码和调试 1 启动MySQL 守护方式运行一个容器&#xff1a; docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 -d mysql进入容器&#xff1a; dock…

Prism介绍

Prism介绍 Prism是一个框架&#xff0c;用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、可维护和可测试的XAML应用程序。 设计目标 为了实现下列目的&#xff1a; 创建能够由模块组成的程序&#xff0c;这些模块能够被单独地编写、组装、部署&#xff0c;并且对…

【Vue3】黑马程序员 SpringBoot3+Vue3 大事件项目中 P92 抽屉样式 `:deep() Term expected` 报错的解决方法

这个报错其实不影响运行&#xff0c;但有些有强迫症的同学可能会很难受&#xff0c;以下是解决方法&#xff1a; 报错代码&#xff1a; :deep() {.avatar {width: 178px;height: 178px;display: block;}.el-upload {border: 1px dashed var(--el-border-color);border-radius…

十三:爬虫-Scrapy框架(下)

一&#xff1a;各文件的使用回顾 1.items的使用 items 文件主要用于定义储存爬取到的数据的数据结构&#xff0c;方便在爬虫和 Item Pipeline 之间传递数据。 items.pyimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:title scr…

jmeter函数助手-常用汇总

一.函数助手介绍 1.介绍及作用 介绍&#xff1a; jmeter自带的一个特性&#xff0c;可以通过指定的函数规则创建后进行调用该函数&#xff0c;在后续接口请求参数中进行调用 作用 &#xff08;1&#xff09;做参数化。 2.如何使用 jmeter工具栏-->工具-->函数助手…

LabVIEW在大型风电机组状态监测系统开发中的应用

LabVIEW在大型风电机组状态监测系统开发中的应用 风电作为一种清洁能源&#xff0c;近年来在全球范围内得到了广泛研究和开发。特别是大型风力发电机组&#xff0c;由于其常常位于边远地区如近海、戈壁、草原等&#xff0c;面临着恶劣自然环境和复杂设备运维挑战。为了提高风电…

DockerCompose - 容器编排、模板命令、compose命令、Pottainer 可视化界面管理(一文通关)

目录 一、DockerCompose 容器编排 1.1、简介 1.2、Docker-Compose 安装 1.2.1、在线安装 1.2.2、离线安装 1.3、docker-compose.yml 中的模板命令 前置说明 模板命令 1.4、DockerCompse 命令 前置说明 up down exec ps restart rm top pause暂停 和 unpause恢…

linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记一

相关内容我写在公众号&#xff0c;写的挺详细的&#xff0c;欢迎关注我的公众号。请使用鼠标右键&#xff0c;新建标签页打开&#xff0c;直接点击显示参数错误&#xff0c;不知道怎么回事&#xff1f;linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记 (qq.com)https:…

Windows下配置GCC(MinGW)环境

一、下载并安装MinGW 步骤1&#xff1a;下载MinGW安装器 前往MinGW的官方下载源&#xff0c;通过以下链接可以获取到最新版的MinGW安装程序&#xff1a; 网页地址&#xff1a;https://sourceforge.net/projects/mingw/files/ [MinGW 下载地址](https://sourceforge.net/proj…

69.x的平方根

给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1&#xff1…

二级路由的配置以及注意项

二级路由 比如说LayOut组件是父亲&#xff0c;LayOut和ArtComp是儿子&#xff0c;那我们怎么给儿子配路由呢&#xff1f; 1、首先在router下的index.js导入组件&#xff0c;配置规则&#xff0c;详细如下 // 导入路由相关组件 import LayOut from /views/LayOut import UserC…

页面布局--Flexbox的自动边距

标题页面布局–Flexbox的自动边距 通过简单的margin:auto&#xff0c;我们就能实现元素的多种对齐方式。 假设我们在盒子模型里有四个元素&#xff1a; 先给容器使用flex布局&#xff1a; .container {display: flex;justify-content: flex-start;align-items: center;gap: 6…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-00x00

如上表所示&#xff0c;MOE0&#xff0c;OSSI0&#xff0c;CCxE0&#xff0c;CCxNE0时&#xff0c;OCx与OCxN的输出状态取决于GPIO端口上下拉状态。 ---------------------------------------------------------------------------------------------------------------------…