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实现简单日历效果的完整攻略: 1. 创建Vue项目 首先需要通过Vue CLI工具创建一个Vue项目,具体步骤在这里就不详细阐述了,如果不熟悉Vue CLI的使用,可以参考Vue CLI文档。 2. 安装依赖 在创建好Vue项目之后,需要安装一些依赖,在项目根目录下运行以下命令: npm install moment –save 这里我们…

    Vue 2023年5月29日
    00
  • vuex的module模块用法示例

    当我们的应用程序逐渐复杂化,我们需要管理应用程序中不同组件之间的状态,这时候Vuex就显得尤为重要。Vuex是一个由Vue.js官方提供的插件,为Vue.js应用程序提供了集中式的状态管理。 而Vuex的module模块是Vuex中非常重要的一个概念,可以用于更好的管理Vuex的状态,避免不必要的冲突,以下是module模块使用的攻略。 创建module模块…

    Vue 2023年5月27日
    00
  • vue中如何进行异步请求

    当在Vue.js应用程序中进行异步请求时,Vue.js使我们能够使用它在“vue-resource”和“axios”两个包中提供的两种不同方式。这两种方式都可以很容易地在Vue.js中创建和使用XHR请求。现在,我们来看一下如何使用这两种方式进行异步请求。 使用vue-resource进行异步请求 步骤一:安装vue-resource 在Vue.js项目中使…

    Vue 2023年5月29日
    00
  • Vue实现docx/xlsx/pdf等类型文件预览功能

    实现Vue对docx/xlsx/pdf等类型文件的预览功能,我们需要使用第三方库来处理这些文件格式,并且需要一个合适的前端组件来显示这些文件。下面是实现该功能的完整攻略: 步骤1:选择合适的前端组件 目前比较流行的前端组件有两种: PDF.js:适用于pdf文件,支持跨浏览器解析和渲染pdf文件。 ViewerJS:适用于docx/xlsx文件等,支持多种文…

    Vue 2023年5月28日
    00
  • 详解用webpack2.0构建vue2.0超详细精简版

    下面是详解“用webpack2.0构建vue2.0超详细精简版”的完整攻略。 一、安装依赖 在开始构建项目前,我们需要先安装相关依赖,执行以下命令: npm i webpack webpack-dev-server vue vue-loader vue-template-compiler css-loader style-loader file-loader…

    Vue 2023年5月27日
    00
  • 理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

    下面详细讲解“理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理”的完整攻略。自定义指令是Vue框架中提供的一种高级功能,可以用于改变DOM元素的行为,例如为元素添加过渡效果、鼠标经过时高亮等。vue2.x和vue3.x中自定义指令的实现方式有所不同,下面分别介绍。 Vue2.x自定义指令 自定义指令定义方法 在Vue2.x中,我们可以使用Vue.d…

    Vue 2023年5月28日
    00
  • 一份超级详细的Vue-cli3.0使用教程【推荐】

    一份超级详细的Vue-cli3.0使用教程 简介 Vue-cli3.0是Vue.js 官方提供的一个基于 webpack4 和 Webpack-dev-server 的脚手架工具,用于快速构建vue项目开发环境。本教程将为您带来Vue-cli3.0的完整使用攻略,从安装到构建一个简单的Vue项目,让你轻松掌握Vue-cli3.0的使用方法。 安装Vue-cl…

    Vue 2023年5月28日
    00
  • vue 事件获取当前组件的属性方式

    获取当前组件的属性是Vue中常见的操作之一。下面是Vue中获取当前组件属性的完整攻略。 方式一:$event对象 可以通过$event对象来获取当前组件属性。$event是事件回调函数的第一个参数,它是原生DOM事件对象的包装。我们可以从这个对象中获取各种属性。 例如,我们有一个input组件: <input type="text"…

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