手把手教你如何搭建SpringBoot+Vue前后端分离

yizhihongxing

手把手教你如何搭建SpringBoot+Vue前后端分离

1. 准备工作

在开始搭建前,需要先安装并配置好以下软件:

  • Java8及以上版本
  • Node.js
  • Vue CLI 4
  • Git

2. 搭建后端环境

2.1. 创建SpringBoot项目

使用IntelliJ IDEA 或者其它集成开发环境,选择 Spring Initializr 创建一个新的 SpringBoot 项目。

2.2. 配置pom.xml文件

在SpringBoot项目的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 引入Mybatis框架 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

<!-- 引入MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.12</version>
</dependency>

<!-- 引入Swagger2文档 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.10.5</version>
</dependency>

<!-- 引入Swagger UI文档 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.10.5</version>
</dependency>

2.3. 创建数据库

创建一个名为 test 的数据库,并在其下创建一个名为 user 的表,其中包含 idusernamepassword 三个字段。

2.4. 编写配置文件

application.properties 配置文件中添加如下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456

#MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.domain

#Swagger配置
swagger.path=/swagger-ui.html
swagger.enabled=true

2.5. 编写实体和Mapper接口

domain 文件夹中创建 User 类:

public class User {
    private Integer id;
    private String username;
    private String password;
    // 省略getter和setter方法
}

mapper 文件夹中创建 UserMapper 接口:

@Mapper
public interface UserMapper {
    List<User> getAllUsers();

    User getUserById(Integer id);

    void insertUser(User user);

    void updateUser(User user);

    void deleteUser(Integer id);
}

2.6. 编写Controller类

controller 文件夹中创建 UserController 类:

@RestController
@RequestMapping("/api/v1")
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @ApiOperation(value = "获取所有用户信息", notes = "获取所有用户信息的API")
    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    @ApiOperation(value = "根据ID获取用户信息", notes = "根据ID获取用户信息的API")
    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Integer id) {
        return userMapper.getUserById(id);
    }

    @ApiOperation(value = "添加新用户", notes = "添加新用户的API")
    @PostMapping("/users")
    public void insertUser(@RequestBody User user) {
        userMapper.insertUser(user);
    }

    @ApiOperation(value = "修改用户信息", notes = "修改用户信息的API")
    @PutMapping("/users")
    public void updateUser(@RequestBody User user) {
        userMapper.updateUser(user);
    }

    @ApiOperation(value = "删除指定用户", notes = "删除指定用户的API")
    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Integer id) {
        userMapper.deleteUser(id);
    }
}

2.7. 运行项目

启动 SpringBoot 项目,通过浏览器访问 http://localhost:8080/swagger-ui.html 即可查看到接口文档,并测试接口的功能。

3. 搭建前端环境

3.1. 创建Vue项目

在终端中执行以下命令:

vue create vue-demo

3.2. 安装开发依赖

在项目根目录下执行以下命令安装依赖:

npm install --save axios
npm install --save-dev webpack-cli
npm install --save-dev webpack-dev-server

3.3. 配置环境

src 文件夹下创建 config.js 文件,配置如下:

const baseURL = 'http://localhost:8080/api/v1'
export {baseURL}

vue.config.js 文件中添加如下配置:

module.exports = {
    devServer: {
        port: 8081,
    }
}

3.4. 编写Vue组件

components 文件夹下创建 dashboard.vue 文件,内容如下:

<template>
  <div>
    <el-button type="primary" @click="getUsers()">获取所有用户</el-button>
    <el-button type="primary" @click="addUser()">添加新用户</el-button>
    <el-form :model="form" :rules="rules">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="form.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input v-model="form.password" type="password"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm('form')">提交</el-button>
        <el-button @click="resetForm('form')">重置</el-button>
      </el-form-item>
    </el-form>
    <el-table :data="users" style="width: 100%">
      <el-table-column prop="id" label="ID"></el-table-column>
      <el-table-column prop="username" label="用户名"></el-table-column>
      <el-table-column prop="password" label="密码"></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button type="primary" @click="editUser(scope.row)">编辑</el-button>
          <el-button type="danger" @click="deleteUser(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
import axios from 'axios'
import {baseURL} from "../config";

export default {
  data() {
    return {
      users: [],
      form: {
        username: '',
        password: ''
      },
      rules: {
        username: [
          {required: true, message: '请输入用户名', trigger: 'blur'}
        ],
        password: [
          {required: true, message: '请输入密码', trigger: 'blur'}
        ]
      }
    }
  },
  methods: {
    getUsers() {
      axios.get(`${baseURL}/users`).then(response => {
        this.users = response.data;
      })
    },
    addUser() {
      axios.post(`${baseURL}/users`, this.form).then(response => {
        this.$message({
          message: '添加成功',
          type: 'success'
        });
        this.getUsers();
      })
    },
    editUser(row) {
      this.form = {...row};
    },
    deleteUser(row) {
      axios.delete(`${baseURL}/users/${row.id}`).then(response => {
        this.$message({
          message: '删除成功',
          type: 'success'
        });
        this.getUsers();
      })
    },
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          if (this.form.id == null) {
            this.addUser();
          } else {
            this.updateUser();
          }
        }
      })
    },
    updateUser() {
      axios.put(`${baseURL}/users`, this.form).then(response => {
        this.$message({
          message: '修改成功',
          type: 'success'
        });
        this.form.id = null;
        this.form.username = '';
        this.form.password = '';
        this.getUsers();
      })
    },
    resetForm(formName) {
      this.$refs[formName].resetFields();
    }
  },
  mounted() {
    this.getUsers();
  }
}
</script>

<style scoped>
.el-button {
  margin-right: 10px;
}
</style>

3.5. 运行项目

终端中执行以下命令启动前端项目:

npm run serve

通过浏览器访问 http://localhost:8081 即可查看到前端页面,并测试前后端接口的功能。

4. 示例

此处提供两个示例:

4.1. 获取所有用户

在浏览器中访问前端项目的首页,点击“获取所有用户”按钮,即可调用后端接口并显示出所有用户的信息。

4.2. 添加新用户

在前端项目的首页,填写要添加的用户的信息并点击“提交”按钮,即可调用后端接口添加新用户。

参考资料

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你如何搭建SpringBoot+Vue前后端分离 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java字符串定义及常用方法

    Java字符串定义及常用方法 字符串定义 Java字符串是一个对象,使用String类来创建和操作字符串。Java字符串的特点是不可改变性,即在创建字符串后,不能改变其值。 字符串创建 Java字符串可以通过字面量和构造函数来创建。 字面量方式 String str = "Java字符串"; 构造函数方式 String str2 = ne…

    Java 2023年5月26日
    00
  • SpringMVC实战案例RESTFul实现添加功能

    SpringMVC实战案例RESTFul实现添加功能 在SpringMVC中,我们可以使用RESTful风格的API来实现添加功能。本文将详细讲解如何在SpringMVC中实现RESTful添加功能。 RESTful风格的API RESTful是一种Web API的设计风格,它使用HTTP协议的GET、POST、PUT、DELETE等方法来实现资源的增删改查…

    Java 2023年5月18日
    00
  • java实现文件夹上传功能实例代码(SpringBoot框架)

    针对“java实现文件夹上传功能实例代码(SpringBoot框架)”这个话题,我将提供完整的攻略,包含以下几个部分:需求分析、技术选型、代码实现和测试验证。 需求分析 在开始代码的编写,首先需要对这个需求进行分析,确认下面几个问题: 需要实现何种文件上传功能? 在SpringBoot框架下应该如何实现? 有无需要兼容的客户端浏览器或平台? 针对以上问题,根…

    Java 2023年5月20日
    00
  • 如何解决java压缩文件乱码问题

    针对Java压缩文件乱码问题,这里提供一份解决方案。 第一步:查找乱码原因 首先我们需要确定压缩文件存在乱码的原因。一般情况下,乱码的原因可能是: 压缩文件编码格式不正确(例如使用GBK编码打包的文件在使用UTF-8进行解压时会出现乱码) 解压程序的编码格式不正确 压缩文件本身存在编码问题 第二步:使用正确的编码格式 针对第一种情况,我们可以在压缩文件时指定…

    Java 2023年5月20日
    00
  • java实现潜艇大战游戏源码

    Java实现潜艇大战游戏源码攻略 简介 潜艇大战是一款基于Java语言实现的2D游戏。该游戏的主要玩法是控制一艘潜艇在水下航行,躲避敌方潜艇的攻击,并攻击敌方潜艇,最终达到游戏目标。 游戏源码攻略 以下介绍实现潜艇大战游戏源码的具体步骤: 1. 环境搭建 首先,需要搭建Java开发环境,推荐使用Eclipse等IDE进行开发。同时,需要安装JavaFx相关的…

    Java 2023年5月19日
    00
  • web开发中添加数据源实现思路

    我来详细讲解web开发中添加数据源实现思路的完整攻略。在web开发过程中,我们需要添加数据源来提供数据支持。其中包括本地文件、数据库、网络API等多种形式。下面介绍一般的实现思路。 1. 确认数据源类型和数据格式 在添加数据源前,首先需要确认数据源的类型和数据格式。不同的数据源类型和数据格式,需要使用不同的方法进行访问和处理。比如,如果数据源是本地文件,需要…

    Java 2023年6月15日
    00
  • springmvc 分页查询的简单实现示例代码

    下面是完整的“springmvc 分页查询的简单实现示例代码”的攻略: 1. 简介 Spring MVC 是一个基于 Java 的 Web 应用程序框架,而分页查询则是 Web 应用程序中常用的功能之一。本文将向您展示如何在 Spring MVC 中实现简单的分页查询功能。 2. 实现步骤 2.1 添加 jar 包 在项目的 pom.xml 中添加以下依赖:…

    Java 2023年6月15日
    00
  • Mybatis中返回Map的实现

    Sure! MyBatis支持返回Map类型的结果集,我们可以将查询结果映射到Map中,其中Map中的key对应结果集中的字段名,value对应该字段所对应的值。那么,如何在MyBatis中实现返回Map类型的结果集呢?下面是实现的完整攻略: SQL语句 我们需要编写SQL语句,并在查询中使用别名,来保证返回结果中的属性名和表的列名保持一致。例如,以下SQL…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部