返回顶部
首页 > 资讯 > 精选 >怎么搭建SpringBoot+Vue前后端分离
  • 189
分享到

怎么搭建SpringBoot+Vue前后端分离

2023-07-05 19:07:36 189人浏览 独家记忆
摘要

本文小编为大家详细介绍“怎么搭建SpringBoot+Vue前后端分离”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么搭建springBoot+Vue前后端分离”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1

本文小编为大家详细介绍“怎么搭建SpringBoot+Vue后端分离”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么搭建springBoot+Vue前后端分离”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    1 什么是前后端分离

    前后端分离是目前互联网开发中比较广泛使用的开发模式,主要是将前端和后端的项目业务进行分离,可以做到更好的解耦合,前后端之间的交互通过xml或JSON的方式,前端主要做用户界面的渲染,后端主要负责业务逻辑和数据的处理。

    怎么搭建SpringBoot+Vue前后端分离

    2 Spring Boot后端搭建

    2.1 Mapper层

    请参阅这篇文章 手把手教你SpringBoot整合mybatis

    此次项目的后端搭建就是在这个项目的基础上

    2.2 Service层

    接口:

    public interface StudentService {        public int saveStudent(Student student);        public Student findStudentById(Integer id);        public List<Student> findAllStudent();        public int removeStudentById(Integer id);        public int updateStudentById(Student student);}

    实现类:

    @Servicepublic class StudentServiceImpl implements StudentService {    @Autowired    private XmlStudentMapper xmlStudentMapper;    @Override    public int saveStudent(Student student) {        return xmlStudentMapper.saveStudent(student);    }    @Override    public Student findStudentById(Integer id) {        return xmlStudentMapper.findStudentById(id);    }    @Override    public List<Student> findAllStudent() {        return xmlStudentMapper.findAllStudent();    }    @Override    public int removeStudentById(Integer id) {        return xmlStudentMapper.removeStudentById(id);    }    @Override    public int updateStudentById(Student student) {        return xmlStudentMapper.updateStudentById(student);    }}

    2.3 Controller层

    @RestController@RequestMapping("/student")public class StudentController {    @Autowired    private StudentService studentService;        @PostMapping("/save")    public int saveStudent(@RequestBody Student student) {        int result;        try {            result = studentService.saveStudent(student);        } catch (Exception exception) {            return -1;        }        return result;    }        @GetMapping("/findAll")    public List<Student> findAll() {        return studentService.findAllStudent();    }        @GetMapping("/findById/{id}")    public Student findById(@PathVariable("id") Integer id) {        return studentService.findStudentById(id);    }        @DeleteMapping("/remove/{id}")    public int remove(@PathVariable("id") Integer id) {        return studentService.removeStudentById(id);    }        @PostMapping("/update")    public int update(@RequestBody Student student) {        return studentService.updateStudentById(student);    }}

    2.4 配置类

    解决跨域请求

    @Configurationpublic class CorsConfig implements WEBmvcConfigurer {    @Override    public void addCorsMappings(CorsReGIStry registry) {        registry.addMapping("/**")                .allowedOriginPatterns("*")                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")                .allowCredentials(true)                .maxAge(3600)                .allowedHeaders("*");    }}

    图解跨域问题:

    怎么搭建SpringBoot+Vue前后端分离

    3 Vue前端搭建

    3.1 新建Vue_cli2.x项目

    3.2 引入路由

    npm install vue-router --save

    3.3 新建文件

    怎么搭建SpringBoot+Vue前后端分离

    3.4 配置和测试路由

    main.js配置

    import Vue from 'vue'import App from './App.vue'import router from './router'Vue.config.productionTip = falsenew Vue({    render: h => h(App),    router}).$mount('#app')

    index.js

    //注册路由import Vue from 'vue';import VueRouter from 'vue-router';//引入路由import index from '../view/index'import update from "../view/update";import selectAll from "../view/selectAll";import selectOne from "../view/selectOne";import insert from "../view/insert";Vue.use(VueRouter);const router = new VueRouter({    routes: [        {            name: "主页重定向",            path: "/",            redirect: "/index"        }, {            name: "主页",            path: "/index",            component: index,            children: [                {                    name: "修改操作",                    path: "/update",                    component: update,                }, {                    name: "查看全部",                    path: "/selectAll",                    component: selectAll,                }, {                    name: "查看一个",                    path: "/selectOne",                    component: selectOne,                }, {                    name: "添加一个",                    path: "/insert",                    component: insert,                }            ]        }    ]})export default router

    App.vue

    <template>    <div id="app">        <router-view/>    </div></template><script>export default {    name: 'App',}</script>

    index.vue

    <template>    <div>        <router-link to="update">update</router-link>        <br>        <router-link to="selectAll"> selectAll</router-link>        <br>        <router-link to="selectOne"> selectOne</router-link>        <br>        <router-link to="insert"> insert</router-link>        <br>        <br>        <router-view></router-view>    </div></template><script>export default {    name: "index"}</script><style scoped></style>

    insert.vue

    <template>    <div>        insert    </div></template><script>export default {    name: "insert"}</script><style scoped></style>

    selectOne.vue

    <template>    <div>        selectOne    </div></template><script>export default {    name: "selectOne"}</script><style scoped></style>

    selectAll.vue

    <template>    <div>        selectAll    </div></template><script>export default {    name: "selectAll"}</script><style scoped></style>

    update.vue

    <template>    <div>        update    </div></template><script>export default {    name: "update"}</script><style scoped></style>

    测试

    启动项目

    npm run serve

    访问:Http://localhost:8080/

    怎么搭建SpringBoot+Vue前后端分离

    点击相关标签时会显示响应页面

    3.5 引入Element UI

    npm i element-ui -S

    main.js

    import Vue from 'vue'import App from './App.vue'import router from './router'import ElementUI from 'element-ui'import 'element-ui/lib/theme-chalk/index.CSS'Vue.config.productionTip = falseVue.use(ElementUI)new Vue({    render: h => h(App),    router}).$mount('#app')

    3.6 使用Element UI美化页面

    index.vue

    <template>    <div>        <el-menu class="el-menu-demo" mode="horizontal" :router="true">            <el-menu-item index="/selectAll">全部学生</el-menu-item>            <el-menu-item index="/insert">添加学生</el-menu-item>            <el-menu-item index="/selectOne">查看学生</el-menu-item>            <el-menu-item index="/update">修改学生</el-menu-item>        </el-menu>        <router-view></router-view>    </div></template><script>export default {    name: "index"}</script><style scoped></style>

    insert.vue

    <template>    <div>        <el-fORM :model="ruleForm" status-icon  label-width="100px" class="demo-ruleForm" >            <el-form-item label="姓名" prop="pass">                <el-input type="text" v-model="ruleForm.name" ></el-input>            </el-form-item>            <el-form-item label="年龄" prop="checkPass">                <el-input type="text" v-model="ruleForm.age" ></el-input>            </el-form-item>            <el-form-item>                <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>            </el-form-item>        </el-form>    </div></template><script>export default {    name: "insert",    data() {        return {            ruleForm: {                name: '',                age: ''            }        };    },    methods: {        submitForm(formName) {            this.$refs[formName].validate((valid) => {                if (valid) {                    alert('submit!');                } else {                    console.log('error submit!!');                    return false;                }            });        },    }}</script><style scoped></style>

    selectOne.vue

    <template>    <div>        <el-form :model="ruleForm" status-icon label-width="100px" class="demo-ruleForm"                 >            <el-form-item label="ID" prop="pass">                <el-input type="text" v-model="ruleForm.id"></el-input>            </el-form-item>            <el-form-item label="姓名" prop="pass">                <el-input type="text" v-model="ruleForm.name"></el-input>            </el-form-item>            <el-form-item label="年龄" prop="checkPass">                <el-input type="text" v-model="ruleForm.age"></el-input>            </el-form-item>            <el-form-item>                <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>                <el-button @click="resetForm('ruleForm')">重置</el-button>            </el-form-item>        </el-form>    </div></template><script>export default {    name: "selectOne",    data() {        return {            ruleForm: {                id: '',                name: '',                age: ''            }        };    },    methods: {        submitForm(formName) {            this.$refs[formName].validate((valid) => {                if (valid) {                    alert('submit!');                } else {                    console.log('error submit!!');                    return false;                }            });        },        resetForm(formName) {            this.$refs[formName].resetFields();        }    }}</script><style scoped></style>

    selectAll.vue

    <template>    <div>        <template>            <el-table                  :data="tableData"                  >                <el-table-column                      prop="id"                      label="ID"                      width="180">                </el-table-column>                <el-table-column                      prop="name"                      label="姓名"                      width="180">                </el-table-column>                <el-table-column                      prop="age"                      label="年龄">                </el-table-column>                <el-table-column                      label="操作">                    <template>                        <el-button type="warning" size="small">修改</el-button>                        <el-button type="danger" size="small">删除</el-button>                    </template>                </el-table-column>            </el-table>        </template>    </div></template><script>export default {    name: "selectAll",    data() {        return {            tableData: []        }    }}</script><style scoped></style>

    update.vue

    <template>    <div>        <el-form :model="ruleForm" status-icon label-width="100px" class="demo-ruleForm"                 >            <el-form-item label="ID" prop="pass">                <el-input type="text" v-model="ruleForm.id"></el-input>            </el-form-item>            <el-form-item label="姓名" prop="checkPass">                <el-input type="text" v-model="ruleForm.name"></el-input>            </el-form-item>            <el-form-item label="年龄" prop="age">                <el-input type="text" v-model="ruleForm.age"></el-input>            </el-form-item>            <el-form-item>                <el-button type="warning" @click="submitForm('ruleForm')">修改</el-button>            </el-form-item>        </el-form>    </div></template><script>export default {    name: "update",    data() {        return {            ruleForm: {                id: '',                name: '',                age: ''            }        };    },    methods: {        submitForm(formName) {            this.$refs[formName].validate((valid) => {                if (valid) {                    alert('submit!');                } else {                    console.log('error submit!!');                    return false;                }            });        },        resetForm(formName) {            this.$refs[formName].resetFields();        }    }}</script><style scoped></style>

    效果

    怎么搭建SpringBoot+Vue前后端分离

    怎么搭建SpringBoot+Vue前后端分离

    3.7 整合axiOS与Spring Boot后端交互

    npm install axios --save

    insert.vue

    <template>    <div>        <el-form :model="ruleForm" status-icon label-width="100px" class="demo-ruleForm"                 >            <el-form-item label="姓名" prop="pass">                <el-input type="text" v-model="ruleForm.name"></el-input>            </el-form-item>            <el-form-item label="年龄" prop="checkPass">                <el-input type="text" v-model="ruleForm.age"></el-input>            </el-form-item>            <el-form-item>                <el-button type="primary" @click="submitForm()">提交</el-button>            </el-form-item>        </el-form>    </div></template><script>import axios from 'axios'export default {    name: "insert",    data() {        return {            ruleForm: {                name: '',                age: ''            }        };    },    methods: {        submitForm() {            axios.post("http://localhost:8081/student/save", this.ruleForm).then(function (resp) {                console.log(resp)            })        },    }}</script><style scoped></style>

    selectOne.vue

    <template>    <div>        <el-form :model="ruleForm" status-icon label-width="100px" class="demo-ruleForm"                 >            <el-form-item label="ID" prop="pass">                <el-input type="text" v-model="ruleForm.id"></el-input>            </el-form-item>            <el-form-item label="姓名" prop="pass">                <el-input type="text" v-model="ruleForm.name"></el-input>            </el-form-item>            <el-form-item label="年龄" prop="checkPass">                <el-input type="text" v-model="ruleForm.age"></el-input>            </el-form-item>        </el-form>    </div></template><script>import axios from "axios";export default {    name: "selectOne",    data() {        return {            ruleForm: {                id: '',                name: '',                age: ''            }        };    },    methods: {        getStudent() {            const _this = this;            axios.get("http://localhost:8081/student/findById/" + this.$route.query.id).then(function (resp) {                _this.ruleForm = resp.data;            })        }    },    created() {        this.getStudent();    }}</script><style scoped></style>

    selectAll.vue

    <template>    <div>        <template>            <el-table                  :data="tableData"                  >                <el-table-column                      prop="id"                      label="ID"                      width="180">                </el-table-column>                <el-table-column                      prop="name"                      label="姓名"                      width="180">                </el-table-column>                <el-table-column                      prop="age"                      label="年龄">                </el-table-column>                <el-table-column                      label="操作">                    <template slot-scope="scope">                        <el-button type="primary" size="small" @click="select(scope.row)">查看</el-button>                        <el-button type="warning" size="small" @click="update(scope.row)">修改</el-button>                        <el-button type="danger" size="small" @click="remove(scope.row)">删除</el-button>                    </template>                </el-table-column>            </el-table>        </template>    </div></template><script>import axios from "axios";export default {    name: "selectAll",    data() {        return {            tableData: []        }    },    methods: {        getData() {            const _this = this;            axios.get("http://localhost:8081/student/findAll").then(function (resp) {                _this.tableData = resp.data;            })        },        remove(stu) {            const _this = this;            if (confirm("确定删除吗?")) {                axios.delete("http://localhost:8081/student/remove/" + stu.id).then(function (resp) {                    if (resp.data == 1) {                        _this.getData();                    }                })            }        },        select(stu) {            this.$router.push({                path: "/selectOne",                query:{                    id: stu.id                }            })        },        update(stu) {            this.$router.push({                path: "/update",                query:{                    id: stu.id                }            })        }    },    created() {        this.getData();    }}</script><style scoped></style>

    update.vue

    <template>    <div>        <el-form :model="ruleForm" status-icon label-width="100px" class="demo-ruleForm"                 >            <el-form-item label="ID">                <el-input type="text" v-model="ruleForm.id" disabled></el-input>            </el-form-item>            <el-form-item label="姓名">                <el-input type="text" v-model="ruleForm.name"></el-input>            </el-form-item>            <el-form-item label="年龄">                <el-input type="text" v-model="ruleForm.age"></el-input>            </el-form-item>            <el-form-item>                <el-button type="warning" @click="submitForm()">修改</el-button>            </el-form-item>        </el-form>    </div></template><script>import axios from "axios";export default {    name: "update",    data() {        return {            ruleForm: {                id: '',                name: '',                age: ''            }        };    },    methods: {        submitForm() {            axios.post("http://localhost:8081/student/update", this.ruleForm).then(function (resp) {                console.log(resp)            })        },        getStudent() {            const _this = this;            axios.get("http://localhost:8081/student/findById/" + this.$route.query.id).then(function (resp) {                _this.ruleForm = resp.data;            })        }    },    created() {        this.getStudent();    }}</script><style scoped></style>

    读到这里,这篇“怎么搭建SpringBoot+Vue前后端分离”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

    --结束END--

    本文标题: 怎么搭建SpringBoot+Vue前后端分离

    本文链接: https://lsjlt.com/news/354715.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎么搭建SpringBoot+Vue前后端分离
      本文小编为大家详细介绍“怎么搭建SpringBoot+Vue前后端分离”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么搭建SpringBoot+Vue前后端分离”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1...
      99+
      2023-07-05
    • SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建过程(后端)
      目录数据库准备后端搭建1、快速创建个SpringBoot项目2、引入依赖3、编写代码快速生成代码4、运行代码生成器生成代码5、编写application.properties6、在启...
      99+
      2024-04-02
    • SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建过程(前端篇)
      目录后端篇前端篇 创建vue项目安装所需工具开始编码启动前端测试后端篇 SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端...
      99+
      2024-04-02
    • nodeJS+vue如何构建前后端分离
      这篇文章主要介绍nodeJS+vue如何构建前后端分离,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!准备工作:1.安装nodejs2.安装依赖包express4.x3.安装vue-c...
      99+
      2024-04-02
    • (十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建
      新手做毕设-后端管理系统 任务十六 [VUE权限菜单之动态路由](https://blog.csdn.net/wdyan297/article/details/128759654)任务十七 前...
      99+
      2023-09-09
      spring boot mysql vue.js elementui echarts
    • Vue+SpringBoot前后端分离中的跨域问题
      在前后端分离开发中,需要前端调用后端api并进行内容显示,如果前后端开发都在一台主机上,则会由于浏览器的同源策略限制,出现跨域问题(协议、域名、端口号不同等),导致不能正常调用api...
      99+
      2024-04-02
    • SpringBoot+VUE实现前后端分离的实战记录
      一,前端VUE项目 这里使用VUE UI创建一个VUE项目 命令行输入vue ui进入 手动配置项目 选中这三个 点击下一步->点击创建项目 用IDEA打开刚才创建的项目...
      99+
      2024-04-02
    • SpringBoot+mybatis+Vue如何实现前后端分离项目
      这篇文章主要为大家展示了“SpringBoot+mybatis+Vue如何实现前后端分离项目”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot+mybatis+Vue如何实现前后...
      99+
      2023-06-22
    • Springboot怎么实现前后端分离excel下载
      本篇内容介绍了“Springboot怎么实现前后端分离excel下载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Springboot前后端...
      99+
      2023-06-25
    • SpringBoot+mybatis+Vue实现前后端分离项目的示例
      目录一、SpringBoot环境搭建1、项目的数据库2、项目所需依赖3、application.yml文件4、入口类二、vue实现前后端分离1、前端页面2、springBoot控制层...
      99+
      2024-04-02
    • Flask Vue前后端分离实例分析
      这篇文章主要讲解了“Flask Vue前后端分离实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flask Vue前后端分离实例分析”吧!vue官网:开源的 Javascript 框架...
      99+
      2023-07-02
    • Vue之前端体系与前后端分离详解
      目录概述前端知识体系前端三要素表现层(CSS)行为层(JavaScript)JavaScript 框架 UI框架JavaScript 构建工具三端统一混合开发(Hybrid...
      99+
      2024-04-02
    • git前后端分离怎么用
      随着前端技术的繁荣发展,前端领域出现了越来越多的框架和技术,前后端分离也成为了现阶段 web 开发的一种趋势。其中,git 的使用对于前后端分离的管理起到了至关重要的作用。本文将介绍 git 前后端分离的使用方法。一、前后端分离的基本概念前...
      99+
      2023-10-22
    • Springboot实现前后端分离excel下载
      目录Springboot前后端分离excel下载前后端分离Excle下载乱码问题前端请求方式 : ajax请求Springboot前后端分离excel下载 现在公司的技术栈是spri...
      99+
      2024-04-02
    • thinkPHP5前后端分离
      thinkPHP5前后端分离 环境配置并运行起thinkphp安装小皮面板安装phpstorm配置thinkPHP5将文件放入适当位置修改Nginx配置修改配置和伪静态 跨域前端 ...
      99+
      2023-10-11
      php 前端 nginx 1024程序员节
    • 前后端分离djangorestframe
      关于验证码部分,在我这篇文章里说的挺详细的了:Python高级应用(3)—— 为你的项目添加验证码   这里还是再给一个前后端分离的实例,因为极验官网给的是用session作为验证的,而我们做前后端分离的用的是token,而不是sessi...
      99+
      2023-01-30
      后端 djangorestframe
    • springboot+VUE前后端分离实现疫情防疫平台JAVA
      目录主要模块:系统主要实现如下:登录之后进入系统首页:目前系统主要功能如下用户管理模块:用户添加、修改、删除、查询等基本操作角色管理模块、通过用户绑定角色、角色控制菜单显示、灵活控制...
      99+
      2024-04-02
    • 【第二季】【SpringBoot+Vue】前后端分离项目实战笔记
      配套视频在b站:【第二季】全网最简单但实用的SpringBoot+Vue前后端分离项目实战 SpringBoot+Vue项目实战 第二季 一、些许优化 刷新丢失其它标签页 缓存已打开标签页 tags...
      99+
      2023-09-01
      vue.js spring boot java
    • web前后端分离与前后端不分离的区别是什么
      本篇内容主要讲解“web前后端分离与前后端不分离的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web前后端分离与前后端不分离的区别是什么”吧!前后端...
      99+
      2024-04-02
    • JavaScript怎么实现前后端分离
      本篇内容介绍了“JavaScript怎么实现前后端分离”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 前...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作