当前位置:   article > 正文

基于前后端分离技术做增删改查操作(SpringBoot+Mybatis Plus+Vue)_尝试编写使用id(主键)实现前后端分离的数据修改、删除功能。

尝试编写使用id(主键)实现前后端分离的数据修改、删除功能。

通过SpringBoot后端项目,mybatis plus,和前端Vue来实现前后端分离技术

第一步:

1、准备sql

本项目主要实现两张表的增删改查(老师+专业)+分页

  1. CREATE TABLE `teacher` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(255) DEFAULT NULL,
  4. `age` int(11) DEFAULT NULL,
  5. `sex` int(255) DEFAULT NULL,
  6. `hobby` varchar(255) DEFAULT NULL,
  7. `birthday` date DEFAULT NULL,
  8. `mid` int(11) DEFAULT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
  11. CREATE TABLE `major` (
  12. `id` int(11) NOT NULL AUTO_INCREMENT,
  13. `name` varchar(255) DEFAULT NULL,
  14. PRIMARY KEY (`id`)
  15. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

2、sql准备完毕

添加数据即可

第二步:

搭建后端项目

后端项目还是跟我们之前编写的代码一样

1、创建项目

这是之前讲解的使用SpringBoot开发的详细步骤(可以参考)

使用SpringBoot开发(完整项目)_java spring boot 项目开发-CSDN博客

2、加入依赖

你需要什么你就拿什么依赖

  1. <properties>
  2. <java.version>8</java.version>
  3. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  4. <mybatis-plus.version>3.5.2</mybatis-plus.version>
  5. <mysql.version>8.0.30</mysql.version>
  6. <junit.version>4.12</junit.version>
  7. <swagger.version>3.0.0</swagger.version>
  8. <lombok.version>1.18.24</lombok.version>
  9. <hutool.version>5.8.5</hutool.version>
  10. <druid.version>1.2.11</druid.version>
  11. <jackson.version>2.13.4</jackson.version>
  12. <fastjson2.version>2.0.23</fastjson2.version>
  13. <commonsio.version>2.11.0</commonsio.version>
  14. <aspectj-weaver.version>1.9.7</aspectj-weaver.version>
  15. <commons-fileupload.version>1.3.1</commons-fileupload.version>
  16. <commons-lang3.version>3.12.0</commons-lang3.version>
  17. <hibernate-validator.version>6.2.3.Final</hibernate-validator.version> <pagehelper.version>5.2.0</pagehelper.version>
  18. </properties>
  19. <dependencies>
  20. <!--junit-->
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>${junit.version}</version>
  25. <scope>test</scope>
  26. </dependency>
  27. <!--lombok-->
  28. <dependency>
  29. <groupId>org.projectlombok</groupId>
  30. <artifactId>lombok</artifactId>
  31. <version>${lombok.version}</version>
  32. <scope>provided</scope>
  33. </dependency>
  34. <!--spring-boot-web相关依赖-->
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-web</artifactId>
  38. </dependency>
  39. <!--hutool-->
  40. <dependency>
  41. <groupId>cn.hutool</groupId>
  42. <artifactId>hutool-all</artifactId>
  43. <version>${hutool.version}</version>
  44. </dependency>
  45. <!--mysql-->
  46. <dependency>
  47. <groupId>mysql</groupId>
  48. <artifactId>mysql-connector-java</artifactId>
  49. <version>${mysql.version}</version>
  50. </dependency>
  51. <!--mybatis-plus-->
  52. <dependency>
  53. <groupId>com.baomidou</groupId>
  54. <artifactId>mybatis-plus-boot-starter</artifactId>
  55. <version>${mybatis-plus.version}</version>
  56. </dependency>
  57. <!--代码生成器-->
  58. <dependency>
  59. <groupId>com.baomidou</groupId>
  60. <artifactId>mybatis-plus-generator</artifactId>
  61. <version>3.4.0</version>
  62. </dependency>
  63. <!--mybatis-plus-generator需要此依赖-->
  64. <dependency>
  65. <groupId>org.apache.velocity</groupId>
  66. <artifactId>velocity</artifactId>
  67. <version>1.7</version>
  68. </dependency>
  69. <!--fastjson 工具-->
  70. <dependency>
  71. <groupId>com.alibaba.fastjson2</groupId>
  72. <artifactId>fastjson2</artifactId>
  73. <version>${fastjson2.version}</version>
  74. </dependency>
  75. <!--aop相关-->
  76. <dependency>
  77. <groupId>org.aspectj</groupId>
  78. <artifactId>aspectjweaver</artifactId>
  79. <version>${aspectj-weaver.version}</version>
  80. </dependency>
  81. <dependency>
  82. <groupId>org.springframework.boot</groupId>
  83. <artifactId>spring-boot-starter-aop</artifactId>
  84. </dependency>
  85. <!--加解密、编码-->
  86. <dependency>
  87. <groupId>commons-codec</groupId>
  88. <artifactId>commons-codec</artifactId>
  89. </dependency>
  90. <dependency>
  91. <groupId>org.apache.commons</groupId>
  92. <artifactId>commons-lang3</artifactId>
  93. <version>${commons-lang3.version}</version>
  94. </dependency>
  95. <dependency>
  96. <groupId>commons-io</groupId>
  97. <artifactId>commons-io</artifactId>
  98. <version>${commonsio.version}</version>
  99. </dependency>
  100. <!-- <dependency>
  101. <groupId>io.springfox</groupId>
  102. <artifactId>springfox-boot-starter</artifactId>
  103. <version>${swagger.version}</version>
  104. </dependency>-->
  105. <dependency>
  106. <groupId>org.springframework.boot</groupId>
  107. <artifactId>spring-boot-starter-data-redis</artifactId>
  108. </dependency>
  109. <dependency>
  110. <groupId>org.springframework.boot</groupId>
  111. <artifactId>spring-boot-starter-test</artifactId>
  112. </dependency>
  113. <dependency>
  114. <groupId>org.hibernate.validator</groupId>
  115. <artifactId>hibernate-validator</artifactId>
  116. <version>6.2.3.Final</version>
  117. </dependency>
  118. <!--pagehelper-->
  119. <dependency>
  120. <groupId>com.github.pagehelper</groupId>
  121. <artifactId>pagehelper-spring-boot-starter</artifactId>
  122. <version>1.4.0</version>
  123. </dependency>
  124. <!--阿里云短信-->
  125. <dependency>
  126. <groupId>com.aliyun</groupId>
  127. <artifactId>tea-openapi</artifactId>
  128. <version>0.2.5</version>
  129. </dependency>
  130. <dependency>
  131. <groupId>com.aliyun</groupId>
  132. <artifactId>dysmsapi20170525</artifactId>
  133. <version>2.0.20</version>
  134. </dependency>
  135. <dependency>
  136. <groupId>com.aliyun.oss</groupId>
  137. <artifactId>aliyun-sdk-oss</artifactId>
  138. <version>3.15.1</version>
  139. </dependency>
  140. <!--文件上传-->
  141. <dependency>
  142. <groupId>commons-fileupload</groupId>
  143. <artifactId>commons-fileupload</artifactId>
  144. <version>${commons-fileupload.version}</version>
  145. </dependency>
  146. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
  147. <dependency>
  148. <groupId>org.apache.poi</groupId>
  149. <artifactId>poi</artifactId>
  150. <version>3.14</version>
  151. </dependency>
  152. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
  153. <dependency>
  154. <groupId>org.apache.poi</groupId>
  155. <artifactId>poi-ooxml</artifactId>
  156. <version>3.14</version>
  157. </dependency>
  158. <dependency>
  159. <groupId>org.freemarker</groupId>
  160. <artifactId>freemarker</artifactId>
  161. <version>2.3.31</version>
  162. </dependency>
  163. <!--定时任务-->
  164. <dependency>
  165. <groupId>org.springframework.boot</groupId>
  166. <artifactId>spring-boot-starter-quartz</artifactId>
  167. </dependency>
  168. <!--rabbitmq-->
  169. <dependency>
  170. <groupId>org.springframework.boot</groupId>
  171. <artifactId>spring-boot-starter-amqp</artifactId>
  172. </dependency>
  173. <!--热部署-->
  174. <dependency>
  175. <groupId>org.springframework.boot</groupId>
  176. <artifactId>spring-boot-devtools</artifactId>
  177. </dependency>
  178. </dependencies>
  179. <build>
  180. <plugins>
  181. <!--springboot打包插件-->
  182. <plugin>
  183. <groupId>org.springframework.boot</groupId>
  184. <artifactId>spring-boot-maven-plugin</artifactId>
  185. </plugin>
  186. </plugins>
  187. </build>

3、创建启动类

  1. package cn.jiyun;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @SpringBootApplication
  6. @MapperScan("cn.jiyun.mapper")
  7. public class Application {
  8. public static void main(String[] args) {
  9. SpringApplication.run(Application.class,args);
  10. System.out.println("启动成功");
  11. }
  12. }

 之前的博客中也讲到了SpringBootApplication注解的作用

SpringBoot运行原理(超详细!!!面试必考)-CSDN博客

4、添加application.yml配置文件

  1. server:
  2. port: 82 #端口号
  3. spring:
  4. mvc:
  5. pathmatch:
  6. matching-strategy: ant_path_matcher
  7. rabbitmq:
  8. host: 127.0.0.1 #rabbitmq的ip地址
  9. username: guest #用户名
  10. password: guest #密码
  11. virtual-host: / #空间
  12. redis:
  13. host: 127.0.0.1
  14. port: 6379
  15. # password: 123456
  16. # 连接超时时间(毫秒)
  17. timeout: 5000ms
  18. # 连接池配置
  19. jedis:
  20. pool:
  21. # 连接池最大连接数(使用负值表示没有限制)
  22. max-active: 8
  23. # 连接池最大阻塞等待时间(使用负值表示没有限制)
  24. max-wait: 1ms
  25. # 连接池中的最大空闲连接
  26. max-idle: 8
  27. # 连接池中的最小空闲连接
  28. min-idle: 0
  29. datasource:
  30. driver-class-name: com.mysql.cj.jdbc.Driver #驱动
  31. url: jdbc:mysql://127.0.0.1:3306/qizhongb?useSSL=false #数据库地址
  32. username: root #用户名
  33. password: aaaa #密码
  34. # 允许循环依赖
  35. main:
  36. allow-circular-references: true
  37. # mybatis-plus配置
  38. mybatis-plus:
  39. configuration:
  40. # 打印sql
  41. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  42. # mapper xml路径
  43. mapper-locations: classpath:mapper/*.xml

这里面配置了redis,rabbitmq

(注意!!!前后端项目的端口号尽量不一样) 

5、编写controller层,service层,mapper层

1、controller层
  1. package cn.jiyun.controller;
  2. import cn.jiyun.mapper.MajorMapper;
  3. import cn.jiyun.pojo.Major;
  4. import cn.jiyun.pojo.Teacher;
  5. import cn.jiyun.service.TeacherService;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.web.bind.annotation.CrossOrigin;
  9. import org.springframework.web.bind.annotation.RequestBody;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import javax.rmi.CORBA.Stub;
  13. import java.util.List;
  14. @RestController
  15. @CrossOrigin
  16. @RequestMapping("teacher")
  17. public class TeacherController {
  18. @Autowired
  19. private TeacherService teacherService;
  20. @Autowired
  21. private MajorMapper majorMapper;
  22. @RequestMapping("teacherList")
  23. public Page<Teacher> teacherList(int current , int size, @RequestBody Teacher teacher){
  24. System.out.println(teacher.getName());
  25. return teacherService.teacherList(current,size,teacher);
  26. }
  27. @RequestMapping("findById")
  28. public Teacher findById(Integer id){
  29. return teacherService.findById(id);
  30. }
  31. @RequestMapping("findAll")
  32. public List<Major> findAll(){
  33. return majorMapper.selectList(null);
  34. }
  35. @RequestMapping("addTeacher")
  36. public Boolean addTeacher(@RequestBody Teacher teacher){
  37. return teacherService.addTeacher(teacher);
  38. }
  39. @RequestMapping("delById")
  40. public Boolean delById(Integer id){
  41. return teacherService.delById(id);
  42. }
  43. @RequestMapping("updateTeacher")
  44. public Boolean updateTeacher(@RequestBody Teacher teacher){
  45. return teacherService.updateTeacher(teacher);
  46. }
  47. }
2、service层
1、service接口层
  1. package cn.jiyun.service;
  2. import cn.jiyun.pojo.Teacher;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. public interface TeacherService {
  5. Page<Teacher> teacherList(int current, int size, Teacher teacher);
  6. Boolean addTeacher(Teacher teacher);
  7. Boolean updateTeacher(Teacher teacher);
  8. Teacher findById(Integer id);
  9. Boolean delById(Integer id);
  10. }
2、service实现类层
  1. package cn.jiyun.service.impl;
  2. import cn.jiyun.mapper.TeacherMapper;
  3. import cn.jiyun.pojo.Teacher;
  4. import cn.jiyun.service.TeacherService;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import javax.xml.ws.Action;
  9. @Service
  10. public class TeacherServiceImpl implements TeacherService {
  11. @Autowired
  12. private TeacherMapper teacherMapper;
  13. @Override
  14. public Page<Teacher> teacherList(int current, int size, Teacher teacher) {
  15. Page<Teacher> page = new Page<>(current, size);
  16. page=teacherMapper.teacherList(page,teacher);
  17. return page;
  18. }
  19. @Override
  20. public Boolean addTeacher(Teacher teacher) {
  21. teacherMapper.insert(teacher);
  22. return true;
  23. }
  24. @Override
  25. public Boolean updateTeacher(Teacher teacher) {
  26. teacherMapper.updateById(teacher);
  27. return true;
  28. }
  29. @Override
  30. public Teacher findById(Integer id) {
  31. Teacher teacher = teacherMapper.selectById(id);
  32. return teacher;
  33. }
  34. @Override
  35. public Boolean delById(Integer id) {
  36. teacherMapper.deleteById(id);
  37. return true;
  38. }
  39. }
3、mapper层
  1. package cn.jiyun.mapper;
  2. import cn.jiyun.pojo.Teacher;
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import org.apache.ibatis.annotations.Param;
  6. public interface TeacherMapper extends BaseMapper<Teacher> {
  7. Page<Teacher> teacherList(Page<Teacher> page,@Param("vo") Teacher teacher);
  8. }

6、编写mapper.xml文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="cn.jiyun.mapper.TeacherMapper">
  5. <select id="teacherList" resultType="cn.jiyun.pojo.Teacher">
  6. select t.*,m.name mname from teacher t join major m on m.id=t.mid
  7. <if test="vo.name!=null and vo.name!=''">
  8. and t.name like '%${vo.name}%'
  9. </if>
  10. </select>
  11. </mapper>

7、整体后端项目就是这样的

第三步:

搭建前端项目

前端项目搭建好之后,开始编写代码

1、首先我们要先用两个命令来下载axios和elelementUI

1、npm i element-ui
2、npm i axios

当上面两个命令执行之后,我们看package.json里面的内容(相当于后端项目的maven依赖),有了这两个就证明是下载成功了

3、成功之后我们需要在main.js中添加相应的包
import axios from 'axios'
//Vue对象使用axios
Vue.prototype.axios = axios;
//导入组件库
import ElementUI from 'element-ui'
//导入组件相关样式
import 'element-ui/lib/theme-chalk/index.css'
//配置Vue插件 将El安装到Vue上
Vue.use(ElementUI);

2、接下来我们编写相关的页面(展示所有+分页、添加、修改)

.vue页面中包含的是

<template></template> (前端代码)和 <script></script>(js代码)

我们之前写的普通项目中定义全局变量和方法是通过Vue对象来实现的,现在用了前后端fen'li'ji我们也有一种方式是通过 export default{}来实现

1、展示所有的前端代码
  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. page: {},
  6. pageParam: {
  7. current: 1,
  8. size: 4
  9. },
  10. requestParam: {},
  11. majorList:[],
  12. }
  13. },
  14. methods: {
  15. initData() {
  16. axios.post(`http://localhost:82/teacher/teacherList?current=${this.pageParam.current}&size=${this.pageParam.size}`, this.requestParam).then(res => {
  17. this.page = res.data;
  18. })
  19. },
  20. //当每页最大展示条数发生改变的时候执行-->
  21. handleSizeChange(val) {
  22. this.pageParam.size = val;
  23. this.initData();
  24. },
  25. handleCurrentChange(val) {
  26. this.pageParam.current = val;
  27. this.initData();
  28. },
  29. toAddPage(){
  30. this.$router.push("/add");
  31. },
  32. initMajorData(){
  33. axios.post(`http://localhost:82/teacher/findAll`).then(res => {
  34. this.majorList = res.data;
  35. })
  36. },
  37. handleEdit(id){
  38. this.$router.push({
  39. path: '/update',
  40. query:{id:id}
  41. })
  42. },
  43. handleDel(id){
  44. this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  45. confirmButtonText: '确定',
  46. cancelButtonText: '取消',
  47. type: 'warning'
  48. }).then(() => {
  49. axios.post("http://localhost:82/teacher/delById?id="+id).then(res=>{
  50. if(res.data){
  51. this.$message.success("成功")
  52. this.initData();
  53. }
  54. })
  55. }).catch(() => {
  56. this.$message({
  57. type: 'info',
  58. message: '已取消删除'
  59. });
  60. });
  61. }
  62. },
  63. created() {
  64. this.initData();
  65. this.initMajorData();
  66. }
  67. }
  68. import axios from "axios";
  69. </script>
  70. <template>
  71. <div>
  72. 姓名:
  73. <el-input v-model="requestParam.name" style="width: 200px" placeholder="请输入内容"></el-input>
  74. <el-button type="primary" size="mini" @click="initData">搜索</el-button>
  75. <el-button type="primary" size="mini" @click="toAddPage">添加</el-button>
  76. <el-table
  77. :data="page.records"
  78. stripe
  79. style="width: 100%">
  80. <el-table-column
  81. prop="id"
  82. label="编号">
  83. </el-table-column>
  84. <el-table-column
  85. prop="name"
  86. label="姓名">
  87. </el-table-column>
  88. <el-table-column
  89. prop="sex"
  90. label="性别">
  91. <!--template:模板 自定义展示内容-->
  92. <template slot-scope="scope">
  93. {{ scope.row.sex == 1 ? '男' : '女' }}
  94. </template>
  95. </el-table-column>
  96. <el-table-column
  97. prop="age"
  98. label="年龄">
  99. </el-table-column>
  100. <el-table-column
  101. prop="hobby"
  102. label="爱好">
  103. </el-table-column>
  104. <el-table-column
  105. prop="birthday"
  106. label="创建日期">
  107. <template slot-scope="scope">
  108. {{ scope.row.birthday|format('yyyy-MM-dd') }}
  109. </template>
  110. </el-table-column>
  111. <el-table-column
  112. prop="mname"
  113. label="专业">
  114. </el-table-column>
  115. <el-table-column label="操作">
  116. <template slot-scope="scope">
  117. <el-button
  118. size="mini"
  119. @click="handleEdit(scope.row.id)">编辑
  120. </el-button>
  121. <el-button
  122. type="danger"
  123. size="mini"
  124. @click="handleDel(scope.row.id)">删除
  125. </el-button>
  126. </template>
  127. </el-table-column>
  128. </el-table>
  129. <!--分页-->
  130. <el-pagination
  131. @size-change="handleSizeChange"
  132. @current-change="handleCurrentChange"
  133. :current-page="page.current"
  134. :page-sizes="[2, 200, 300, 400]"
  135. :page-size="page.size"
  136. layout="total, sizes, prev, pager, next, jumper"
  137. :total="page.total">
  138. </el-pagination>
  139. </div>
  140. </template>

(另外axios我是在show页面又导了包,所以在上面才能直接使用axios.post(),否则只能通过this.axios.post())

2、添加的前端代码
  1. <script>
  2. import axios from "axios";
  3. export default {
  4. data() {
  5. return {
  6. hobbyArr: [],
  7. majorList: [],
  8. form: {},
  9. formLabelWidth: "200px",
  10. dialogFormVisible: true,
  11. }
  12. },
  13. methods: {
  14. addTeacher() {
  15. this.form.hobby=this.hobbyArr.join(",");
  16. axios.post(`http://localhost:82/teacher/addTeacher`, this.form).then(res => {
  17. if (res.data) {
  18. this.$message.success("成功")
  19. this.dialogFormVisible = false;
  20. this.$router.push("/");
  21. }
  22. })
  23. },
  24. initMajorData() {
  25. axios.post(`http://localhost:82/teacher/findAll`).then(res => {
  26. this.majorList = res.data;
  27. })
  28. },
  29. quxiao(){
  30. this.dialogFormVisible=false;
  31. this.$router.push("/");
  32. }
  33. },
  34. created() {
  35. this.initMajorData();
  36. }
  37. }
  38. </script>
  39. <template>
  40. <div>
  41. <el-dialog title="添加" :visible.sync="dialogFormVisible" :show-close="false">
  42. <el-form :model="form">
  43. <el-form-item label="姓名" :label-width="formLabelWidth">
  44. <el-input v-model="form.name" autocomplete="off"></el-input>
  45. </el-form-item>
  46. <el-form-item label="年龄" :label-width="formLabelWidth">
  47. <el-input v-model="form.age" autocomplete="off"></el-input>
  48. </el-form-item>
  49. <el-form-item label="性别" :label-width="formLabelWidth">
  50. <el-radio-group v-model="form.sex">
  51. <el-radio :label="1"></el-radio>
  52. <el-radio :label="2"></el-radio>
  53. </el-radio-group>
  54. </el-form-item>
  55. <el-form-item label="爱好" :label-width="formLabelWidth">
  56. <el-checkbox-group v-model="hobbyArr">
  57. <el-checkbox label="篮球"></el-checkbox>
  58. <el-checkbox label="足球"></el-checkbox>
  59. <el-checkbox label="乒乓球"></el-checkbox>
  60. </el-checkbox-group>
  61. </el-form-item>
  62. <el-form-item label="生日" :label-width="formLabelWidth">
  63. <el-date-picker
  64. v-model="form.birthday"
  65. type="date"
  66. placeholder="日期">
  67. </el-date-picker>
  68. </el-form-item>
  69. <el-form-item label="专业" :label-width="formLabelWidth">
  70. <el-select v-model="form.mid" placeholder="请选择">
  71. <el-option
  72. v-for="item in majorList"
  73. :key="item.id"
  74. :label="item.name"
  75. :value="item.id">
  76. </el-option>
  77. </el-select>
  78. </el-form-item>
  79. </el-form>
  80. <el-button @click="quxiao()">取消</el-button>
  81. <el-button type="primary" @click="addTeacher">确 定</el-button>
  82. </el-dialog>
  83. </div>
  84. </template>
3、修改的前端代码
  1. <script>
  2. import axios from "axios";
  3. export default {
  4. data() {
  5. return {
  6. hobbyArr: [],
  7. majorList: [],
  8. form: {},
  9. formLabelWidth: "200px",
  10. dialogFormVisible: true,
  11. }
  12. },
  13. methods: {
  14. addTeacher() {
  15. this.form.hobby=this.hobbyArr.join(",");
  16. axios.post(`http://localhost:82/teacher/updateTeacher`, this.form).then(res => {
  17. if (res.data) {
  18. this.$message.success("成功")
  19. this.dialogFormVisible = false;
  20. this.$router.push("/");
  21. }
  22. })
  23. },
  24. quxiao(){
  25. this.dialogFormVisible=false;
  26. this.$router.push("/");
  27. },
  28. initMajorData() {
  29. axios.post(`http://localhost:82/teacher/findAll`).then(res => {
  30. this.majorList = res.data;
  31. })
  32. },
  33. findById(id) {
  34. this.form.hobby=this.hobbyArr.join(",");
  35. axios.post(`http://localhost:82/teacher/findById?id=`+id).then(res => {
  36. this.form = res.data;
  37. this.hobbyArr=this.form.hobby.split(",");
  38. })
  39. }
  40. },
  41. created() {
  42. // this.initData();
  43. var id = this.$route.query.id;
  44. this.initMajorData();
  45. this.findById(id);
  46. }
  47. }
  48. </script>
  49. <template>
  50. <div>
  51. <el-dialog title="修改" :visible.sync="dialogFormVisible" :show-close="false">
  52. <el-form :model="form">
  53. <el-form-item label="姓名" :label-width="formLabelWidth">
  54. <el-input v-model="form.name" autocomplete="off"></el-input>
  55. </el-form-item>
  56. <el-form-item label="年龄" :label-width="formLabelWidth">
  57. <el-input v-model="form.age" autocomplete="off"></el-input>
  58. </el-form-item>
  59. <el-form-item label="性别" :label-width="formLabelWidth">
  60. <el-radio-group v-model="form.sex">
  61. <el-radio :label="1"></el-radio>
  62. <el-radio :label="2"></el-radio>
  63. </el-radio-group>
  64. </el-form-item>
  65. <el-form-item label="爱好" :label-width="formLabelWidth">
  66. <el-checkbox-group v-model="hobbyArr">
  67. <el-checkbox label="篮球"></el-checkbox>
  68. <el-checkbox label="足球"></el-checkbox>
  69. <el-checkbox label="乒乓球"></el-checkbox>
  70. </el-checkbox-group>
  71. </el-form-item>
  72. <el-form-item label="生日" :label-width="formLabelWidth">
  73. <el-date-picker
  74. v-model="form.birthday"
  75. type="date"
  76. placeholder="日期">
  77. </el-date-picker>
  78. </el-form-item>
  79. <el-form-item label="专业" :label-width="formLabelWidth">
  80. <el-select v-model="form.mid" placeholder="请选择">
  81. <el-option
  82. v-for="item in majorList"
  83. :key="item.id"
  84. :label="item.name"
  85. :value="item.id">
  86. </el-option>
  87. </el-select>
  88. </el-form-item>
  89. </el-form>
  90. <el-button @click="quxiao">取消</el-button>
  91. <el-button type="primary" @click="addTeacher">确 定</el-button>
  92. </el-dialog>
  93. </div>
  94. </template>

添加和修改没啥区别,修改就是多了一个数据的回显,在show页面将id传递到update页面,然后axios向后台发送请求,返回一个对象,然后赋值给form表单,就完成了回显,需要特别注意的是hobby爱好是复选框,需要单独处理,以上代码中有处理方法

3、页面写好了,但是会不会跳转呢?以及如何解决?

答:不会的,因为我们前端项目主要是靠路由来实现的,我们到目前为止并没有配置路由

解决方案:
1、找到router包下的index.js
2、给文件中添加相应的路径以及改路径会跳转到的页面
  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import HomeView from '../views/HomeView.vue'
  4. import LoginView from '../views/LoginView.vue'
  5. import HelloView from '../views/HelloView.vue'
  6. import ShowView from '../views/ShowView.vue'
  7. import AddView from '../views/AddView.vue'
  8. import UpdateView from '../views/UpdateView.vue'
  9. Vue.use(VueRouter)
  10. const routes = [
  11. {
  12. path: '/home',
  13. name: 'home',
  14. component: HomeView
  15. },
  16. {
  17. path: '/update',
  18. name: 'update',
  19. component: UpdateView
  20. },
  21. {
  22. path: '/add',
  23. name: 'add',
  24. component: AddView
  25. },
  26. {
  27. path: '/login',
  28. name: 'login',
  29. component: LoginView
  30. },
  31. {
  32. path: '/',
  33. name: 'show',
  34. component: ShowView
  35. },
  36. {
  37. path: '/hello',
  38. name: 'hello',
  39. component: HelloView
  40. },
  41. {
  42. path: '/about',
  43. name: 'about',
  44. // route level code-splitting
  45. // this generates a separate chunk (about.[hash].js) for this route
  46. // which is lazy-loaded when the route is visited.
  47. component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  48. }
  49. ]
  50. const router = new VueRouter({
  51. routes
  52. })
  53. export default router

4、前端项目整体

(注意!!!前后端项目的端口号尽量不一样) 

前端项目额端口号默认是8080

第四步

 运行项目

1、运行前端项目

可以在idea上控制台通过npm run -serve,也可以点击package.json里面的

2、运行后端项目

点击启动类的三角

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/742862
推荐阅读
相关标签
  

闽ICP备14008679号