Vue案例—学生管理系统—html版(上篇)(二)

简介: Vue案例—学生管理系统—html版(上篇)

3.2 前端环境

3.2.1 拷贝静态资源


648fca9f067744c881b947957cd3026f.png

   js

f0747d113d7349d6b19cb9950ab61034.png

由于代码量较多,可去自行去vue官网下载。如已经有js中的文件,直接导入即可。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="cls/list.html">班级管理2</a><br/>
<a href="stu/list.html">学生管理2</a>
</body>
</html>

3.2.2 vs 打开资源

8eea422761514d998d4eb90a2db685a4.png


4 班级管理

4.1 JavaBean:Classes

f742bf66a8e24cef914419575b946bba.png

package com.czxy.domain;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name = "tb_class")  // “ ” 中填写数据库班级表名
@Data   //该注解作用: 自动生成构造和get/set方法
public class Classes {
    @Id
    @Column(name = "c_id")
    private String cid ;
    @Column(name = "c_name")
    private String cname ;
    @Column(name = "`desc`")
    private String desc ;
}


4.2 增删改查

4.2.1 后端

  • 编写Mapper

beaa2da007624e70841146ad69879d29.png

package com.czxy.mapper;
import com.czxy.domain.Classes;
import tk.mybatis.mapper.common.Mapper;
@org.apache.ibatis.annotations.Mapper
public interface ClassesMapper  extends Mapper<Classes> {
}
  • 编写service

1553e8cc40794bb68fda1e78d54d9b2d.png

  —— 接口 ClassesService 【一口气写完所有增删改查,接口方法】

package com.czxy.service;
import com.czxy.domain.Classes;
import java.util.List;
public interface ClassesService {
    //查询所有
    List<Classes> seleAll();
    //查询详情
    Classes selectById(String cid);
    //添加
    boolean add(Classes classes);
    //更新
    boolean update(Classes classes);
    //删除
    boolean delete(String cid);
}

—— 实现类 ClassesServiceImpl 【一口气写完所有增删改查,实现方法】

package com.czxy.service.impl;
import com.czxy.domain.Classes;
import com.czxy.mapper.ClassesMapper;
import com.czxy.service.ClassesService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional  //事务管理
public class ClassesServiceImpl implements ClassesService {
    @Resource
    private ClassesMapper classesMapper;
    //查询所有
    @Override
    public List<Classes> seleAll() {
        List<Classes> list = classesMapper.selectAll();
        return list;
    }
    //根据id查询
    @Override
    public Classes selectById(String cid) {
        Classes classes = classesMapper.selectByPrimaryKey(cid);
        return classes;
    }
    //添加
    @Override
    public boolean add(Classes classes) {
        int i = classesMapper.insert(classes);
        return i==1 ;
    }
    //修改
    @Override
    public boolean update(Classes classes) {
        int i = classesMapper.updateByPrimaryKey(classes);
        return i==1;
    }
    //删除
    @Override
    public boolean delete(String cid) {
        int i = classesMapper.deleteByPrimaryKey(cid);
        return i==1;
    }
}
  • 编写controller
  • 一口气在表现层,写完所有增删改查代码。采用Restful风格的写法

47fbca3256e64305bc4a19c316f0fa04.png

package com.czxy.controller;
import com.czxy.domain.Classes;
import com.czxy.service.ClassesService;
import com.czxy.vo.BaseResult;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/classes")
public class ClassesController {
    @Resource
    private ClassesService classesService ;
    //查询所有
    @GetMapping
    public BaseResult selectAll(){
        List<Classes> list = classesService.seleAll();
        return BaseResult.ok("查询所有",list);
    }
    //根据id查询
    @GetMapping("/{cid}")
    public BaseResult selectById(@PathVariable("cid") String cid){
        Classes classes = classesService.selectById(cid);
        return BaseResult.ok("查询详情",classes);
    }
    //添加
    @PostMapping
    public BaseResult add(@RequestBody Classes classes){
        try {
            boolean f = classesService.add(classes);
            if (f){
                return BaseResult.ok("添加成功");
            }
            return BaseResult.error("添加失败");
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResult.error(e.getMessage());
        }
    }
    //修改
    @PutMapping
    public BaseResult update(@RequestBody Classes classes){
        try {
            boolean f = classesService.update(classes);
            if (f){
                return BaseResult.ok("更新成功");
            }
            return BaseResult.error("更新失败");
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResult.error(e.getMessage());
        }
    }
    //删除
    @DeleteMapping("/{cid}")
    public BaseResult delete(@PathVariable("cid") String cid){
        try {
            boolean f = classesService.delete(cid);
            if (f){
                return BaseResult.ok("删除成功");
            }
            return BaseResult.error("删除失败");
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResult.error(e.getMessage());
        }
    }
}

60cc8f3f0d8948538ff264cd983a16f5.png

4.2.2 前端:axios+then

  • 编写页面、发送ajax、显示数据 【在静态资源包下编写页面】

55daf0096775406fac7fb6ebd8f55e06.png

4.2.2.1 查询所有 — list.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.js"></script>
    <script src="../js/axios.js"></script>
</head>
<body>
<div id="app">
    <table border="1">
        <tr>
            <td colspan="4" align="right">
                <a href="/cls/add.html">添加</a>
            </td>
        </tr>
        <tr>
            <td>编号</td>
            <td>班级名称</td>
            <td>班级描述</td>
            <td>操作</td>
        </tr>
        <!-- 循环遍历数据集合 -->        
        <tr v-for="(classes,index) in classesList">
            <td>{{classes.cid}}</td>
            <td>{{classes.cname}}</td>
            <td>{{classes.desc}}</td>
            <td>
                <a :href=" #">修改</a>
                <a href="#">删除</a>
            </td>
        </tr>
    </table>
</div>
</body>
</html>
<script>
    new Vue({
        el:'#app',  // 与div绑定挂载
        data:{      // 数据区域
            classesList:[]
        },
        methods:{    //方法函数-查询所有
             async selectAll(){   
                 let {data:baseResult} = await axios.get(`http://localhost:8080/classes`);
                 if(baseResult.code == 20000){
                     this.classesList = baseResult.data;
                 }
             },
        mounted(){  //页面加载完成时
           this.selectAll();
        }
    })
</script>

2692454c45384b94b9841785ea8e7c6c.png


—— 在swagger 查询地址步骤。【此次所涉及的地址路径,增删改查都和swagger上一致,以下操作,将不在对此进行解释】


692efcdaa92746b0b12d31bdab9ad4f3.png


相关文章
|
5月前
|
JavaScript 前端开发 开发者
Vue 动态添加 HTML 元素组件封装使用方法及长尾关键词优化指南
本文详细介绍了Vue中动态添加HTML元素的使用方法与组件封装技巧。内容涵盖条件渲染(v-if/v-show)、列表渲染(v-for)、动态组件(:is)、手动操作DOM及动态创建组件实例等核心方法。同时,通过动态表单、弹窗组件和动态加载组件的封装示例,展示如何提升代码复用性和可维护性。最后,总结性能优化策略与注意事项,如批量更新DOM、懒加载大型组件及避免直接操作DOM等,帮助开发者在实际项目中灵活应用Vue动态元素管理功能。
129 15
|
5月前
|
JavaScript 前端开发 开发者
Vue 动态添加 HTML 元素组件封装使用方法及长尾关键词优化指南
本文详细介绍了Vue中动态添加HTML元素的多种方法与组件封装技巧,涵盖条件渲染(v-if/v-show)、列表渲染(v-for)、动态组件(:is)、手动DOM操作及动态创建组件实例等内容。同时提供了性能优化建议,如批量更新DOM、使用v-show代替v-if以及懒加载大型组件等。通过合理封装组件,可提高代码复用性和维护性。文中还附有具体示例代码,帮助开发者更好地理解和应用相关技术。适用于前端开发人员学习和实践Vue动态元素处理与组件设计。
144 19
|
5月前
|
缓存 JavaScript 前端开发
Vue 项目中动态添加 HTML 元素的方法与实践
本文探讨了 Vue 中动态添加 HTML 元素的多种技术方案,包括条件渲染(v-if/v-show)、动态组件(component :is)、手动挂载($mount)及 Vuex 状态管理等方法。通过实例分析,如动态表单生成器与全局模态框服务,展示了这些方案在实际开发中的应用。同时提供了性能优化建议和注意事项,帮助开发者根据需求选择最佳方式,在保持 Vue 响应式特性的同时实现灵活交互。附带代码示例,便于理解和实践。
137 2
|
5月前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
461 17
|
12月前
|
JavaScript 前端开发 安全
vue -- 指令 -- v-text/html/on/show/if/bind/for/model
【10月更文挑战第17天】Vue 指令是构建 Vue 应用的基础工具,掌握它们的特性和用法是成为一名优秀 Vue 开发者的重要一步。通过深入理解和熟练运用这些指令,可以打造出更加出色的前端应用。
150 50
|
11月前
|
分布式计算 JavaScript 前端开发
vue学习第8章(vue的购物车案例)
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,正向全栈进发。本篇分享一个综合练习小demo,包括目录结构、HTML、JS及CSS代码,通过增删商品实现总价计算。关注我,获取更多前端知识!🎉🎉🎉
120 1
|
12月前
|
存储 缓存 JavaScript
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
152 2
|
JavaScript
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
70 1
|
JavaScript 前端开发 API
Vue2与Vue3插槽使用的区别及案例
Vue 3在插槽功能上的改进,体现了其对开发体验的持续优化。通过简化API、加强动态特性和提升性能,Vue 3使得插槽的使用更加灵活和高效。这些改进不仅有助于减轻开发者的负担,还为组件之间的高级交互和内容复用打开了新的可能性。随着Vue生态系统的不断成熟,我们有理由相信,Vue将继续为前端开发提供强大且易用的工具。
218 3
vue 计算属性,实现复选框的全选和反选 【小案例】
本文通过一个Vue.js小案例,展示了如何使用计算属性实现复选框的全选和反选功能。计算属性的完整写法包括get和set两部分,分别用于获取值和设置值。在全选和反选的场景中,计算属性的get方法用于判断所有复选框是否都已选中,从而控制全选复选框的状态;计算属性的set方法则用于根据全选复选框的状态,批量更新每个复选框的选中状态。通过示例代码和效果图,文章清晰地说明了计算属性在实现这一功能中的作用和效果。
vue 计算属性,实现复选框的全选和反选 【小案例】