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

手把手教你如何搭建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日

相关文章

  • 基于字符集、字符编码与HTTP编码解码之万象详解

    关于“基于字符集、字符编码与HTTP编码解码之万象详解”的攻略,我将分成以下几个部分进行详细介绍,以期达到完整性详细的标准: 基本概念 字符集 字符集是一系列字符的集合,每个字符有对应的编号和名称。常见的字符集有 ASCII、GB2312、UTF-8 等。 字符编码 字符编码是将一个字符集中的字符编号映射成计算机内部二进制编码的方法。其中,ASCII 码是最…

    Java 2023年6月1日
    00
  • Java之maven打完jar包之后将jar包放到指定位置汇总

    下面是“Java之maven打完jar包之后将jar包放到指定位置汇总”的完整攻略: 一、使用Maven打jar包 在项目的pom.xml文件中添加以下配置: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId>…

    Java 2023年5月19日
    00
  • Java String index out of range:100错误解决方案详解

    针对这个主题,我将分为以下几个部分进行讲解: 问题描述 问题原因 解决方案详解 示例说明 总结 1. 问题描述 在Java开发中,我们可能会遇到 “String index out of range” 错误,错误提示通常会包含一个数字,如:100。这类错误会导致程序无法正常运行,需要寻找解决方案来解决。 2. 问题原因 这个错误的产生原因通常是由于字符串中字…

    Java 2023年5月27日
    00
  • Nginx 连接tomcat时会话粘性问题分析及解决方法

    Nginx 连接tomcat时会话粘性问题分析及解决方法 问题背景 在使用 Nginx 对 Tomcat 进行反向代理时,如果不做任何特殊处理,有可能出现会话粘性问题,即同一个用户的请求被转发到了不同的 Tomcat 实例上,导致会话信息丢失,从而导致用户操作失败。 问题分析 会话粘性问题的根本原因是访问服务器时没有考虑到会话信息,导致同一用户的请求在多个服…

    Java 2023年6月16日
    00
  • Java 中利用泛型和反射机制抽象DAO的实例

    抽象DAO(Data Access Object)是一种数据访问设计模式,它可以对不同的数据源(比如数据库、文件系统等)进行统一的抽象和封装,提高代码的复用性和可维护性。Java 中利用泛型和反射机制可以更进一步的抽象化DAO,并实现更为灵活的数据访问。 本攻略将介绍如何利用泛型和反射机制来实现一个通用的抽象DAO。 一、定义抽象DAO 首先需要定义一个抽象…

    Java 2023年5月20日
    00
  • 关于在Java中使用预定义类

    在Java中,预定义类是指Java标准库中提前定义好的一组类,它们负责完成一些常见的任务,例如字符串操作、时间日期处理等。使用Java预定义类可以大大简化编程过程,提高代码的可读性和可维护性。下面是在Java中使用预定义类的攻略: 1. 导入预定义类 Java标准库中的预定义类已经被编译成Java API文档,可以直接使用。但是,在使用预定义类之前,需要导入…

    Java 2023年5月26日
    00
  • Gson中@JsonAdater注解的几种方式总结

    当我们使用Gson将Java对象序列化成JSON字符串或者JSON字符串反序列化成Java对象的时候,我们需要做一些特殊的处理,例如处理JSON字符串中的日期格式、处理JSON字符串中的空值、处理JSON字符串中特定字段的命名等等。Gson提供了@JsonAdapter注解来满足这些需求,它可以对序列化和反序列化过程中的数据进行自定义转换,下面我们来详细介绍…

    Java 2023年5月26日
    00
  • java解析XML详解

    Java解析XML详解 XML 概述 XML(Extensible Markup Language) 是一种标记语言,用于存储和传输数据。XML 文档由许多元素构成,每个元素包含一个开始标签、一个结束标签和其中间的一些内容。 XML 和 HTML 最大的不同在于,XML 的标签是自定义的,因此具有更强的灵活性和可扩展性。XML 通常用于将数据从一种格式转换为…

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