SpringBoot结合Vue.js+axios框架实现增删改查功能+网页端实时显示数据库数据(包括删除多条数据)

news2025/11/4 12:05:21

本文适用对象:已有基础的同学,知道基础的SpringBoot配置和Vue操作。

在此基础上本文实现基于SpringBoot和Vue.js基础上的增删改查和数据回显、刷新等。

一、实时显示数据库数据

实现步骤:

第1步:编写动态请求响应类:在启动类同父目录下创建controller包,在包下创建DataController类,添加@RestController、@RequestMapping("")等注解。在类中实例化dao层的BookDa要加上@Autowired注解;然后编写方法注意返回的结果和调用dao层中的方法,记得加上@GetMapping等注解:

@RestController
@RequestMapping("/api/data")
public class DataController {
    @Autowired
    private BookDao bookDao;
    @GetMapping
    public List<Brand> getData(){
        System.out.println(bookDao.select());
        return bookDao.select();
    }
}

— — — — — — 知识加油站 — — — — — —

@RestController注解:是将一个类标记为处理HTTP请求的控制器,并且自动将方法返回的对象转换为JSON或XML格式的响应体,发送给客户端。

— — — — — — —  — — — — — — — — —

第2步:编写ajax请求,在new Vue下写入如下代码:

mounted(){
    axios.get("/api/data").then(response=>{
         this.tableData = response.data;
    })
},

第3步:修改启动类,写入如下代码:

@CrossOrigin(origins = "http://localhost:8081")
@SpringBootApplication(scanBasePackages = "com.itheima.controller")
@MapperScan("com.itheima.dao")
public class AdsSdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdsSdemoApplication.class, args);
    }
}

实现思路:ajax发送请求到controller层,controller层负责查询数据库并返回结果给ajax,ajax将结果赋值给显示变量,Vue根据变量中的值对结果进行显示,最终我们能看到网页上的数据。

重点技术原理:

1. 数据显示问题:

在vue的表格中有一个 :data="xxx"的字样,其中xxx就是数据源,这个数据源会在data()的return中被定义(例如在这里数据源都是tableData,在tableData中不需要定义具体的字段,因为这些字段在tostring函数中都会带有):

   

数据源一般是JSON格式,JSON数据有一个特点,最外层用 [ ] 符号进行包裹,在内层每一个数据都用 { } 符号进行包裹,vue表格会自动提取数据库字段的key,然后去匹配每个单元格的prop="xxx",如果key和xxx匹配上,就将这个key对应的value显示到prop所在单元格的位置。

2.请求发送:

mounted简单理解就是:在挂载完成,即Vue初始化成功,HTML页面渲染成功之后执行的钩子函数。

mounted详细解释如下:mounted是Vue实例生命周期钩子函数之一。mounted函数会在Vue实例被创建并且挂载到DOM元素(DOM元素指的是文档对象模型)上之后立即调用。函数的作用是在Vue实例挂载(指的是将Vue实例与一个实际的DOM元素关联起来,使其能够在该DOM元素内部进行渲染)完成后执行一些初始化操作或请求数据。

下面代码的含义是:在Vue初始化完成,HTML页面渲染成功后,发送get请求到/api/data路径请求动态资源,返回一个response,然后取出data域中的数据赋值给tableData。

3.请求应答:

请求会根据@RequestMapping中的路径找到controller包下具体的类或方法,可以根据请求方式不同调用不同的方法(在该例中使用get请求方式对应@GetMapping方法,调用getData方法,getData通过调用dao层下的bookDao中的select方法与数据库进行连接,查询后返回List结果集),结果被返回到请求的发送方。

 二、注意事项 

说明6点注意事项:

1、右上角的小图标,只能用于测试修改静态页面的样式,实际和数据库的关联不能通过这种方式进行。

2、如果想测试动态页面的效果,与数据库关联,必须通过启动类启动(启动类是带有main方法的),要注意选择Current File进行启动,否则可能启动方式可能受前面测试影响。

3、注意启动类必须同controller、dao等一系列的包在同一个目录下,启动类的上面不能有其它包,如果不在同一目录下可能导致扫描不到controller中的资源路径:

也可以通过注解将controller包扫描的方式解决:

@SpringBootApplication(scanBasePackages = "com.itheima.controller")

4、如果想访问前端界面,只需要将webapp视为根目录,相当于localhost这一级,然后想要访问具体的静态资源,只需要输入webapp后面的路径即可:

比如ADSS.html在wewbapp目录下,于是只需要在localhost:8081后面输入/ADSS.html即可访问该静态资源:

 

5、动态资源比如跳转路径访问路径,一般存放在controller目录下,注意controller包需要与启动类在同一个层次目录下:

访问数据只需要输入@RequestMapping里的地址即可直接访问:

6、实际网站部署还要注意跨域问题,一般在启动类上添加CrossOrigin注解:@CrossOrigin(origins = "http://localhost:请求端口号")

三、删除(单条,多条)

3.1. 删除单条数据

第1步:dao层下的BookDao接口中定义delete方法,实现从数据库中删除单条数据:

@Delete("delete from tb_brand where id = #{id}")
public void delete(int id);

第2步:在controller层下定义请求路径,传入参数,执行dao层删除方法:

@DeleteMapping("delete/{id}")
public void deleteData(@PathVariable("id") int id){
    bookDao.delete(id);
}

— — — — — — 知识加油站 — — — — — —

1. @PathVariable注解:是Spring MVC框架中的一个注解,用于从URL路径中获取变量的值并将其绑定到方法的参数上。比如:请求地址:@GetMapping("/users/{ID}") 方法:public User getUserById(@PathVariable Long id) 。那么注解会将{ID}最终被替换的值赋值给参数id。

2. slot - scope="scope":slot-scope是一个特殊的属性,用于在父组件中向子组件传递数据。slot-scope="scope"定义了一个名为scope的变量,用于接收父组件传递的数据。

3. row是表示一个数据表格中的某一行的数据对象。scope可以理解为整张数据表格中的全体数据对象。

4.<template>标签:是Vue.js中用于定义组件模板的容器

— — — — — — —  — — — — — — — — —

‘第3步:添加触发事件,调用methods中的方法。在这里触发事件是点击删除按钮,传入的参数是所点删除按钮所属的数据对象。这里的方法名是deleteSingle。

<template slot-scope="scope">
    <el-button type="danger" plain size="mini" @click="deleteSingle(scope.row)">删除</el-button>
    <el-button type="warning" plain @click="updateVisible = true" size="mini">修改</el-button>
</template>

— — — — — — 知识加油站 — — — — — —

.then( )被用于处理成功的HTTP响应(服务器成功处理了客户端发出的HTTP请求,并返回了预期的响应)。

response是.then()方法中的一个参数,表示从服务器返回的响应数据

— — — — — — —  — — — — — — — — —

第4步:向后端服务器发送请求,删除数据,同时刷新页面。

methods: {/*删除单条*/
 deleteSingle(row){
  axios.delete('/api/delete/'+row.id).then(()=>{
    axios.get("/api/select").then(response => {  /*刷新页面*/
    this.tableData = response.data;
        })
     })
  },
}

3.2. 删除多条数据

— — — — — — 知识加油站 — — — — — —

1、{ids}是一个简单的JavaScript对象字面量表达式,其中ids是对象的属性名。这种表达式用于创建一个对象,并将属性ids设置为undefined(表示一个变量未被赋予值或者一个对象属性不存在,该属性的值显式地设置为未定义,表示一个缺少值的状态,这意味着该属性存在,但没有被赋予一个明确的值)的值。

2、#{ids}和${ids}是在一些模板引擎中使用的表达式,用于插入变量值。

3、#{ids}常用于某些模板引擎(如Ruby的ERB)中。

4、${ids}常用于JavaScript中的模板字面量或模板字符串中。这种表达式的作用是将变量的值插入到字符串中,以动态生成字符串内容。

5、模板字面量(Template literals)和模板字符串(Template strings)是指JavaScript中一种特殊的字符串语法,它们提供了更灵活和方便的字符串操作和拼接方式。模板字面量是指使用反引号(`)包围的字符串,它们支持在字符串中插入变量、表达式和换行符,而无需使用字符串拼接符号(如加号 +)。

6、{data:ids}是一个JavaScript对象字面量表达式,其中data是对象的属性名,ids是属性值。它创建了一个具有data属性的对象,且该属性的键是字符串data值是变量ids的值。

— — — — — — —  — — — — — — — — —

第1步:编写dao层下的BookDao接口,创建deleteAll方法,传入ids数组,指示待删除的数据组。

public void deleteAll(int [] ids);

第2步:编写mybatis-config.xml、BookMapper.xml、application.yml文件。

mybatis-config.xml文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>

 BookMapper.xml文件如下【重点】:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.dao.BookDao">
  <!--查询-->
  <delete id="deleteAll" >
     delete from tb_brand where id
     in(
         <foreach collection="ids" item="id" separator=",">
                #{id}
         </foreach>
      );
    </delete>
</mapper>

 application.yml添加代码如下:

mybatis:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath:mapper/*.xml

第3步:编写controller层下的DataController类,创建deleteAllData方法:

@RestController
@RequestMapping("/api/")
public class DataController {
    @DeleteMapping("delete/a/{ids}")
    public void deleteAllData(@PathVariable("ids") int [] ids){
        bookDao.deleteAll(ids);
}

第4步:增设按钮触发事件

<el-button type="danger" plain @click="DeleteAll">一键删除</el-button>

第5步:添加复选框【重点】触发事件

<el-table
     :data="tableData"
     style="width: 100%"
     @selection-change="handleSelectionChange"
     @select-all="handleSelectAll"
     @select="handleSelect">
<el-table-column type="selection" width="55" align="center"></el-table-column>

四、新增

五、查询

六、修改

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

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

相关文章

由河北吉力宝战略发展规划看中国品牌商业发展新方向

当今时代&#xff0c;一个经济体的发展和崛起背后&#xff0c;往往是一批民族品牌在提供强力的支撑。中国作为全世界最大的发展中国家&#xff0c;在经济建设中取得了举世瞩目的发展成就&#xff0c;各个行业涌现出一批优秀的国民品牌。 随着高质量发展成为各行各业的广泛共识…

docker alpine:3.16 root权限安装Anaconda3-2020.07-Linux-x86_64和jdk

首先查看系统版本: rootfv-az454-287:/tmp# uname -a Linux fv-az454-287 5.15.0-1046-azure #53~20.04.1-Ubuntu SMP Mon Aug 28 14:17:23 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux rootfv-az454-287:/tmp# grep NA /etc/os-release NAME"Ubuntu" PRETTY_NAME&q…

笔记本电脑没有麦克风,声音无法找到输入设备

新买的电脑没有扬声器&#xff0c;电脑声音没有输入设备&#xff0c;在开腾讯会议的时候才发现竟然有这个问题。 网上找原因&#xff0c;哎&#xff0c;找了一大堆每一个靠谱的 这让我想起来上次电脑没有热键的问题&#xff0c;所有问题的终极解决方案&#xff0c;都在源头那里…

加密算法总结

数字签名、信息加密 是前后端开发都经常需要使用到的技术&#xff0c;应用场景包括了用户登入、交易、信息通讯、oauth 等等&#xff0c;不同的应用场景也会需要使用到不同的签名加密算法&#xff0c;或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几…

如何给我们项目中的node_modules里面的包打补丁

背景 我们项目所依赖的一个包因为版本问题&#xff0c;可能在低版本的情况下&#xff0c;会出现报错。我们希望能patch这个错误。 // shopee-rn/nebula import { reportUIError } from shopee/react-native-sdk;useEffect(() > {if (!__DEV__) {reportUIError(); // shope…

node_modules/XXX/index.js:XXX;XX ||= XXX?.[level];SyntaxError: Une

这个语法是 ECMAScript 2021的语法 还挺新的 对node版本要求会比较高 这里这个 icon || this.options.icon?.[level];意思就是 如果this.options.icon [level] 拿得到值 就等于它 否则 如果拿不到 icon 就等于自己 要解决这个问题 一个是你可以提高node版本 但我不建议 还是…

centos 部署 xray

目录 1、部署 xray 2、部署测试靶场 jdk8 安装 tomcat 部署 3、测试 基础 web 扫描 GET 请求的扫描&#xff1a; POST 请求的扫描 参数和选项说明 1、部署 xray 选择最新的 xray 社区版下载 Releases chaitin/xray GitHub 解压后运行&#xff1a; ./xray_linux_a…

公司用什么软件监控员工工作状态的?(如何监控员工上班电脑的工作情况?)

在现代的商业环境中&#xff0c;管理和监控员工的工作内容是至关重要的。为了确保员工的工作效率和质量&#xff0c;公司需要使用一些工具来监控他们的工作进程。以下是五款实用的监控员工工作内容的软件&#xff0c;其中包括了洞察眼MIT系统。 洞察眼MIT系统 洞察眼MIT系统是…

全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著作——2023学生开学季辉少许

全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著作——2023学生开学季辉少许

go语言 反向代理

实现简单的http反向代理 还没有加入负载均衡 新手推荐 下游服务器代码 package mainimport ("fmt""io""log""net/http""os""os/signal""syscall""time" )type RealServer struct {Addr str…

uniapp解决scroll滑动之后被u-sticky挡住的问题

问题&#xff1a;页面触底加载之后&#xff0c;回到头部&#xff0c;顶部数据被遮挡 将<swiper class"swiper-list"></swiper>上的swiper-list样式高度调整成90vh <view class"main"><u-sticky bgColor"#fff"><u-…

PRT(Precomputed Radiance Transfer【2002】)原理实现

声明 本文源自对Games202课程&#xff0c;作业2的总结。 参考 手把手教你写GAMES202作业&#xff1a;GAMES202-作业2&#xff1a; Precomputed Radiance Transfer&#xff08;球谐函数&#xff09;GAMES 202 作业2Games202课程个人Blog 课程总结&#xff1a;Games202(P6、P7…

C++ - 异常介绍和使用

前言 我们在日常编写代码的时候&#xff0c;难免会出现编写错误带来程序的奔溃&#xff0c;或者是用户在使用我们编写的程序时候&#xff0c;使用错误所带来程序的奔溃。 在C 当中 可以对你觉得可能发生 错误 的地方在运行之前进行判断&#xff0c;发生错误可以给出提示。 C…

JOSEF约瑟 智能电流继电器KWJL-20/L KWLD26 零序孔径45mm 柜内导轨式安装

KWJL-20智能电流继电器 零序互感器&#xff1a; KWLD80 KWLD45 KWLD26 KWJL-20 一、产品概述 KWJL-20系列智能剩余电流继电器&#xff08;以下简称继电器&#xff09;适用于交流电压至660V或更高的TN、TT、和IT系统&#xff0c;频率为50Hz。通过零序电流互感器检测出超过…

TS编译器选项compilerOptions指定编译ES版本和模块化使用规范

compilerOptions是TS的编译器选项&#xff0c;主要在tsconfig.json文件中用于对ts编译为js文件时进行配置 "compilerOptions" : { 配置项 } 一、target指定ts被编译的ES版本 {// compilerOptions 编译器选项"compilerOptions": {// target 用来指定ts被编…

寻找AI-Native创业者

亲爱的科技探险家们和代码魔法师们&#xff1a; 未来的钟声已经敲响&#xff0c;预示着一场极度炫酷的虚拟现实游戏即将展开。从初期简单的智能识别&#xff0c;到设计师级别的图纸设计&#xff0c;生成式AI技术&#xff08;Generative AI&#xff09;以其独特理念和创新模式重…

基于springboot+vue的在线购房(房屋租赁)系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Java21的新特性

Java语言特性系列 Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java20的新特性Java21的新特性Java22…

Java下打印直角三角型(另一个方向)

代码如下&#xff1a; public class MyWork {public static void main(String[] args) {int num 5;for (int i 0; i < num; i) {for (int j 0; j < i; j) {System.out.print("-");}for (int j 0; j < num - i; j) {System.out.print("*");}S…

Ubuntu 安装 CUDA 与 OPENCL

前言&#xff1a;最近需要做一些GPU并行计算&#xff0c;因而入坑CUDA和OPENCL&#xff0c;两者都有用到一些&#xff0c;刚好有点时间&#xff0c;同时记录一些学习过程&#xff0c;排掉一些坑&#xff0c;这篇是环境安装篇&#xff0c;基本跟着走就没什么问题&#xff0c;环境…