SpringBoot结合Vue实现投票系统过程详解

标题:SpringBoot结合Vue实现投票系统过程详解

简介

在这个教程中,我们将介绍如何使用Spring Boot和Vue来构建一个简单的投票系统。我们将使用Spring Boot构建后端API,使用Vue创建UI并前后端相结合。

投票系统架构

我们将采用前后端分离的架构来构建这个投票系统。常见的做法是将前端和后端分别放置在不同的服务器上。在我们的示例中,我们将前端和后端都放在同一个服务器上。

后端API构建

我们将使用以下工具来构建后端API:
- Spring Boot 2.0.4.RELEASE
- Spring Data JPA
- MySQL 5.7.x
- Java 8

创建Spring Boot应用程序

首先,我们需要创建一个Spring Boot应用,可以使用Spring Initializr(https://start.spring.io/)或者使用IDE自带的Spring Boot工具快速创建应用程序。

添加Spring Data JPA依赖

pom.xml 中添加下面的依赖:

<!-- Spring Data JPA -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- MySQL JDBC Driver -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>

创建实体类

创建一个实体类来表示投票。

@Entity
public class Vote {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @NotNull
  private String name;

  @NotNull
  private int count;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getCount() {
    return count;
  }

  public void setCount(int count) {
    this.count = count;
  }
}

创建DAO层

创建一个DAO接口来操作投票实体。

@Repository
public interface VoteDao extends JpaRepository<Vote, Long> {}

创建Service层

创建一个Service类来处理投票逻辑。

@Service
public class VoteService {
  @Autowired private VoteDao voteDao;

  public List<Vote> getVotes() {
    return voteDao.findAll();
  }

  public Vote getVoteById(Long id) {
    return voteDao.findById(id).orElse(null);
  }

  public void addVote(Vote vote) {
    vote.setCount(0);
    voteDao.save(vote);
  }

  public void deleteVoteById(Long id) {
    voteDao.deleteById(id);
  }

  public void updateVoteCount(Long id) {
    Vote vote = voteDao.findById(id).orElse(null);
    vote.setCount(vote.getCount() + 1);
    voteDao.save(vote);
  }
}

创建控制层

创建一个控制层来处理投票API的请求。

@RestController
public class VoteController {
  @Autowired private VoteService voteService;

  @GetMapping("/votes")
  public List<Vote> getVotes() {
    return voteService.getVotes();
  }

  @GetMapping("/votes/{id}")
  public Vote getVoteById(@PathVariable Long id) {
    return voteService.getVoteById(id);
  }

  @PostMapping("/votes")
  public void addVote(@RequestBody Vote vote) {
    voteService.addVote(vote);
  }

  @DeleteMapping("/votes/{id}")
  public void deleteVoteById(@PathVariable Long id) {
    voteService.deleteVoteById(id);
  }

  @PutMapping("/votes/{id}/count")
  public void updateVoteCount(@PathVariable Long id) {
    voteService.updateVoteCount(id);
  }
}

至此,我们通过Spring Boot创建了后台API,可以通过API来获取、添加、删除和更新投票数据。

前端UI构建

我们将使用Vue创建前端UI。

创建Vue组件

在src/components目录下创建一个名为Vote.vue的Vue组件。

<template>
  <div>
    <h3>{{ title }}</h3>
    <ul>
      <li v-for="vote in votes" :key="vote.id">
        {{ vote.name }}({{ vote.count }}票)
        <button @click="voteCount(vote.id)">投票</button>
        <button @click="deleteVote(vote.id)">删除</button>
      </li>
    </ul>
    <label>名称</label>
    <input type="text" v-model="name" />
    <button @click="addVote()">添加</button>
  </div>
</template>

<script>
export default {
  name: "Vote",
  data() {
    return {
      title: "投票系统",
      votes: [],
      name: "",
    };
  },
  created() {
    this.getVotes();
  },
  methods: {
    getVotes() {
      fetch("/votes")
        .then((response) => response.json())
        .then((data) => {
          this.votes = data;
        });
    },
    addVote() {
      const vote = { name: this.name };
      fetch("/votes", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify(vote),
      })
        .then(() => {
          this.name = "";
          this.getVotes();
        });
    },
    deleteVote(id) {
      fetch(`/votes/${id}`, { method: "DELETE" }).then(() =>
        this.getVotes()
      );
    },
    voteCount(id) {
      fetch(`/votes/${id}/count`, { method: "PUT" }).then(() =>
        this.getVotes()
      );
    },
  },
};
</script>

该组件显示了一个投票列表,其中每个投票都有一个投票和删除按钮。还有一个表单用于添加新的投票。

在App.vue中引用Vote组件

<template>
  <div id="app">
    <Vote />
  </div>
</template>

<script>
import Vote from "./components/Vote.vue";

export default {
  name: "App",
  components: {
    Vote,
  },
};
</script>

运行前端应用

在命令行中进入到前端目录中,然后运行下面的命令来运行Vue应用:

npm install
npm run serve

在浏览器中访问 http://localhost:8080 就可以看到我们的投票系统。

示例1:添加新投票

我们在前端UI的输入框中输入新投票的名称,点击添加按钮,就会向后台API发送POST请求来添加新的投票。投票列表会自动更新,新添加的投票会出现在列表中。

示例2:投票

我们在前端UI的投票按钮中点击一个投票,就会向后台API发送PUT请求来更新投票计数器。投票列表会自动更新,投票的计数器会增加。

至此,我们使用Spring Boot和Vue组合来构建投票系统的教程到这里就结束了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot结合Vue实现投票系统过程详解 - Python技术站

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

相关文章

  • 一步步讲解Vue如何启动项目

    作为Vue项目的作者,我很乐意为您介绍如何启动Vue项目。下面是一步步讲解的完整攻略: 步骤一:安装 Node.js Vue.js 是一个基于Node.js构建的应用程序框架,因此,为了启动 Vue 项目,首先需要安装 Node.js。请访问 Node.js 官网 下载并安装 Node.js 的最新版本。 步骤二:使用 Vue CLI 快速创建一个 Vue …

    Vue 2023年5月28日
    00
  • vue如何实现Json格式数据展示

    要展示Json格式数据,我们可以使用Vue框架的v-for指令。v-for指令可以循环遍历数组或对象中的元素,根据元素的个数生成相应的DOM节点。 下面是一个简单的示例,以渲染包含一些数据的表格为例: <table> <thead> <tr> <th>Name</th> <th>Emai…

    Vue 2023年5月27日
    00
  • vue的图片需要用require的方式进行引入问题

    为了解释“Vue 的图片需要用 require 的方式进行引入问题”,首先需要对 Webpack 打包工具的处理方式进行简要说明。 Webpack 打包工具通过使用 ‘loader’(加载器)的引入不同类型的文件,包括图片、CSS文件等。其中图片文件处理经常出现的问题就是路径引入的方式。Webpack 打包工具提供了多种处理方式,其中包含使用require的…

    Vue 2023年5月27日
    00
  • vue组件打包并发布到npm的全过程

    下面是Vue组件打包并发布到npm的全过程: 第一步:创建Vue组件项目 首先,我们需要创建一个Vue组件项目,可以使用Vue CLI来创建项目。具体步骤如下: 打开命令行工具,并输入以下命令来安装Vue CLI: npm install -g @vue/cli 接着,在指定的目录下运行以下命令来创建一个Vue组件项目: vue create your-pr…

    Vue 2023年5月28日
    00
  • vue组件内部引入外部js文件的方法

    下面是详细的Vue组件内部引入外部js文件方法的攻略: 1. 在Vue组件的script中引入外部js文件 Vue组件的script标签中可以直接引入外部的js文件,例如: <template> <div> <!– 省略组件模板代码 –> </div> </template> <scrip…

    Vue 2023年5月28日
    00
  • 一文快速详解前端框架 Vue 最强大的功能

    一文快速详解前端框架 Vue 最强大的功能 前言 Vue 是一款非常流行的前端框架,它不仅仅是一个库,更是一种思想,它的最大优点就是能够很好的拆分成各个组件来开发,易于维护和扩展。在这篇文章中,我将向大家介绍 Vue 最强大的功能。 Vue 组件化编程 Vue 能够很好的拆分成各个组件来开发,一个组件就相当于一个独立的功能模块。组件化开发能够提高代码的复用性…

    Vue 2023年5月27日
    00
  • vue.js实现带日期星期的数字时钟功能示例

    接下来我将为您详细介绍“vue.js实现带日期星期的数字时钟功能示例”的完整攻略。 总体思路 本次实现将分为以下几步:1. 引入Vue.js2. 构建Vue实例3. 组件化设计钟表组件4. 实现数字时钟功能5. 实现带日期星期的效果 构建Vue实例 在index.html文件中引入Vue.js的CDN: <script src="https:…

    Vue 2023年5月29日
    00
  • 使用vue3搭建后台系统的详细步骤

    使用Vue3搭建后台系统的详细步骤: 1. 安装Vue CLI 使用Vue CLI可以帮助我们快速地搭建Vue项目环境,可以使用以下命令安装: npm install -g @vue/cli 2. 创建项目 可以使用以下命令创建一个基于Vue3的项目: vue create my-project 3. 安装其他依赖 除了Vue CLI生成的默认依赖外,我们还…

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