SpringBoot+MyBatis flex实现简单增删改查

news2025/1/11 14:14:55

一:创建SpringBoot项目

SpringBoot版本选择2.7.15

勾选相关的选项,并点击Create

项目创建完成

二.pom文件添加相关的依赖

<dependencies>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-spring-boot-starter</artifactId>
        <version>1.6.4</version>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency> 

添加之后并且刷新依赖 

然后在mysql的依赖处加入版本号(8.0.33),并刷新依赖

不加的话在运行过程中可能会报错

将Springboot的版本更改为2.5.0,并刷新依赖

三.创建实体类entity(student)

实体类的属性有: id   name   gender  garde  score

package com.example.entity;

import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Table("student")
public class Student {
    @Id(keyType=KeyType.Auto)
    private long id;
    private String name;
    private String gender;
    private String grade;
    private int score;
}

注意:

1. 加入相关的注解

2.主键要自增

3.@Id(keyType = KeyType.Auto)书写的时候需要注意第一个k是小写的,第二个k是大写

4. @Table("student")中的student即为我们创建的数据表的表名

四.创建数据表(student)

创建表之后,并加入了 一条学生信息进去

五.创建mapper接口文件

启动类函数添加扫描注解(@MapperScan(""))

其中com.example.mapper为mapper包文件所在的路径4

六.创建sevice层

七.创建实现类

package com.example.service.Impl;

import com.example.entity.Student;
import com.example.mapper.StudentMapper;
import com.example.service.IStudentService;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class IStudentServiceImpl extends ServiceImpl<StudentMapper , Student> implements IStudentService {

  @Autowired
    private StudentMapper studentMapper;
}

注意

添加@Service注解 

八.创建控制类(StudentController)

package com.example.controller;


import com.example.service.IStudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private IStudentService studentService; 
}

注意:

添加RestController和RequestMapping两个注解

九.写封装返回实体类

package com.example.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RespBean {
    private long code;
    private String message;
    private Object object;

    public RespBean success(String message){
        return new RespBean(200,message,null);
    }
    public RespBean success(String message,Object object){
        return new RespBean(200,message,object);
    }
    public RespBean error(String message){
        return new RespBean(500,message,null);
    }
    public RespBean error(String message,Object object){
        return new RespBean(500,message,object);
    }
}

 注意:

添加注解@Data @AllArgsConstructor @NoArgsConstructor

十.配置数据库文件及端口

端口如果不配,则默认为8080

十一. 增删改查

一.查询(select)

步骤一:

在控制类(studentController)中写调用sevice层的接口的方法

方法名(selectAllStudents)   方法名可自行定义

@GetMapping("/selectAllStudents")
public List<Student> selectAllStudents(Student student){
    return studentService.selectAllStudents(student);
}

注意:

注解:

@GetMapping("/selectAllStudents")

步骤二:

在service里写selectAllStudents 方法

List<Student> selectAllStudents(Student student);

步骤三:

在实现类(IStudentServiceImpl)写实现该方法 

@Override
  public List<Student> selectAllStudents(Student student) {
    return studentMapper.selectAll();
  }
}

调试

访问地址:http://localhost:8084/swagger-ui/index.html#/

二.增加

步骤一:

在控制类(studentController)中写调用sevice层的接口的方法

方法名(addStudents)  

@PostMapping("addStudents")
public RespBean addStudents(Student student ){
    return studentService.addStudents(student);
}

注意:

注解:

@GetMapping("/selectAllStudents")

步骤二:

在service里写addStudents 方法

RespBean addStudents(Student student);

步骤三:

 在实现类(IStudentServiceImpl)写实现该方法 

  @Override
  public RespBean addStudents(Student student){
       studentMapper.insert(student);
       long id =student.getId();
       Student result=studentMapper.selectOneById(id);
       return RespBean.success("添加成功"+result);
  }
}

调试

 

点击Try it out 并根据属性输入数据

id可以不用输入

 然后去数据库student表查看

三.删除(delete)

删除的话我们可以根据id删除,可以根据name删除

A.根据id删除

步骤一:

在控制类(studentController)中写调用sevice层的接口的方法

方法名: deleteStudentById

@DeleteMapping("/deleteStudentById")
public RespBean deleteStudentById(int id){
    return studentService.deleteStudentById(id);
}

注意: 

注解:

@DeleteMapping("/deleteStudentById")

步骤二: 

在service里写deleteStudentById 方法

RespBean deleteStudentById(int id);

 步骤三:

 在实现类(IStudentServiceImpl)写实现该方法 

@Override
  public RespBean deleteStudentById(int id){
      QueryWrapper queryWrapper=QueryWrapper.create()
              .select()
              .from("student")
              .where(STUDENT.ID.eq(id));
      Student student=studentMapper.selectOneByQuery(queryWrapper);
      String username=student.getName();
      studentMapper.deleteById(id);
      return RespBean.success(username+"删除成功!");

  }
}

调试一:

 

当然如果我们删除的这个学生他不存在

在实现类添加if语句

例如:

调试二:

B.根据name删除

步骤一:

在控制类(studentController)中写调用sevice层的接口的方法

方法名: deleteStudentByName

@DeleteMapping("/ deleteStudentByName")
public RespBean  deleteStudentByName(String name){
    return studentService. deleteStudentByName(name);
}

步骤二: 

在service里写deleteStudentByIName 方法

步骤三:

 在实现类(IStudentServiceImpl)写实现该方法 

public RespBean  deleteStudentByName(String name){
  QueryWrapper queryWrapper= QueryWrapper.create()
          .select()
          .from("student")
          .where(STUDENT.NAME.eq(name));
  Student student=studentMapper.selectOneByQuery(queryWrapper);
  if(student==null) {
      return RespBean.error("该学生不存在!");
  }
      String username=student.getName();
      studentMapper.deleteByQuery(queryWrapper);
      return RespBean.success(username+"删除成功");
  }

调试

 

此时student表的学生已经被我删除完了

四.更改(update)

 步骤一:

在控制类(studentController)中写调用sevice层的接口的方法

方法名: updateStudents

@PostMapping("/updateStudents")
public RespBean updateStudents(Student student){
    return studentService.updateStudents(student);
}

注意 :

注解:

@PostMapping("/updateMapping")

步骤二: 

在service里写updateStudents 方法

RespBean updateStudents(Student student);

步骤三:

 在实现类(IStudentServiceImpl)写实现该方法 

@Override
public RespBean updateStudents(Student student){
  QueryWrapper queryWrapper=QueryWrapper.create()
          .select()
          .from("student")
          .where(STUDENT.ID.eq(student.getId()));
    studentMapper.update(student);
  return RespBean.success("修改成功");
}

 调试

假如我们把年级更改为高三,分数改为100

注意:

这里的id是必填选项,且id=?为你想要更改的对象,其他填选项为你想要更改的内容

我们再去查询该表

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

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

相关文章

排序——直接插入排序折半插入排序

文章目录 前言一、排序的基本概念1. 排序的定义2. 排序的分类1) 稳定排序2) 不稳定排序 二、插入排序1. 直接插入排序1&#xff09;直接插入排序算法分析 2. 直接插入排序代码3. 直接插入排序时间复杂度4. 折半插入排序5. 折半插入排序代码 总结 前言 排序的基本概念数据结构稳…

从数字化到智能化再到智慧化,智慧公厕让城市基础配套更“聪明”

随着科技的迅猛发展&#xff0c;城市生活方式与配置设施的方方面&#xff0c;面也在不断的改变和升级。智慧公厕作为城市基础配套设施的一部分&#xff0c;从数字化到智能化再到智慧化&#xff0c;正逐渐展现出其独特的魅力和优势。实现了公共厕所建设、使用与管理方式的全面变…

【AI】机器学习——支持向量机(非线性及分析)

5. 支持向量机(线性SVM) 文章目录 5.4 非线性可分SVM5.4.1 非线性可分问题处理思路核技巧核函数特点 核函数作用于SVM 5.4.2 正定核函数由 K ( x , z ) K(x,z) K(x,z) 构造 H \mathcal{H} H 空间步骤 常用核函数 5.5 SVM参数求解算法5.6 SVM与线性模型关系 5.4 非线性可分SVM …

奇偶数之和

任务描述 本关任务&#xff1a;请编一个函数fun(int *a,int n,int *odd,int *even)&#xff0c;函数的功能是分别求出数组a中所有奇数之和以及所有偶数之和。形参n给出数组中数据的个数&#xff1b;利用指针odd返回奇数之和&#xff0c;利用指针even返回偶数之和。 例如&#…

UE5_OpenCV库的加载方式

UE5使用opencv库要在系统中添加opencv的环境变量 在项目文件夹下新建ThirdParty,将OpenCV中的bin、opencv文件夹copy到ThirdParty中 打开项目,找到source目录下的build.cs文件 修改build.cs内容,添加头文件路径,dll路径,lib路径 // Copyright Epic Games, Inc. All Right…

leetcode21

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输…

腾讯mini项目-【指标监控服务重构】2023-07-21

今日已办 当在Docker容器中运行程序时&#xff0c;可能会遇到使用os.Getpid()函数时出现异常的情况。这是因为Docker容器中的进程隔离机制与宿主机器不同&#xff0c;容器内部的进程可能无法访问宿主机器的进程信息。 要解决这个问题&#xff0c;可以尝试&#xff1a; 使用do…

Linux磁盘管理:最佳实践

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

每日一博 - 防范彩虹表攻击_数据库存储密码的秘密武器

文章目录 概述图解小结 概述 加盐&#xff08;salting&#xff09;是一种安全存储数据库中密码并验证其真实性的常见方法&#xff0c;它的主要目的是增加密码的安全性&#xff0c;以防止常见的密码攻击&#xff0c;如彩虹表攻击。以下是关于如何使用加盐技术的简要介绍&#x…

计算机二级python基础题刷题笔记(三)

hello&#xff0c;看到三的小伙伴们你们已经超过30%的对手啦&#xff01;接下来也要加油呀 代码没有最好&#xff0c;只有更好&#xff0c;如果你有更好的想法答案欢迎在评论区里发表呀 1、将程序里定义好的std列表里的姓名和成绩与已经定义好的模板拼成一段话&#xff0c;显示…

我的微信公众号开通啦,来关注我吧

我的微信公众号开通啦&#xff0c;承蒙各位粉丝的厚爱&#xff0c;请大家动动手指扫码关注吧 公众号主要以Android开发技术文章为主&#xff0c;活跃度高&#xff0c;紧跟技术前沿&#xff0c;内容深度而全面&#xff0c;重要的是 私信必回&#xff01;私信必回&#xff01;私…

利用github托管个人网站

如何制作个人学术主页&#xff1f; - 知乎去年年底刚刚基于开源项目al-folio重新做了自己的个人主页。注意&#xff0c;这个开源项目很好&#xff0c;但是有个尴尬的问题…https://www.zhihu.com/question/281476526/answer/2360738062 your site可能会出现的慢一点&#xff0…

qsort函数详细讲解以及利用冒泡排序模拟实现qsort函数

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.qsort函数 1.1qsort函数的参数 …

Java笔记:Arthas-Java线上异常排查

一、安装 arthas在github上有个page&#xff0c;地址是https://alibaba.github.io/arthas/。 安装的方式有好几种&#xff1a; 1.直接下载一个可以启动的jar包然后用java -jar的方式启动 2.用官方提供的as.sh脚本一键安装 3.用rpm的方式安装 本篇介绍第一种方式&#xff0c;因…

无涯教程-JavaScript - EXP函数

描述 EXP函数返回e升至数字的幂。常数e等于自然对数的底数2.71828182845904。 语法 EXP (number)争论 Argument描述Required/OptionalNumberThe exponent applied to the base e.Required Notes 要计算其他碱基的幂,请使用幂运算符(^) EXP是LN的倒数,LN是数字的自然对数…

基于SSM的汽车租赁后台管理系统

基于SSM的汽车租赁后台管理系统 介绍 包括登录、首页、客户管理、车辆管理、汽车出租、出租单管理、汽车入库、检查单管理、系统管理等功能&#xff0c;适合二次开发课程设计、毕业设计等 软件架构 SSM 运行环境 数据库 mysql 安装教程输入链接说明 端口&#xff1a;3306…

第16篇ESP32 platformio_arduino框架 wifi联网_连接WiFi热点并连接tcp server收发数据进行通讯

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

BeanFactory版本的快速入门

目录 IOC原理 IOC工作步骤 开发步骤 实现代码 DI原理 DI工作步骤 IOC原理 在Spring框架中&#xff0c;IOC是通过Bean容器&#xff08;例如ApplicationContext&#xff09;来实现的。Bean容器负责管理Bean的创建、依赖关系的注入和对象的生命周期的控制。通过配置文件&am…

【软件设计师-从小白到大牛】上午题基础篇:第一章 计算机组成与体系结构

文章目录 前言章节提要一、数据的表示&#xff08;进制的转换&#xff09;1、R进制转十进制使用按权展开法2、十进制转R进制使用短除法(余数从下往上排列&#xff09;3、二进制转八进制与十六进制 二、数据的表示&#xff08;原码反码补码移码&#xff09;真题链接 三、数据的表…

国内券商有没有量化交易接口,哪家做的比较好

个人账户实现股票量化程序化自动交易&#xff0c;券商有接口&#xff0c;门槛已降低_股票程序交易接口的博客-CSDN博客 凡是开了量化交易接口的券商做的都不错&#xff0c;关键看适不适合你自己 我在用的是python语言&#xff0c;有本地客户端&#xff0c;随时修改随时调整策略…