springboot+vue 前后端交互实现(mysql+springboot+vue)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: springboot+vue 前后端交互实现(mysql+springboot+vue)

前言


编译器:vscode、idea、mysql5.7

技术:springboot+mybatis+mysql+lombok+vue

实现内容:实现前后端数据交互


实现效果:






一、准备工作


因为vue和springboot是前后端分离的,所以在开始交互前首先需要解决跨域问题,可以在前端做也可以在后端加配置类,这里我是在后端加的CORS策略配置类。


@Configuration
public class cors {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOriginPatterns("*")
                        .allowedMethods("GET", "POST", "PUT", "DELETE")
                        .allowedHeaders("*")
                        .allowCredentials(true)
                        .maxAge(3600);
            }
        };
    }
}



还需要在前端下载并配置好axios库,vscode的终端里面输入命令行即可下载


npm install axios


下载成功后点击main.js并配置


import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'
Vue.config.productionTip = false
// 全局挂载axios
Vue.prototype.$axios=axios
new Vue({
  axios,
  render: h => h(App),
}).$mount('#app')
//若本地项目调试使用
axios.defaults.baseURL = 'http://localhost:8080'; 


首先导入axios库


import axios from `axios`


导入成功后在new Vue中挂载在app中


最后设置我们的基础url


axios.defaults.baseURL='基础路径'



二、实现过程


1.后端


这里的后端唯一的难点可能就是mapper的sql语句了,因为我这里是单表连接,所以就非常简洁高效,这里我只展示mapper.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.wjm.hxx.mapper.mapper">
    <insert id="addtest">
        insert into test(cname,direction,project,introduce,classtime,tid,semester) values(#{cname},#{direction},#{project},#{introduce},#{classtime},#{tid},#{semester})
    </insert>
    <update id="updtest">
        update test set cname=#{cname},direction=#{direction},project=#{project},introduce=#{introduce},classtime=#{classtime},tid=#{tid},semester=#{semester} where id=#{id}
    </update>
    <delete id="deltest">
        delete from test where id=#{id}
    </delete>
    <select id="querytest" resultType="com.wjm.hxx.pojo.test">
        select * from test
    </select>
    <select id="queryByIdtest" resultType="com.wjm.hxx.pojo.test">
        select * from test where cname like concat('%',#{cname},'%')
    </select>
</mapper>


2.前端


用axiosHTTP库调用get、post方法的语法格式如下,


 this.$axios.post/get(`/url?id=${id}`)
      .then(res=>{
        console.log(res)
      })


在上述代码块中,我们调用axios库的post或get方法,并且用then方法进行回调函数的调用,同时如果我们如果想要传递参数需要用到参数名=${this.传递参数},这样就可以进行前后端交互,而样式和template模板这里就不再赘述。


前端代码如下:


<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <div>
      <input type="text" placeholder="请输入课程名称" v-model="cname">
      <button class="btn" v-on:click="queryById(cname)">搜索</button>
      <button class="btn" style="float:left;left:20px;" v-on:click="addshow">添加课程</button>
      <button v-on:click="query" class="btn">全局搜索</button>
    </div>
    <div class="overlay" id="overlay"></div>
    <div class="auform" id="auform">
      <label>课程名称:</label>
      <input type="text" placeholder="请输入课程名称" v-model="cname"><br><br>
      <label>专业方向:</label>
      <input type="text" placeholder="请输入专业方向" v-model="direction"><br><br>
      <label>项目名称:</label>
      <input type="text" placeholder="请输入项目名称" v-model="project"><br><br>
      <label>项目简介:</label>
      <input type="text" placeholder="请输入项目简介" v-model="introduce"><br><br>
      <label>上课时间:</label>
      <input type="text" placeholder="请输入上课时间" v-model="classtime"><br><br>
      <label>任课老师:</label>
      <input type="text" placeholder="请输入任课老师" v-model="tid"><br><br>
      <label>授课学期:</label>
      <input type="text" placeholder="请输入授课学期" v-model="semester"><br><br>
      <button v-if="addflag" class="btn" @click="add">添加</button>
      <button v-else-if="updflag" class="btn" @click="upd">修改</button>
      <button class="btn" v-on:click="close">关闭</button>
    </div>
    <div class="table">
        <div class="tr">
            <span class="th">课程名称</span>
            <span class="th">专业方向</span>
            <span class="th">项目名称</span>
            <span class="th">项目简介</span>
            <span class="th">上课时间</span>
            <span class="th">任课老师</span>
            <span class="th">授课学期</span>
            <span class="th">操作</span> 
        </div>
        <div class="tr" v-for="(item,index) in arrayList" :key="index">
          <span class="td">{{ item.cname }}</span>
            <span class="td">{{ item. direction}}</span>
            <span class="td">{{ item.project }}</span>
            <span class="td">{{ item.introduce }}</span>
            <span class="td">{{ item.classtime }}</span>
            <span class="td">{{ item.tid }}</span>
            <span class="td">{{ item.semester }}</span>
            <span class="td"><button class="sbtn" v-on:click="updshow(item.id)">修改</button><button class="sbtn" v-on:click="del(item.id)">删除</button></span> 
        </div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'HelloWorld',
  data(){
    return{
      arrayList:[],
      cname:"",
      direction:"",
      project:"",
      introduce:"",
      classtime:"",
      tid:"",
      semester:"",
      id:1,
      addflag:false,
      updflag:false
    }
  },
  props: {
    msg: String
  },
  mounted(){
    this.query()
  },
  methods:{
    query:function(){
      this.$axios.get(`http://localhost:8080/querytest`).then((res) => {
   if(res.data){
    this.arrayList=res.data
    console.log(res.data)
   }else{
     console.log("fail")
   }
})
    },
    add:function(){
      this.$axios.post(`/addtest?cname=${this.cname}&&direction=${this.direction}&&project=${this.project}&&introduce=${this.introduce}&&classtime=${this.classtime}&&tid=${this.tid}&&semester=${this.semester}`)
      .then((res=>{
        console.log(res)
        this.close()
        this.query();
      }))
    },
    del:function(item){
        this.$axios.get(`/deltest?id=${item}`).then((res=>{
          console.log(res)
          this.query()
        }))
    },
    queryById:function(cname){
        this.$axios.get(`/queryByIdtest?cname=${cname}`).then(res=>{
          console.log(res.data)
          this.arrayList=res.data
        })
    },
    upd:function(){
      this.$axios.post(`/updtest?id=${this.id}&cname=${this.cname}&direction=${this.direction}&project=${this.project}&introduce=${this.introduce}&classtime=${this.classtime}&tid=${this.tid}&semester=${this.semester}`)
      .then((res=>{
        console.log(res.data)
        this.close()
        this.query()
      }))
    },
    addshow(){
      this.addflag=true;
      document.getElementById('overlay').style.display='block';
      document.getElementById('auform').style.display='block'
    },
    updshow(id){
      this.id=id
      this.updflag=true;
      document.getElementById('overlay').style.display='block';
      document.getElementById('auform').style.display='block'
    },
    close(){
      this.addflag=false,
      this.updflag=false,
      document.getElementById('overlay').style.display='none';
      document.getElementById('auform').style.display='none'
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.btn{
  color:white;
  margin-left:10px;
  height:30px;
  width:70px;
  border:none;
  background-color: rgb(188, 21, 239);
  border-radius:5px;
}
input{
  margin-top:20px;
  border:none;
  border-bottom:1px solid lightgray;
  width:200px;
  height:30px;
}
.table{
  margin-left:30%;
  margin-top:20px;
  width:auto;
  height:auto;
}
.tr{
  width:100vh;
  border-bottom:1px solid lightgray;
  height:50px;
}
.th,.td{
  line-height:50px;
  display:inline-block;
  width:80px;
  margin-right:10px;
}
.sbtn{
  line-height:15px;
  border:none;
  font-size:1px;
  width:37.5px;
  display:inline;
}
button{
  background-color: white;
}
button:hover{
  color:red;
}
.auform{
  position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            padding: 20px;
            background-color: #fff;
            border: 1px solid #ccc;
            border-radius: 5px;
            display: none; /* 默认隐藏 */
}
 /* 遮罩层样式 */
 .overlay {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0,0,0,0.5);
            display: none; /* 默认隐藏 */
        }
</style>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
10月前
|
人工智能 运维 Java
SpringBoot+MySQL实现动态定时任务
这是一个基于Spring Boot的动态定时任务Demo,利用spring-context模块实现任务调度功能。服务启动时会扫描数据库中的任务表,将任务添加到调度器中,并通过固定频率运行的ScheduleUpdater任务动态更新任务状态和Cron表达式。核心功能包括任务的新增、删除与Cron调整,支持通过ScheduledFuture对象控制任务执行。项目依赖Spring Boot 2.2.10.RELEASE,使用MySQL存储任务信息,包含任务基类ITask及具体实现(如FooTask),便于用户扩展运维界面以增强灵活性。
354 10
|
11月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
687 7
|
6月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
852 4
基于springboot+vue开发的会议预约管理系统
|
7月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
420 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
6月前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
418 0
PHP和Mysql前后端交互效果实现
|
9月前
|
监控 数据可视化 JavaScript
springboot + vue的MES系统生产计划管理源码
MES系统(制造执行系统)的生产计划管理功能是其核心模块之一,涵盖生产计划制定与优化、调度排程、进度监控反馈、资源管理调配及可视化报告五大方面。系统基于SpringBoot + Vue-Element-Plus-Admin技术栈开发,支持多端应用(App、小程序、H5、后台)。通过实时数据采集与分析,MES助力企业优化生产流程,适用于现代化智能制造场景。
506 1
|
10月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
801 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
Java 关系型数据库 MySQL
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
3165 45
|
11月前
|
监控 Java 关系型数据库
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
493 5
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。

热门文章

最新文章

推荐镜像

更多