【mybatis】mybatis-plus_CRUD具体操作

1、环境准备

1. 环境准备

1. 引入依赖

在Spring Boot项目的pom.xml文件中引入MyBatis-Plus及其数据库驱动的依赖。这里以MySQL为例:

<!-- 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>你的版本号</version>  
</dependency>  <!-- MySQL 驱动 -->  
<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>

2. 配置数据库

application.ymlapplication.properties中配置数据库连接信息:

spring:  datasource:  url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC  username: root  password: your_password  driver-class-name: com.mysql.cj.jdbc.Driver  mybatis-plus:  mapper-locations: classpath:/mappers/*.xml  type-aliases-package: com.example.demo.entity  global-config:  db-config:  id-type: auto  logic-delete-value: 1  logic-not-delete-value: 0

3. 创建实体类

使用Lombok简化代码,例如:

import com.baomidou.mybatisplus.annotation.TableId;  
import com.baomidou.mybatisplus.annotation.TableName;  
import lombok.Data;  @Data  
@TableName("user")  
public class User {  @TableId  private Long id;  private String name;  private Integer age;  // 其他字段...  
}

4. 创建Mapper接口

继承BaseMapper来简化开发:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;  
import com.example.demo.entity.User;  public interface UserMapper extends BaseMapper<User> {  // 这里可以添加自定义的Mapper方法,如果不需要可以留空  
}

5. 创建Service层

如果你需要,可以创建一个Service层来处理业务逻辑:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;  
import com.example.demo.entity.User;  
import com.example.demo.mapper.UserMapper;  public class UserService extends ServiceImpl<UserMapper, User> {  // 这里可以添加自定义的业务逻辑方法  
}

6. 创建Controller层

创建RESTful API来处理HTTP请求:

import com.example.demo.entity.User;  
import com.example.demo.service.UserService;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.*;  @RestController  
@RequestMapping("/users")  
public class UserController {  @Autowired  private UserService userService;  @GetMapping("/")  public List<User> listAllUsers() {  return userService.list();  }  @PostMapping("/")  public User createUser(@RequestBody User user) {  userService.save(user);  return user;  }  @GetMapping("/{id}")  public User getUserById(@PathVariable Long id) {  return userService.getById(id);  }  @PutMapping("/{id}")  public User updateUser(@PathVariable Long id, @RequestBody User user) {  user.setId(id);  userService.updateById(user);  return user;  }

2、增加

import com.example.demo.entity.User;  
import com.example.demo.service.UserService;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestBody;  
import org.springframework.web.bind.annotation.RestController;  @RestController  
@RequestMapping("/users")  
public class UserController {  @Autowired  private UserService userService;  @PostMapping("/")  public User createUser(@RequestBody User user) {  userService.save(user); // 调用Service层的save方法,实际调用的是MyBatis-Plus的插入操作  return user;  }  
}

3、删除

// 删除单个用户  
@DeleteMapping("/{id}")  
public String deleteUser(@PathVariable Long id) {  userService.removeById(id); // 或者使用userMapper.deleteById(id)直接调用Mapper  return "User deleted successfully";  
}  // 批量删除用户(示例)  
@DeleteMapping("/batch")  
public String deleteUsers(@RequestBody List<Long> ids) {  userService.removeByIds(ids); // 批量删除  return "Users deleted successfully";  
}

4、修改

// 更新用户信息  
@PutMapping("/{id}")  
public User updateUser(@PathVariable Long id, @RequestBody User user) {  user.setId(id); // 确保用户ID被设置  userService.updateById(user); // 调用Service层的updateById方法  return user;  
}

5、查找

// 查询单个用户  
@GetMapping("/{id}")  
public User getUserById(@PathVariable Long id) {  return userService.getById(id); // 调用Service层的getById方法  
}  // 查询所有用户  
@GetMapping("/")  
public List<User> getAllUsers() {  return userService.list(); // 调用Service层的list方法,实际调用的是MyBatis-Plus的查询所有操作  
}  // 根据条件查询用户(示例,需要自定义Mapper或Service方法)  
@GetMapping("/search")  
public List<User> searchUsers(@RequestParam String name) {  // 这里仅为示例,实际中可能需要自定义Mapper接口中的方法  // return userService.searchByName(name); // 假设有这样一个自定义方法  // ... 实际实现中,你可能需要编写一个自定义的Mapper方法并使用@Select注解来定义SQL查询  
}

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

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

相关文章

wordpress企业主题和wordpress免费主题

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 SEO优化wordpress主题 简洁的SEO优化wordpress主题&#xff0c;效果好不好&#xff0c;结果会告诉你…

JS中的上下文

一.执行上下文的概念&#xff1a; 执行上下文简称上下文。变量或者函数的上下文决定了它们可以访问哪些数据&#xff0c;以及它们的行为。每一个上下文都具有一个关联的变量对象&#xff0c;而这个上下文中定义的所有变量和函数都存在于这个对象上。 二.JS中上下文的执行机制&a…

第一后裔The First Descendant延迟、卡顿、无法联机?

The First Descendant第一后裔游戏中还设计了多种辅助攻击手段&#xff0c;它们如同角色手中的魔法&#xff0c;为战斗增添了无数可能性。这些辅助攻击手段或能造成范围伤害&#xff0c;或能减速敌人&#xff0c;甚至能召唤出强大的支援力量。最近有玩家反映&#xff0c;遇到了…

Windows条件竞争提权漏洞复现(CVE-2024-300889)

漏洞原理 当内核将当前令牌对象的 _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION 复制到用户模式时&#xff0c;错误位于函数 AuthzBasepCopyoutInternalSecurityAttributes 内部&#xff0c;该模式的结构如下&#xff1a; //0x30 bytes (sizeof) struct _AUTHZBASEP_SECURIT…

科研工具|从图片中提取曲线数据

最近水哥在做一个项目时需要用到一篇论文中的数据&#xff0c;而这数据是作者的实验数据&#xff0c;且年代较为久远&#xff0c;联系原作者要一份数据也不太现实&#xff0c;因而只能从论文的图片中提取数据了。 目前市面上有很多小软件可以实现这方面的功能&#xff0c;比如…

DVT:华为提出动态级联Vision Transformer,性能杠杠的 | NeurIPS 2021

论文主要处理Vision Transformer中的性能问题&#xff0c;采用推理速度不同的级联模型进行速度优化&#xff0c;搭配层级间的特征复用和自注意力关系复用来提升准确率。从实验结果来看&#xff0c;性能提升不错 来源&#xff1a;晓飞的算法工程笔记 公众号 论文: Not All Image…

应用进程、SurfaceFlinger进程、HWC进程 之间的关系

应用进程、SurfaceFlinger进程、HWC&#xff08;Hardware Composer&#xff09;进程在Android系统中扮演着重要的角色&#xff0c;它们之间的关系和通信流程是Android图形显示系统的核心部分。以下是这三者之间关系和通信流程的详细分析&#xff1a; 一、三者之间的关系 应用进…

AI 写作:随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少?以上材料引发了你怎样的联想和思考?

随着互联网的迅速发展和人工智能技术的进步&#xff0c;信息获取的速度和广度都达到了前所未有的程度。人们只需轻点几下鼠标或对着智能设备说出一句指令&#xff0c;海量的知识和解决方案就在眼前。这种便捷无疑极大地提高了我们的工作效率和生活质量&#xff0c;使我们在面对…

智慧应急管理平台:数字孪生,让防汛救灾更科学高效

近期全国各地暴雨频发&#xff0c;城市排水系统面临着前所未有的挑战&#xff0c;应急防涝已成为城市管理中不可或缺的一环。在这个信息化、智能化的时代&#xff0c;数字孪生技术以其独特的优势&#xff0c;为应急领域带来了革命性的变革。数字孪生&#xff0c;作为现实世界在…

揭秘:学校教室采用数码管同步时钟的原因-讯鹏电子钟

在学校的教室里&#xff0c;我们常常会看到数码管同步时钟的身影。究竟是什么原因让它成为学校教室的宠儿呢&#xff1f;让我们一同来探究其中的奥秘。 数码管同步时钟具有极高的准确性。对于学校这样一个对时间管理要求严格的场所&#xff0c;准确的时间是保障教学秩序的基石。…

SwinIR: Image Restoration Using Swin Transformer(ICCV 2021)含代码复现

目录 一、Introduction 1 Motivation 2 Contribution 二、原理分析 1 Network Architecture 1&#xff09;Shallow feature extraction 2) deep feature extraction 3) image reconsruction modules 4) loss function 2 Residual Swin Transformer Block 三、实验结果…

没有调用memcpy却报了undefined reference to memcpy错误

现象 在第5行出现了&#xff0c;undefined reference to memcpy’ 1 static void printf_x(unsigned int val) 2{ 3 char buffer[32]; 4 const char lut[]{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}; 5 char *p buffer; 6 while (val || p buffer) { 7 *(p) …

基于循环神经网络的一维信号降噪方法(简单版本,Python)

代码非常简单。 import torch import torch.nn as nn from torch.autograd import Variable from scipy.io.wavfile import write #need install pydub module #pip install pydub import numpy as np import pydub from scipy import signal import IPython import matplot…

C语言学习记录(十二)——指针与数组及字符串

文章目录 前言一、指针和数组二、指针和二维数组**行指针(数组指针)** 三、 字符指针和字符串四、指针数组 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、指针和数组 在C语言中 &#xff0…

【vscode插件】多行注释

最近在编写C程序的过程中&#xff0c;笔者发现&#xff0c;vscode默认的多行注释是使用单行注释拼起来的&#xff0c;对于笔者想要突出多行注释&#xff0c;同时便于后续修改的需求无法满足&#xff0c;随体验一下自己开发VSCODE插件。 可以说&#xff0c;整个插件的开发和上线…

软件开发生命周期(Software Development Life Cycle, SDLC)

目录 简介 简介 软件开发生命周期&#xff08;Software Development Life Cycle, SDLC&#xff09;是软件从概念到正式交付和维护的一系列阶段。每个阶段都有其特定的目标和活动&#xff0c;以下是软件开发生命周期中常见的几个阶段&#xff1a; 需求收集与分析&#xff08;R…

IndexError: image index out of range

IndexError: image index out of range 这个错误通常意味着你尝试访问的图像索引超出了图像的实际尺寸范围。在你给出的代码行&#xff1a; s_img_point_color_list.append(s_pixels[coordinate[0], coordinate[1]])你正在尝试从 s_pixels 这个变量&#xff08;很可能是一个图…

Android系统为什么lmkd杀到adj 100就代表有低内存?

在Android系统中&#xff0c;lmkd&#xff08;Low Memory Killer Daemon&#xff0c;低内存终止守护进程&#xff09;负责监控系统的内存状态&#xff0c;并在内存压力较高时通过终止不必要的进程来释放内存&#xff0c;以维持系统的稳定运行。关于lmkd为何在杀到adj&#xff0…

Nginx负载均衡及动静分离

目录 一、Nginx负载均衡【重点】 1.1 轮询 1.2 权重 1.3 ip_hash 二、Nginx动静分离【重点】 2.1 动态资源代理 2.2 静态资源代理 官方文档 nginx 一、Nginx负载均衡【重点】 Nginx为我们默认提供了三种负载均衡的策略&#xff1a; 轮询&#xff1a;将客户端发起的请求…

【chatgpt】pytorch中requires_grad=True

在 PyTorch 中&#xff0c;requires_gradTrue 是一个非常重要的标志&#xff0c;它指示 PyTorch 是否需要为某个张量计算梯度。这在训练神经网络时尤为关键&#xff0c;因为我们通常需要通过反向传播来更新模型参数&#xff0c;以最小化损失函数。 requires_gradTrue 的作用 …