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

一:创建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 {@Autowiredprivate 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 {@Autowiredprivate 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)写实现该方法 

@Overridepublic 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)写实现该方法 

  @Overridepublic 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)写实现该方法 

@Overridepublic 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.mzph.cn/news/84161.shtml

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

相关文章

企业如何找媒体发稿能收录且不被拒稿,媒介盒子无偿分享

媒平台像头条、百家号、微信、微博、搜狐等平台&#xff0c;都支持全自助发稿&#xff0c;拥有庞大的用户群体。也正是因为这些平台的发展&#xff0c;衍生出了一大批自媒体KOL&#xff0c;影响力与传统媒体不相上下甚至更胜。 媒体宣发是企业营销的必要途径之一。软文是成本低…

软件设计模式系列之十一——装饰模式

当谈到设计软件系统时&#xff0c;经常需要考虑如何使系统更加灵活、可扩展和易维护。设计模式是一种被广泛采用的方法&#xff0c;用于解决常见的设计问题&#xff0c;并提供了一套可重用的解决方案。装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&…

Vue路由与node.js环境搭建

目录 前言 一.Vue路由 1.什么是spa 1.1简介 1.2 spa的特点 1.3 spa的优势以及未来的挑战 2.路由的使用 2.1 导入JS依赖 2.2 定义两个组件 2.3 定义组件与路径对应关系 2.4 通过路由关系获取路由对象 2.5 将对象挂载到vue实例中 2.6 定义触发路由事件的按钮 2.7 定…

Python编辑器和Pycharm的傻瓜式安装部署

给我家憨憨写的python教程 有惊喜等你找噢 ——雁丘 Python解释器Pycharm的安装部署 关于本专栏一 Python编辑器1.1 使用命令提示符编写Python程序1.2 用记事本编写Python程序 二 Pycharm的安装三 Pycharm的部署四 Pycharm基础使用技巧4.1 修改主题颜色4.2 修改字体4.3 快速修…

nvme_queue_rq函数分析一

nvme I/O请求时&#xff0c;数据交互分析 主要函数为nvme_queue_rq&#xff1a; static blk_status_t nvme_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_mq_queue_data *bd) {struct nvme_ns *ns hctx->queue->queuedata;struct nvme_queue *nvmeq hctx-…

js 事件流、事件冒泡、事件捕获、阻止事件的传播

事件流 js 事件的执行过程分为捕获阶段&#xff08;由外层节点传播到内层节点&#xff09;和冒泡阶段&#xff08;由内层节点传播到外层节点&#xff09;&#xff0c;即先执行捕获阶段的代码&#xff0c;后执行冒泡阶段的代码 事件冒泡 js 事件中的代码默认在冒泡阶段执行&…

自动化发布npm包小记

1.注册npm账号 打开npm官网&#xff0c;并注册自己的npm账号 2.申请AccessToken 1.登录npm官网&#xff0c;登录成功后&#xff0c;点开右上角头像&#xff0c;并点击Access Tokens选项 2.点开Generate New Token下拉框&#xff0c;点击Classic Token(和Granular Access To…

VS2019创建GIt仓库时剔除文件或目录

假设本地有解决方案“SomeSolution” 1、首先”团队资源管理器“-“创建Git存储库”&#xff0c;选择“仅限本地”、“创建” VS会在解决方案目录下自动生成.gitattributes、.gitignore 2、编辑gitignore&#xff0c;直接拖到VS里或者用记事本打开。添加要剔除的文件或文件夹…

轻松自定义文件,悦享文件管理与格式转换!

大家好&#xff01;厌倦了繁琐的文件命名和格式转换过程吗&#xff1f;现在&#xff0c;我们为您推出一款智能文件管理工具&#xff0c;让您能够轻松自定义文件改名&#xff0c;并将视频文件格式转换为MP3&#xff0c;让您的文件管理更加高效便捷&#xff01; 首先&#xff0c…

Redis核心数据结构实战与高性能解析

目录 一、安装Redis 二、Redis线程与高性能 2.1 Redis是单线程么&#xff1f; 2.2 Redis读写是单线程为何这么快&#xff1f; 2.3 Redis如何处理并发操作命令&#xff1f; 三、核心数据结构实战 3.1 字符串常用操作实战 SET 存入键值对 SETNX SETEX MSET 批量存入键…

.Net IDE智能提示汉化(.Net6、AspNetCore)

先上现成的.net6汉化文件&#xff0c;可以手动下载后参照 如何为 .NET 安装本地化的 IntelliSense 文件 进行安装。或者使用后文的工具进行自动安装。 无对照英文在前中文在前 汉化内容来自 官方在线文档 &#xff0c;某些内容可能存在明显的机翻痕迹。 上一些效果图&#x…

c语言基础知识+OS+数据结构

c语言&#xff1a; memory section&#xff1a; .bss&#xff1a; uninitialized or zero-initialized global and static variables .data: initialized global and static variables .text: Read only, code and const C语言编译流程&#xff1a; pre-compiler: …

快速安装和测试混淆后的IPA文件:使用Ipa Guard的签名和安装功能

​ 目录 转载&#xff1a;怎么保护苹果手机移动应用程序ipa中文件安全&#xff1f; 前言 1. 对敏感文件进行文件名称混淆 ​编辑 2. 更改文件的MD5值 3. 增加不可见水印处理 3. 对html&#xff0c;js&#xff0c;css等资源进行压缩 5. 删除可执行文件中的调试信息 转载&…

kubesphere中间件部署

微服务部署前中间件部署 一、MySQL部署 1.1 使用Docker实现MySQL主从复制 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql/master/log:/var/log/mysql \ -v /mydata/mysql/master/data:/var/lib/mysql \ -v /mydata/mysql/master/conf:/etc/mysql \ -e My…

企业架构LNMP学习笔记59

目录介绍&#xff1a; bin&#xff1a;存放的是启动和关闭tomcat的脚本文件&#xff1b; conf&#xff1a;存放tomcat服务器的各种全局配置文件&#xff0c;其中最重要的是server.xml和web.xml lib: 存放的是tomcat服务器所需要的各种jar文件。java打包类库。 logs&#xff…

Vue项目前端代码防止被调试

项目背景 被安全测试针对了&#xff0c;总是调试我这不太安全的代码。前端代码深度混淆转成十六进制还不行&#xff0c;仍然找到加密方法&#xff0c;对后端数据进行解密。这次就修改了思路换种方法: 我承认阁下很强&#xff0c;但假如, 我是说假如打开控制台是空白页面&…

OSCP系列靶场-Esay-Gaara保姆级

OSCP系列靶场-Esay-Gaara 目录 OSCP系列靶场-Esay-Gaara总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH弱口令爆破(待定)22-SSH手动登录尝试(无) 80-HT…

“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期文章思路来自振动测试与诊断期刊的一篇三高论文&#xff0c;点击链接可跳转。https://mp.weixin.qq.com/s/hmmDj5IwpaozeL4F0iI-2g 文章摘要如下&#xff1a; 针对风机滚动轴…

在qml中将一个16进制表示的颜色加上透明度

在qml中&#xff0c;我们在指定控件的颜色时&#xff0c;可以直接通过16进制的字符串来表示&#xff0c;比如"#ff0000"; 这种方式也比较符合UI设计人员的使用习惯。 但是假如要在此颜色的基础上&#xff0c;加个透明度的话&#xff0c;就要重新计算一番&#xff0c;比…

【iOS逆向与安全】插件开发之某音App直播间自动发666

1.目标 由于看直播的时候主播叫我发 666&#xff0c;支持他&#xff0c;我肯定支持他呀&#xff0c;就一直发&#xff0c;可是后来发现太浪费时间了&#xff0c;能不能做一个直播间自动发 666 呢&#xff1f;于是就花了几分钟做了一个。 2.操作环境 越狱iPhone一台 frida ma…