SpringCloud整合SpringBoot-综合案例

1. 使用技术

1.1 后端

  • SpringCloud+SpringBoot+maven2+web+MySQL+xml+pagehelper+lombok+jwt+ras+BaseResult
  • Eureka 注册中心 + Eureka 客户端+Zuul网关 + 过滤器

1.2 前端

  • vue渐进式JavaScript框架

2. 需完成功能

2.1 功能1:用户登录

前端代码

api.js

/** ajax axios */
import axios from 'axios'
import { Message } from 'element-ui'

/** axios 基本项设置 */
axios.defaults.baseURL = 'http://localhost:10010/api'
axios.defaults.timeout = 3000

// 全局ajax错误处理
// axios.interceptors.response.use(response => {
//   return response
// }, error => {
//   Message.error(error.message)
//   return Promise.reject(error)
// })

/** 发送请求 */
export function login (user) {
  return axios.post('/userservice/user/login', user)
}
export function FindClassesForPageNum (ClassesPi) {
  return axios.get('/studentservice/classes/FindClassesForPageNum',{
    params:ClassesPi
  } )
}
export function Findteacher1list (t1) {
  return axios.get('/studentservice/classes/Findteacher1list/' +t1)
}
export function Findteacher2list (t2) {
  return axios.get('/studentservice/classes/Findteacher2list/' +t2)
}
export function Findteacher3list (t3) {
  return axios.get('/studentservice/classes/Findteacher3list/' + t3)
}
export function addClasses (classes) {
  return axios.post('/studentservice/classes/addClasses', classes)
}
export function DeleteClassesByCid (ids) {
  return axios.delete('/studentservice/classes/DeleteClassesByCid/' + ids)
}
export function FindByClassesByCid (cid) {
  return axios.get('/studentservice/classes/FindByClassesByCid/' + cid)
}
export function UpdateClasses (classes) {
  return axios.put('/studentservice/classes/UpdateClasses', classes)
}
export function FindStudentListForPageNum (studentPi) {
  return axios.get('/studentservice/student/FindStudentListForPageNum', {
    params:studentPi
  })
}
export function Findclasses () {
  return axios.get('/studentservice/student/Findclasses')
}
export function addStudent (student) {
  return axios.post('/studentservice/student/addStudent', student)
}
export function deleteStudentBysid (ids) {
  return axios.delete('/studentservice/student/deleteStudentBysid/'+ids)
}
export function FindStudent (sid) {
  return axios.get('/studentservice/student/FindStudent/'+sid)
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<template>
  <div class="login">
      <el-card class="login-box-card">
  <div slot="header" class="clearfix">
    <el-button type="text" icon="el-icon-s-home">综合案例</el-button>
  </div>
  <div>
  <el-form ref="loginFrom" :model="LoginUser" label-width="80px">
 <el-form-item label="用户名">
    <el-input v-model="LoginUser.user_name"></el-input>
  </el-form-item>
   <el-form-item label="密码">
    <el-input show-password v-model="LoginUser.password"></el-input>
  </el-form-item>
    <el-form-item>
    <el-button type="primary" @click="login">登录</el-button>
  </el-form-item>
  </el-form>
  </div>
</el-card>
  </div>
</template>

<script>
import { login } from '../api'
export default {
  data() {
      return {
          LoginUser: {},
          errorMsg:''
      }
  },
  methods: {
      async login() {
        let { data } = await login(this.LoginUser)
        if(data.code == 1){
          this.$message.success(data.message)
          this.$router.push('/home')
        }else{
          this.$message.error(data.message)
        }
      }
  },
}
</script>

<style>
.login-box-card {
    width: 480px;
  }
   .login {
        height: 100%;
        display: flex;              /* css3 新取值,允许居中 */
        align-items: center;        /* 上下居中*/
        justify-content: center;   /* 左右居中 */
    }
</style>

后端代码

在这里插入图片描述

  • pom依赖
    <dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--通用mapper起步依赖-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>
        <!--MySQL数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.czxy.cloud</groupId>
            <artifactId>Exam_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
  • application.yml文件
server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cloud_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 947411
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka/
  • UserApplication启动类
package com.czxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@EnableEurekaClient
@MapperScan(basePackages = "com.czxy.mapper")
public class UserApplicatioon {
    public static void main(String[] args) {
        SpringApplication.run(UserApplicatioon.class,args);
    }
}

  • domain对象类
package com.czxy.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "tb_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @Id
    private Integer id;
    private String user_name;
    private String password;
}
  • mapper 通用mapper类
package com.czxy.mapper;

import com.czxy.domain.User;
import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper<User> {
}

  • service
package com.czxy.service;

import com.czxy.domain.User;

public interface UserService {
    /**
     * 登录用户
     * @param user
     * @return
     */
    User login(User user);
}
package com.czxy.service.impl;

import com.czxy.domain.User;
import com.czxy.mapper.UserMapper;
import com.czxy.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;

@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;
    /**
     * 登录用户
     * @param user
     * @return
     */
    @Override
    public User login(User user) {
        Example example = new Example(User.class);
        Example.Criteria c = example.createCriteria();
        c.andEqualTo("user_name",user.getUser_name());
        c.andEqualTo("password",user.getPassword());
        User bean = userMapper.selectOneByExample(example);
        if (bean==null){
            return null;
        }
        return bean;
    }
}

  • controller 控制类
package com.czxy.controller;

import com.czxy.domain.User;
import com.czxy.service.UserService;
import com.czxy.vo.BaseResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/user")
public class UserController {
    // private static final  String priKeyPath = "D:\\ras\\ras.pri";
    @Resource
    private UserService userService;

    /**
     * 登录用户
     * @param user
     * @return
     */
    @PostMapping("/login")
    public BaseResult login(@RequestBody User user){
            //如果登录成功,将数据存入私钥中
            User loginUser = userService.login(user);
            if (loginUser!=null){
                // String token = JwtUtils.generateToken(loginUser, 60 * 5, RasUtils.getPrivateKey(priKeyPath));
                return BaseResult.ok("登录成功",loginUser);
            }else{
                return BaseResult.error("用户名或密码错误");
            }
        }
}

2.2 功能2:布局

在这里插入图片描述

<template>
  <div>
<el-container>
  <el-header>综合案例</el-header>
  <el-container>
    <el-aside width="200px">
      <el-menu default-active="2" class="el-menu-vertical-demo" router>
        <el-submenu index="1_">
          <template slot="title">
          <i class="el-icon-location"></i>
          <span>班级管理</span>
        </template>
        <el-menu-item-group>
          <el-menu-item index="/addClasses">添加班级</el-menu-item>
          <el-menu-item index="/classesList">班级列表</el-menu-item>
        </el-menu-item-group>
        </el-submenu>
         <el-submenu index="2_">
          <template slot="title">
          <i class="el-icon-location"></i>
          <span>学生管理</span>
        </template>
        <el-menu-item-group>
          <el-menu-item index="/addStudent">添加学生</el-menu-item>
          <el-menu-item index="/studentList">学生列表</el-menu-item>
        </el-menu-item-group>
        </el-submenu>
      </el-menu>
    </el-aside>
    <el-main>
      <router-view></router-view>
    </el-main>
  </el-container>
</el-container>
  </div>
</template>

<script>
export default {

}
</script>

<style>
  .el-header, .el-footer {
    background-color: #B3C0D1;
    color: #333;
    text-align: center;
    line-height: 60px;
  }
</style>

2.3 功能3:添加班级

在这里插入图片描述

前端代码

<template>
  <div>
      <el-breadcrumb separator="/">
  <el-breadcrumb-item :to="{ path: '/classesList' }">首页</el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/">班级管理</a></el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/addClasses">添加班级</a></el-breadcrumb-item>
</el-breadcrumb>
<br/>
<div>
    <el-card class="classes-box-card">
  <div>
      <el-form ref="classesFrom" :model="classes" label-width="100px">
        <el-form-item label="班级名称">
            <el-input v-model="classes.cname"></el-input>
        </el-form-item>
        <el-form-item label="授课老师">
            <el-select v-model="classes.teacher1_id" placeholder="请选择授课老师">
                <el-option v-for="(t1, index1) in teacher1list" :key="index1" :value="t1.tid" :label="t1.tname"></el-option>
             </el-select>
        </el-form-item>
        <el-form-item label="助理老师">
            <el-select v-model="classes.teacher2_id" placeholder="请选择助理老师">
                <el-option v-for="(t2, index2) in teacher2list" :key="index2" :value="t2.tid" :label="t2.tname"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="辅导员老师">
            <el-select v-model="classes.teacher3_id" placeholder="请选择辅导员老师">
                <el-option v-for="(t3, index3) in teacher3list" :key="index3" :value="t3.tid" :label="t3.tname"></el-option>
             </el-select>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click="addClasses">添加班级</el-button>
        </el-form-item>
            
      </el-form>
  </div>
</el-card>
</div>
  </div>
</template>

<script>
import { Findteacher1list, Findteacher2list, Findteacher3list, addClasses} from '../../api'
import { async } from 'q'
export default {
data() {
    return {
        classes: {},
        teacher1list:[],
        teacher2list:[],
        teacher3list:[],
        t1:1,
        t2:2,
        t3:3
    }

},
created() {
    this.Findteacher1list()
    this.Findteacher2list()
    this.Findteacher3list()
},
 methods: {
     async Findteacher1list() {
       let { data } = await Findteacher1list(this.t1)
       this.teacher1list = data.data
     },
      async Findteacher2list() {
       let { data } = await Findteacher2list(this.t2)
       this.teacher2list = data.data
     },
      async Findteacher3list() {
       let { data } = await Findteacher3list(this.t3)
       this.teacher3list = data.data
     },
     async addClasses() {
       let { data } = await addClasses(this.classes)
       if (data.code == 1) {
           this.$message.success(data.message)
           this.$router.push('/classesList')
       }
     }
 },
}
</script>

<style>
 .classes-box-card {
    width: 480px;
  }
</style>

后端代码

在这里插入图片描述

  • domain 对象类
package com.czxy.domain;

import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@Table(name = "tb_class")
public class Classes implements Serializable {
    @Id
    private Integer cid;
    private String cname;
    private Integer teacher1_id;
    private Teacher teacher1;
    private Integer teacher2_id;
    private Teacher teacher2;
    private Integer teacher3_id;
    private Teacher teacher3;


    @Override
    public String toString() {
        return "Classes{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                ", teacher1_id=" + teacher1_id +
                ", teacher1=" + teacher1 +
                ", teacher2_id=" + teacher2_id +
                ", teacher2=" + teacher2 +
                ", teacher3_id=" + teacher3_id +
                ", teacher3=" + teacher3 +
                '}';
    }

    public Classes() {
    }

    public Integer getCid() {

        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Integer getTeacher1_id() {
        return teacher1_id;
    }

    public void setTeacher1_id(Integer teacher1_id) {
        this.teacher1_id = teacher1_id;
    }

    public Teacher getTeacher1() {
        return teacher1;
    }

    public void setTeacher1(Teacher teacher1) {
        this.teacher1 = teacher1;
    }

    public Integer getTeacher2_id() {
        return teacher2_id;
    }

    public void setTeacher2_id(Integer teacher2_id) {
        this.teacher2_id = teacher2_id;
    }

    public Teacher getTeacher2() {
        return teacher2;
    }

    public void setTeacher2(Teacher teacher2) {
        this.teacher2 = teacher2;
    }

    public Integer getTeacher3_id() {
        return teacher3_id;
    }

    public void setTeacher3_id(Integer teacher3_id) {
        this.teacher3_id = teacher3_id;
    }

    public Teacher getTeacher3() {
        return teacher3;
    }

    public void setTeacher3(Teacher teacher3) {
        this.teacher3 = teacher3;
    }
}

package com.czxy.domain;

import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@Table(name = "tb_teacher")

public class Teacher implements Serializable{
    @Id
    private Integer tid;
    private String tname;
    private Integer type;

    @Override
    public String toString() {
        return "Teacher{" +
                "tid=" + tid +
                ", tname='" + tname + '\'' +
                ", type=" + type +
                '}';
    }

    public Integer getTid() {
        return tid;
    }

    public void setTid(Integer tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Teacher(Integer tid, String tname, Integer type) {

        this.tid = tid;
        this.tname = tname;
        this.type = type;
    }

    public Teacher() {

    }
}

  • mapper 配置类
package com.czxy.mapper;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import org.apache.ibatis.annotations.*;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

public interface ClassesMapper extends Mapper<Classes> {}

package com.czxy.mapper;

import com.czxy.domain.Teacher;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

public interface TeacherMapper extends Mapper<Teacher> {}
  • service和serviceImpl
package com.czxy.service;
import com.czxy.domain.Classes;

public interface ClassesService {
  /**
    * 添加班级
    * @param classes
    * @return
    */
   void addClasses(Classes classes);}

package com.czxy.service.impl;
import com.czxy.domain.Classes;
import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;
import com.czxy.service.ClassesService;
import javax.annotation.Resource;
@Service
@Transactional
public class ClassesServiceImpl implements ClassesService {
    @Resource
    private ClassesMapper classesMapper;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;

    /**
     * 添加班级
     * @param classes
     * @return
     */
    @PostMapping("/addClasses")
    public BaseResult addClasses(@RequestBody Classes classes){
        classesService.addClasses(classes);
        return BaseResult.ok("添加成功");
    }
}
  • controller 控制器
package com.czxy.controller;
import com.czxy.domain.Classes;
import javax.annotation.Resource;
@RestController
@RequestMapping("/classes")
public class ClassesController {
    @Resource
    private ClassesService classesService;
    /**
     * 添加班级
     * @param classes
     * @return
     */
    @PostMapping("/addClasses")
    public BaseResult addClasses(@RequestBody Classes classes){
        classesService.addClasses(classes);
        return BaseResult.ok("添加成功");
    }

2.4 功能4:班级列表(基本列表 + 分页 + 条件)

在这里插入图片描述

前端代码

<template>
 <div>
    <el-breadcrumb separator="/">
  <el-breadcrumb-item :to="{ path: '/classesList' }">首页</el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/">班级管理</a></el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/classList">班级列表</a></el-breadcrumb-item>
</el-breadcrumb>
<br/>
   <el-card class="box-card">
  <div>
 <div slot="header" >
          <el-form :inline="true" :model="ClassesPi" size="mini" class="demo-form-inline">
            <el-form-item label="班级名称">
              <el-input v-model="ClassesPi.cname" clearable placeholder="请输入班级名称"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="FindClassesForPageNum">查询</el-button>
            </el-form-item>
          </el-form>
    </div>
    <el-table :data="pageinfo.list" ref="classesTable" style="width: 100%" @>
    <el-table-column type="selection" width="55"></el-table-column>
      <el-table-column prop="cname" label="班级名称" ></el-table-column>
    <el-table-column label="授课老师名称">
         <template slot-scope="scope">{{ scope.row.teacher1.tname }}</template>
    </el-table-column>
    <el-table-column label="助理老师名称" >
         <template slot-scope="scope">{{ scope.row.teacher2.tname }}</template>
    </el-table-column>
    <el-table-column label="辅导员老师名称" >
         <template slot-scope="scope">{{ scope.row.teacher3.tname }}</template>
    </el-table-column>
    <el-table-column fixed="right" label="操作" prop="cid">
      <template slot-scope="scope">
        <el-button @click="FindByClassesByCid(scope.row.cid)" type="primary" plain icon="el-icon-edit" size="small">编辑</el-button>
      </template>
    </el-table-column>
  </el-table> 
  <el-table-column>
 <el-button @click="DeleteClassesByCidFn" type="danger"  icon="el-icon-delete" >批量删除</el-button>
 </el-table-column>
   <div align="center">
<el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="pageinfo.pageNum"
      :page-sizes="[2, 3, 5, 10]"
      :page-size="pageinfo.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pageinfo.total">
    </el-pagination>
  </div>
  </div>
</el-card>
 </div>
</template>
<script>
import { FindClassesForPageNum } from '../../api'
export default {
data() {
    return {
        pageinfo:{},
        ClassesPi:{
          pageNum:1,
          pageSize:2,
          cname:'',
        }
    }
},
created() {
  this.FindClassesForPageNum()  
},
methods: {
    async FindClassesForPageNum() {
        let { data } = await FindClassesForPageNum(this.ClassesPi)
        if(data.code == 1){
            this.pageinfo = data.data
        }
    },
      handleSizeChange(val) {
        this.ClassesPi.pageSize = 1
        this.ClassesPi.pageSize = val
        this.FindClassesForPageNum()
      },
      handleCurrentChange(val) {
        this.ClassesPi.pageNum = val
        this.FindClassesForPageNum()
      }
    }
      
}

</script>

<style>

</style>

后端代码

  • controller 控制器
package com.czxy.controller;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import com.czxy.service.ClassesService;
import com.czxy.vo.BaseResult;
import com.github.pagehelper.PageInfo;


import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/classes")
public class ClassesController {
    @Resource
    private ClassesService classesService;

    /**
     * 添加班级
     * @param classes
     * @return
     */
    @PostMapping("/addClasses")
    public BaseResult addClasses(@RequestBody Classes classes){
        classesService.addClasses(classes);
        return BaseResult.ok("添加成功");
    }
    
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @return
     */
    @GetMapping("/FindClassesForPageNum")
    public BaseResult FindClassesForPageNum( ClassesPi classesPi){
     PageInfo<Classes> pi =  classesService.FindClassesForPageNum(classesPi);
        for (Classes classes : pi.getList()) {
            System.out.println(classes.toString());
        }
     return BaseResult.ok("查询成功",pi);
    }
}

  • service 和 serviceImpl
package com.czxy.service;

        import com.czxy.domain.Classes;
        import com.czxy.domain.ClassesPi;
        import com.github.pagehelper.PageInfo;
        import java.util.List;

public interface ClassesService {
    /**
     * 添加班级
     * @param classes
     * @return
     */
    void addClasses(Classes classes);
        /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    PageInfo<Classes> FindClassesForPageNum(ClassesPi classesPi);
}

  • mapper 配置类
package com.czxy.mapper;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import org.apache.ibatis.annotations.*;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

public interface ClassesMapper extends Mapper<Classes> {
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    @Select(" <script> select * from tb_class where 1=1 "+
    " <if test = \" classesPi.cname != null and classesPi.cname != '' \"> and cname like #{classesPi.cname} </if> "+
    "</script>")
    @Results(id = "c1",value = {
            @Result(property = "cid",column = "cid"),
            @Result(property = "cname",column = "cname"),
            @Result(property = "teacher1_id",column = "teacher1_id"),
            @Result(property = "teacher2_id",column = "teacher2_id"),
            @Result(property = "teacher3_id",column = "teacher3_id"),
            @Result(property = "teacher1",column = "teacher1_id",one = @One(select = "com.czxy.mapper.TeacherMapper.selectByID")),
            @Result(property = "teacher2",column = "teacher2_id",one = @One(select = "com.czxy.mapper.TeacherMapper.selectByID")),
            @Result(property = "teacher3",column = "teacher3_id",one = @One(select = "com.czxy.mapper.TeacherMapper.selectByID"))
    })
    List<Classes> FindClassesForPageNum(@Param("classesPi") ClassesPi classesPi);

}

2.5 功能5:批量删除班级

在这里插入图片描述

前段代码

<template>
 <div>
    <el-breadcrumb separator="/">
  <el-breadcrumb-item :to="{ path: '/classesList' }">首页</el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/">班级管理</a></el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/classList">班级列表</a></el-breadcrumb-item>
</el-breadcrumb>
<br/>
   <el-card class="box-card">
  <div>
 <div slot="header" >
          <el-form :inline="true" :model="ClassesPi" size="mini" class="demo-form-inline">
            <el-form-item label="班级名称">
              <el-input v-model="ClassesPi.cname" clearable placeholder="请输入班级名称"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="FindClassesForPageNum">查询</el-button>
            </el-form-item>
          </el-form>
    </div>
    <el-table :data="pageinfo.list" ref="classesTable" style="width: 100%" @>
    <el-table-column type="selection" width="55"></el-table-column>
      <el-table-column prop="cname" label="班级名称" ></el-table-column>
    <el-table-column label="授课老师名称">
         <template slot-scope="scope">{{ scope.row.teacher1.tname }}</template>
    </el-table-column>
    <el-table-column label="助理老师名称" >
         <template slot-scope="scope">{{ scope.row.teacher2.tname }}</template>
    </el-table-column>
    <el-table-column label="辅导员老师名称" >
         <template slot-scope="scope">{{ scope.row.teacher3.tname }}</template>
    </el-table-column>
    <el-table-column fixed="right" label="操作" prop="cid">
      <template slot-scope="scope">
        <el-button @click="FindByClassesByCid(scope.row.cid)" type="primary" plain icon="el-icon-edit" size="small">编辑</el-button>
      </template>
    </el-table-column>
  </el-table> 
  <el-table-column>
 <el-button @click="DeleteClassesByCidFn" type="danger"  icon="el-icon-delete" >批量删除</el-button>
 </el-table-column>
   <div align="center">
<el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="pageinfo.pageNum"
      :page-sizes="[2, 3, 5, 10]"
      :page-size="pageinfo.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pageinfo.total">
    </el-pagination>
    <!-- 修改start -->
    <el-dialog
  title="修改班级"
  :visible.sync="dialogVisible"
  width="50%"
  :before-close="handleClose">
   <el-form ref="classesFrom" :model="classes" label-width="100px">
        <el-form-item label="班级名称">
            <el-input v-model="classes.cname"></el-input>
        </el-form-item>
        <el-form-item label="授课老师">
            <el-select v-model="classes.teacher1_id" placeholder="请选择授课老师">
                <el-option v-for="(t1, index1) in teacher1list" :key="index1" :value="t1.tid" :label="t1.tname"></el-option>
             </el-select>
        </el-form-item>
        <el-form-item label="助理老师">
            <el-select v-model="classes.teacher2_id" placeholder="请选择助理老师">
                <el-option v-for="(t2, index2) in teacher2list" :key="index2" :value="t2.tid" :label="t2.tname"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="辅导员老师">
            <el-select v-model="classes.teacher3_id" placeholder="请选择辅导员老师">
                <el-option v-for="(t3, index3) in teacher3list" :key="index3" :value="t3.tid" :label="t3.tname"></el-option>
             </el-select>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click.prevent="UpdateClasses">修改班级</el-button>
        </el-form-item>
      </el-form>
</el-dialog>
     <!-- 修改end -->
  </div>
  </div>
</el-card>
 </div>
</template>
<script>
import { FindClassesForPageNum,DeleteClassesByCid } from '../../api'
export default {
data() {
    return {
        pageinfo:{},
        ClassesPi:{
          pageNum:1,
          pageSize:2,
          cname:'',
        },
        ids:[],
    }
},
created() {
  this.FindClassesForPageNum()  
},
methods: {
    async FindClassesForPageNum() {
        let { data } = await FindClassesForPageNum(this.ClassesPi)
        if(data.code == 1){
            this.pageinfo = data.data
        }
    },
      handleSizeChange(val) {
        this.ClassesPi.pageSize = 1
        this.ClassesPi.pageSize = val
        this.FindClassesForPageNum()
      },
      handleCurrentChange(val) {
        this.ClassesPi.pageNum = val
        this.FindClassesForPageNum()
      },
       handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      },
       DeleteClassesByCidFn(){
        this.ids = this.$refs.classesTable.selection.map(item => item.cid).join(',')
       this.$confirm('确定要删除吗', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(async() => {
        let { data } = await DeleteClassesByCid(this.ids)
              if (data.code == 1) {
                this.$message.success(data.message)
                this.ClassesPi.pageNum=1
                this.FindClassesForPageNum()
              }
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          })      
        })
      }
      
}

</script>

<style>

</style>

后端代码

  • controller
package com.czxy.controller;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import com.czxy.service.ClassesService;
import com.czxy.vo.BaseResult;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/classes")
public class ClassesController {
    @Resource
    private ClassesService classesService;

    /**
     * 查询班级列表(分页+条件)
     * @param
     * @return
     */
    @GetMapping("/FindClassesForPageNum")
    public BaseResult FindClassesForPageNum( ClassesPi classesPi){
     PageInfo<Classes> pi =  classesService.FindClassesForPageNum(classesPi);
        for (Classes classes : pi.getList()) {
            System.out.println(classes.toString());
        }
     return BaseResult.ok("查询成功",pi);
    }
    /**
     * 添加班级
     * @param classes
     * @return
     */
    @PostMapping("/addClasses")
    public BaseResult addClasses(@RequestBody Classes classes){
        classesService.addClasses(classes);
        return BaseResult.ok("添加成功");
    }

    /**
     * 批量删除数据
     * @param ids
     * @return
     */
    @DeleteMapping("/DeleteClassesByCid/{ids}")
    public BaseResult DeleteClassesByCid(@PathVariable("ids")String ids){
        classesService.DeleteClassesByCid(ids);
        return BaseResult.ok("删除成功");
    }


}

  • service
package com.czxy.service;

        import com.czxy.domain.Classes;
        import com.czxy.domain.ClassesPi;
        import com.github.pagehelper.PageInfo;

        import java.util.List;

public interface ClassesService {
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    PageInfo<Classes> FindClassesForPageNum(ClassesPi classesPi);
    /**
     * 添加班级
     * @param classes
     * @return
     */
    void addClasses(Classes classes);
    /**
     * 批量删除数据
     * @param ids
     * @return
     */
    void DeleteClassesByCid(String ids);
 
}

  • serviceImpl
package com.czxy.service.impl;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;
import com.czxy.service.ClassesService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    @Override
    public PageInfo<Classes> FindClassesForPageNum(ClassesPi classesPi) {
        PageHelper.startPage(classesPi.getPageNum(),classesPi.getPageSize());
        if (classesPi.getCname()!=null && !"" .equals(classesPi.getCname())){
            classesPi.setCname("%"+classesPi.getCname()+"%");
        }
        List<Classes> clist =  classesMapper.FindClassesForPageNum(classesPi);

        PageInfo<Classes> classesPageInfo = new PageInfo<>(clist);
        return classesPageInfo;
    }
    /**
     * 添加班级
     * @param classes
     * @return
     */
    @Override
    public void addClasses(Classes classes) {
        classesMapper.insertSelective(classes);
    }
    /**
     * 批量删除数据
     * @param ids
     * @return
     */
    @Override
    public void DeleteClassesByCid(String ids) {
        String[] split = ids.split(",");
        for (String s : split) {
            classesMapper.deleteByPrimaryKey(Integer.parseInt(s));
        }
    }
}

2.6 功能6:修改班级

在这里插入图片描述

前段代码

<template>
 <div>
    <el-breadcrumb separator="/">
  <el-breadcrumb-item :to="{ path: '/classesList' }">首页</el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/">班级管理</a></el-breadcrumb-item>
  <el-breadcrumb-item ><a href="/classList">班级列表</a></el-breadcrumb-item>
</el-breadcrumb>
<br/>
   <el-card class="box-card">
  <div>
 <div slot="header" >
          <el-form :inline="true" :model="ClassesPi" size="mini" class="demo-form-inline">
            <el-form-item label="班级名称">
              <el-input v-model="ClassesPi.cname" clearable placeholder="请输入班级名称"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="FindClassesForPageNum">查询</el-button>
            </el-form-item>
          </el-form>
    </div>
    <el-table :data="pageinfo.list" ref="classesTable" style="width: 100%" @>
    <el-table-column type="selection" width="55"></el-table-column>
      <el-table-column prop="cname" label="班级名称" ></el-table-column>
    <el-table-column label="授课老师名称">
         <template slot-scope="scope">{{ scope.row.teacher1.tname }}</template>
    </el-table-column>
    <el-table-column label="助理老师名称" >
         <template slot-scope="scope">{{ scope.row.teacher2.tname }}</template>
    </el-table-column>
    <el-table-column label="辅导员老师名称" >
         <template slot-scope="scope">{{ scope.row.teacher3.tname }}</template>
    </el-table-column>
    <el-table-column fixed="right" label="操作" prop="cid">
      <template slot-scope="scope">
        <el-button @click="FindByClassesByCid(scope.row.cid)" type="primary" plain icon="el-icon-edit" size="small">编辑</el-button>
      </template>
    </el-table-column>
  </el-table> 
  <el-table-column>
 <el-button @click="DeleteClassesByCidFn" type="danger"  icon="el-icon-delete" >批量删除</el-button>
 </el-table-column>
   <div align="center">
<el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="pageinfo.pageNum"
      :page-sizes="[2, 3, 5, 10]"
      :page-size="pageinfo.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pageinfo.total">
    </el-pagination>
    <!-- 修改start -->
    <el-dialog
  title="修改班级"
  :visible.sync="dialogVisible"
  width="50%"
  :before-close="handleClose">
   <el-form ref="classesFrom" :model="classes" label-width="100px">
        <el-form-item label="班级名称">
            <el-input v-model="classes.cname"></el-input>
        </el-form-item>
        <el-form-item label="授课老师">
            <el-select v-model="classes.teacher1_id" placeholder="请选择授课老师">
                <el-option v-for="(t1, index1) in teacher1list" :key="index1" :value="t1.tid" :label="t1.tname"></el-option>
             </el-select>
        </el-form-item>
        <el-form-item label="助理老师">
            <el-select v-model="classes.teacher2_id" placeholder="请选择助理老师">
                <el-option v-for="(t2, index2) in teacher2list" :key="index2" :value="t2.tid" :label="t2.tname"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="辅导员老师">
            <el-select v-model="classes.teacher3_id" placeholder="请选择辅导员老师">
                <el-option v-for="(t3, index3) in teacher3list" :key="index3" :value="t3.tid" :label="t3.tname"></el-option>
             </el-select>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click.prevent="UpdateClasses">修改班级</el-button>
        </el-form-item>
      </el-form>
</el-dialog>
     <!-- 修改end -->
  </div>
  </div>
</el-card>
 </div>
</template>
<script>
import { FindClassesForPageNum, UpdateClasses,DeleteClassesByCid, FindByClassesByCid,Findteacher1list, Findteacher2list, Findteacher3list,} from '../../api'
export default {
data() {
    return {
        pageinfo:{},
        ClassesPi:{
          pageNum:1,
          pageSize:2,
          cname:'',
        },
        ids:[],
        classes:{},
        dialogVisible: false,
        teacher1list:[],
        teacher2list:[],
        teacher3list:[],
        t1:1,
        t2:2,
        t3:3
    }
},
created() {
  this.FindClassesForPageNum()  
},
methods: {
    async FindClassesForPageNum() {
        let { data } = await FindClassesForPageNum(this.ClassesPi)
        if(data.code == 1){
            this.pageinfo = data.data
        }
    },
      handleSizeChange(val) {
        this.ClassesPi.pageSize = 1
        this.ClassesPi.pageSize = val
        this.FindClassesForPageNum()
      },
      handleCurrentChange(val) {
        this.ClassesPi.pageNum = val
        this.FindClassesForPageNum()
      },
       handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      },
       DeleteClassesByCidFn(){
        this.ids = this.$refs.classesTable.selection.map(item => item.cid).join(',')
       this.$confirm('确定要删除吗', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(async() => {
        let { data } = await DeleteClassesByCid(this.ids)
              if (data.code == 1) {
                this.$message.success(data.message)
                this.ClassesPi.pageNum=1
                this.FindClassesForPageNum()
              }
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          })      
        })
      },
      async FindByClassesByCid(cid){
        this.dialogVisible = true
      let { data: baserest1 } = await Findteacher1list(this.t1)
            this.teacher1list = baserest1.data

      let { data: baserest2 } = await Findteacher2list(this.t2)
       this.teacher2list = baserest2.data

      let { data:baserest3 } = await Findteacher3list(this.t3)
       this.teacher3list = baserest3.data


        let { data } = await FindByClassesByCid(cid) 
        if (data.code == 1 ) {
          this.classes = data.data
        }
      }
}

</script>

<style>

</style>

后端代码

  • controller
package com.czxy.controller;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import com.czxy.domain.Teacher;
import com.czxy.service.ClassesService;
import com.czxy.vo.BaseResult;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/classes")
public class ClassesController {
    @Resource
    private ClassesService classesService;

    /**
     * 查询班级列表(分页+条件)
     * @param
     * @return
     */
    @GetMapping("/FindClassesForPageNum")
    public BaseResult FindClassesForPageNum( ClassesPi classesPi){
     PageInfo<Classes> pi =  classesService.FindClassesForPageNum(classesPi);
        for (Classes classes : pi.getList()) {
            System.out.println(classes.toString());
        }
     return BaseResult.ok("查询成功",pi);
    }

    /**
     * 查询授课老师信息
     * @param tid
     * @return
     */
    @GetMapping("/Findteacher1list/{t1}")
    public BaseResult Findteacher1list(@PathVariable("t1")Integer tid){
       List<Teacher> tlist =  classesService.Findteacher1list(tid);
        System.out.println(tlist);
       return BaseResult.ok("查询成功",tlist);
    }
    /**
     * 查询助理老师信息
     * @param tid
     * @return
     */
    @GetMapping("/Findteacher2list/{t2}")
    public BaseResult Findteacher2list(@PathVariable("t2")Integer tid){
        List<Teacher> tlist =  classesService.Findteacher2list(tid);
        System.out.println(tlist);
        return BaseResult.ok("查询成功",tlist);
    }
    /**
     * 查询辅导员老师老师信息
     * @param tid
     * @return
     */
    @GetMapping("/Findteacher3list/{t3}")
    public BaseResult Findteacher3list(@PathVariable("t3")Integer tid){
        List<Teacher> tlist =  classesService.Findteacher3list(tid);
        System.out.println(tlist);
        return BaseResult.ok("查询成功",tlist);
    }

    /**
     * 添加班级
     * @param classes
     * @return
     */
    @PostMapping("/addClasses")
    public BaseResult addClasses(@RequestBody Classes classes){
        classesService.addClasses(classes);
        return BaseResult.ok("添加成功");
    }

    /**
     * 批量删除数据
     * @param ids
     * @return
     */
    @DeleteMapping("/DeleteClassesByCid/{ids}")
    public BaseResult DeleteClassesByCid(@PathVariable("ids")String ids){
        classesService.DeleteClassesByCid(ids);
        return BaseResult.ok("删除成功");
    }

    /**
     * 修改第一步:回显数据
     * @param cid
     * @return
     */
    @GetMapping("/FindByClassesByCid/{cid}")
    public BaseResult FindByClassesByCid(@PathVariable("cid") Integer cid){
        Classes classes = classesService.FindByClassesByCid(cid);
        return BaseResult.ok("查询成功",classes);
    }


}

  • service
package com.czxy.service;

        import com.czxy.domain.Classes;
        import com.czxy.domain.ClassesPi;
        import com.czxy.domain.Teacher;
        import com.github.pagehelper.PageInfo;

        import java.util.List;

public interface ClassesService {
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    PageInfo<Classes> FindClassesForPageNum(ClassesPi classesPi);
    /**
     * 查询授课老师信息
     * @param tid
     * @return
     */
    List<Teacher> Findteacher1list(Integer tid);
    /**
     * 查询助理老师信息
     * @param tid
     * @return
     */
    List<Teacher> Findteacher2list(Integer tid);
    /**
     * 查询辅导员老师老师信息
     * @param tid
     * @return
     */
    List<Teacher> Findteacher3list(Integer tid);
    /**
     * 添加班级
     * @param classes
     * @return
     */
    void addClasses(Classes classes);
    /**
     * 批量删除数据
     * @param ids
     * @return
     */
    void DeleteClassesByCid(String ids);
    /**
     * 修改第一步:回显数据
     * @param cid
     * @return
     */
    Classes FindByClassesByCid(Integer cid);
}
  • serviceIpml
package com.czxy.service.impl;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import com.czxy.domain.Teacher;
import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;
import com.czxy.service.ClassesService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    @Override
    public PageInfo<Classes> FindClassesForPageNum(ClassesPi classesPi) {
        PageHelper.startPage(classesPi.getPageNum(),classesPi.getPageSize());
        if (classesPi.getCname()!=null && !"" .equals(classesPi.getCname())){
            classesPi.setCname("%"+classesPi.getCname()+"%");
        }
        List<Classes> clist =  classesMapper.FindClassesForPageNum(classesPi);

        PageInfo<Classes> classesPageInfo = new PageInfo<>(clist);
        return classesPageInfo;
    }
    /**
     * 查询授课老师信息
     * @param tid
     * @return
     */
    @Override
    public List<Teacher> Findteacher1list(Integer tid) {
        List<Teacher> tlist =  teacherMapper.Findteacher1list(tid);
        return tlist;
    }
    /**
     * 查询助理老师信息
     * @param tid
     * @return
     */
    @Override
    public List<Teacher> Findteacher2list(Integer tid) {
        List<Teacher> tlist =  teacherMapper.Findteacher1list(tid);
        return tlist;
    }
    /**
     * 查询辅导员老师老师信息
     * @param tid
     * @return
     */
    @Override
    public List<Teacher> Findteacher3list(Integer tid) {
        List<Teacher> tlist =  teacherMapper.Findteacher1list(tid);
        return tlist;
    }
    /**
     * 添加班级
     * @param classes
     * @return
     */
    @Override
    public void addClasses(Classes classes) {
        classesMapper.insertSelective(classes);
    }
    /**
     * 批量删除数据
     * @param ids
     * @return
     */
    @Override
    public void DeleteClassesByCid(String ids) {
        String[] split = ids.split(",");
        for (String s : split) {
            classesMapper.deleteByPrimaryKey(Integer.parseInt(s));
        }
    }
    /**
     * 修改第一步:回显数据
     * @param cid
     * @return
     */
    @Override
    public Classes FindByClassesByCid(Integer cid) {
        Classes classes =  classesMapper.FindByClassesByCid(cid);
        return classes;
    }
}

  • mapper
package com.czxy.mapper;

import com.czxy.domain.Classes;
import com.czxy.domain.ClassesPi;
import org.apache.ibatis.annotations.*;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

public interface ClassesMapper extends Mapper<Classes> {
    /**
     * 查询班级列表(分页+条件)
     * @param
     * @param classesPi
     * @return
     */
    @Select(" <script> select * from tb_class where 1=1 "+
    " <if test = \" classesPi.cname != null and classesPi.cname != '' \"> and cname like #{classesPi.cname} </if> "+
    "</script>")
    @Results(id = "c1",value = {
            @Result(property = "cid",column = "cid"),
            @Result(property = "cname",column = "cname"),
            @Result(property = "teacher1_id",column = "teacher1_id"),
            @Result(property = "teacher2_id",column = "teacher2_id"),
            @Result(property = "teacher3_id",column = "teacher3_id"),
            @Result(property = "teacher1",column = "teacher1_id",one = @One(select = "com.czxy.mapper.TeacherMapper.selectByID")),
            @Result(property = "teacher2",column = "teacher2_id",one = @One(select = "com.czxy.mapper.TeacherMapper.selectByID")),
            @Result(property = "teacher3",column = "teacher3_id",one = @One(select = "com.czxy.mapper.TeacherMapper.selectByID"))
    })
    List<Classes> FindClassesForPageNum(@Param("classesPi") ClassesPi classesPi);

    @Select("select * from tb_class where cid=#{cid}")
    @ResultMap( "c1")
    Classes FindByClassesByCid(@Param("cid") Integer cid);
}

2.7 功能7:添加学生

在这里插入图片描述

前端代码

<template>
  <div>
    <el-form ref="form" :model="student" label-width="100px">
        <el-form-item label="选择班级">
          <el-select v-model="student.class_id" placeholder="请选择活班级">
            <el-option v-for="(c, index) in clist" :key="index" :label="c.cname" :value="c.cid"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="学生名称">
          <el-input v-model="student.sname"></el-input>
        </el-form-item>
        <el-form-item label="性别">
          <el-radio-group v-model="student.gender">
            <el-radio label="1">男</el-radio>
            <el-radio label="2">女</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input v-model="student.age"></el-input>
        </el-form-item>
        <el-form-item label="薪资">
          <el-input v-model="student.salary"></el-input>
        </el-form-item>
        <el-form-item label="个人介绍">
          <el-input type="textarea" v-model="student.desc"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="addStudent">添加学生</el-button>
        </el-form-item>
    </el-form>
  </div>
</template>

<script>
import { addStudent,Findclasses } from '../../api'
export default {
  data() {
    return {
      student:{},
      clist:[]
    }
  },
  created() {
    this.Findclasses()
  },
  methods: {
    async Findclasses() {
      let{ data } = await Findclasses();
      if (data.code == 1) {
        this.clist = data.data
      }
    },
    async addStudent() {
       let { data } = await addStudent(this.student)
       if (data.code==1) {
         this.$message.success(data.message)
         this.$router.push('/studentList')
       }
    }
  },
}
</script>

<style>

</style>

后端代码

  • domain
package com.czxy.domain;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@Table(name = "tb_student")
public class Student implements Serializable {
    @Id
    private Integer sid;
    private String sname;
    private Integer gender;
    private Integer age;
    private Double salary;
    @Column(name = "`desc`")
    private String desc;
    private Integer class_id;
    private Classes classes;

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", gender=" + gender +
                ", age=" + age +
                ", salary=" + salary +
                ", desc='" + desc + '\'' +
                ", class_id=" + class_id +
                ", classes=" + classes +
                '}';
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public Integer getClass_id() {
        return class_id;
    }

    public void setClass_id(Integer class_id) {
        this.class_id = class_id;
    }

    public Classes getClasses() {
        return classes;
    }

    public void setClasses(Classes classes) {
        this.classes = classes;
    }

    public Student(Integer sid, String sname, Integer gender, Integer age, Double salary, String desc, Integer class_id, Classes classes) {

        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.age = age;
        this.salary = salary;
        this.desc = desc;
        this.class_id = class_id;
        this.classes = classes;
    }

    public Student() {

    }
}

  • mapper
package com.czxy.mapper;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

public interface StudentMapper extends Mapper<Student> {
 
}

  • service
package com.czxy.service;
import com.czxy.domain.Student;
import java.util.List;

public interface StudentService {
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    void addStudent(Student student);
   
}

  • serviceImpl
package com.czxy.service.impl;


import com.czxy.domain.Student;

import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;


@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    @Resource
    private ClassesMapper classesMapper;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @Override
    public void addStudent(Student student) {
        studentMapper.insertSelective(student);
    }
   

  • controller
package com.czxy.controller;


import com.czxy.domain.Student;

import com.czxy.service.StudentService;
import com.czxy.vo.BaseResult;

import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;


@RestController
@RequestMapping("/student")
public class StudentController {
    @Resource
    private StudentService studentService;


    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @PostMapping("/addStudent")
    private BaseResult addStudent(@RequestBody Student student){
        studentService.addStudent(student);
        return BaseResult.ok("添加成功");
    }


}

2.8 功能8:学生列表(基本列表+分页+条件)

在这里插入图片描述

前端代码

<template>
  <div>
    <div>
        <el-breadcrumb separator="/">
            <el-breadcrumb-item :to="{ path: '/studentList' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item><a href="/studentList">学生管理</a></el-breadcrumb-item>
            <el-breadcrumb-item>学生列表</el-breadcrumb-item>
        </el-breadcrumb>
    </div>

    <el-card class="box-card">
        <div slot="header" class="clearfix">
               <div slot="header" >
          <el-form :inline="true" :model="studentPi" size="mini" class="demo-form-inline">
            <el-form-item label="姓名">
              <el-input v-model="studentPi.sname" clearable placeholder="请输入学生姓名"></el-input>
            </el-form-item>
            <el-form-item label="性别">
                <el-radio-group v-model="studentPi.gender">
                <el-radio label="1">男</el-radio>
                <el-radio label="2">女</el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="薪资">
                <el-col :span="10">
                <el-form-item>
                    <el-input  placeholder="请输入起始值" v-model="studentPi.minsalary" ></el-input>
                </el-form-item>
                </el-col>
                <el-col class="line" :span="2">-</el-col>
                <el-col :span="10">
                <el-form-item >
                    <el-input placeholder="请输入结束值" v-model="studentPi.maxsalary" ></el-input>
                </el-form-item>
                </el-col>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="FindStudentListForPageNum">查询</el-button>
            </el-form-item>
          </el-form>
    </div>
        </div>
        <div>
            <el-table ref="studentTable" :data="pageinfo.list" style="width: 100%">
                <el-table-column  type="selection" width="55"></el-table-column>
                <el-table-column prop="sname" label="学生姓名"></el-table-column>
                <el-table-column label="性别">
                    <template scope="scope">
                        {{scope.row.gender==1 ? "男":"女"}}
                    </template>
                </el-table-column>
                <el-table-column prop="age" label="年龄"></el-table-column>
                <el-table-column prop="salary" label="薪资"></el-table-column>
                <el-table-column label="班级名称">
                <template slot-scope="scope">{{ scope.row.classes.cname }}</template>
                </el-table-column>
                <el-table-column label="授课老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher1.tname }}</template>
                </el-table-column>
                <el-table-column label="助理老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher2.tname }}</template>
                </el-table-column>
                <el-table-column label="辅导员老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher3.tname }}</template>
                </el-table-column>
                <el-table-column prop="sid" label="操作">
                <template slot-scope="scope">
                    <el-button @click="FindStudent(scope.row.sid)" type="text" size="small">查看</el-button>
                </template>
                </el-table-column>
            </el-table>
            <el-table-column>
                <el-button @click="deleteStudentBysid" type="danger" >批量删除</el-button>
            </el-table-column>
            <div align ="center">
                <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page="pageinfo.pageNum"
                    :page-sizes="[2, 3, 5, 10]"
                    :page-size="pageinfo.pageSize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="pageinfo.total">
                </el-pagination>
            </div>
        </div>
    </el-card>
  </div>
</template>

<script>
import {FindStudentListForPageNum } from '../../api'
export default {
  data() {
      return {
        pageinfo:{},
        studentPi:{
            pageNum:1,
            pageSize:2,
            sname:'',
            gender:'',
            minsalary:'',
            maxsalary:''
        },
      }
  },
  created() {
      this.FindStudentListForPageNum()
  },
  methods: {
      async FindStudentListForPageNum(){
          let { data } = await FindStudentListForPageNum(this.studentPi)
          if (data.code == 1) {
              this.pageinfo = data.data
          }
      },
       handleSizeChange(val) {
        this.studentPi.pageNum = 1
        this.studentPi.pageSize = val
        this.FindStudentListForPageNum()
      },
      handleCurrentChange(val) {
       this.studentPi.pageNum =val
       this.FindStudentListForPageNum()
      }
  }

</script>

<style>

</style>

后端代码

package com.czxy.controller;

        import com.czxy.domain.Classes;
        import com.czxy.domain.Student;
        import com.czxy.domain.StudentPi;
        import com.czxy.service.StudentService;
        import com.czxy.vo.BaseResult;
        import com.github.pagehelper.PageInfo;
        import org.springframework.web.bind.annotation.*;

        import javax.annotation.Resource;
        import java.util.List;

@RestController
@RequestMapping("/student")
public class StudentController {
    @Resource
    private StudentService studentService;

    /**
     *  学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @GetMapping("/FindStudentListForPageNum")
    public BaseResult FindStudentListForPageNum( StudentPi studentPi){
        PageInfo<Student> pageInfo =  studentService.FindStudentListForPageNum(studentPi);
        return BaseResult.ok("查询成功",pageInfo);
    }

    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @PostMapping("/addStudent")
    private BaseResult addStudent(@RequestBody Student student){
        studentService.addStudent(student);
        return BaseResult.ok("添加成功");
    }
}

  • service
package com.czxy.service;

import com.czxy.domain.Classes;
import com.czxy.domain.Student;
import com.czxy.domain.StudentPi;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface StudentService {
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    PageInfo<Student> FindStudentListForPageNum(StudentPi studentPi);
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    void addStudent(Student student);

}

  • serviceImpl
package com.czxy.service.impl;

import com.czxy.domain.Classes;
import com.czxy.domain.Student;
import com.czxy.domain.StudentPi;
import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;
import com.czxy.service.StudentService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    @Resource
    private ClassesMapper classesMapper;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @Override
    public PageInfo<Student> FindStudentListForPageNum(StudentPi studentPi) {
        PageHelper.startPage(studentPi.getPageNum(),studentPi.getPageSize());
    //    设置姓名
        if (studentPi.getSname() != null && !"" .equals(studentPi.getSname())){
            studentPi.setSname("%"+studentPi.getSname()+"%");
        }
        List<Student> slist =  studentMapper.FindStudentListForPageNum(studentPi);
        PageInfo<Student> pageInfo = new PageInfo<>(slist);
        return pageInfo;
    }

    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @Override
    public void addStudent(Student student) {
        studentMapper.insertSelective(student);
    }
 

  • mapper
package com.czxy.mapper;

        import com.czxy.domain.Student;
        import com.czxy.domain.StudentPi;
        import org.apache.ibatis.annotations.*;
        import tk.mybatis.mapper.common.Mapper;

        import java.util.List;

public interface StudentMapper extends Mapper<Student> {
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @Select("<script> select * from tb_student where 1=1"+
            "<if test= \" studentPi.sname != null and studentPi.sname != '' \"> and sname like #{studentPi.sname} </if> "+
            "<if test= \" studentPi.gender != null and studentPi.gender != '' \"> and gender=#{studentPi.gender} </if>"+
            "<if test= \" studentPi.minsalary != null and studentPi.minsalary != '' and studentPi.maxsalary != null and studentPi.maxsalary != '' \"> and salary between #{studentPi.minsalary} and #{studentPi.maxsalary} </if>"+
            "</script>")
    @Results(id = "s1",value = {
            @Result(property = "class_id",column = "class_id"),
            @Result(property = "classes",column = "class_id",one = @One(select = "com.czxy.mapper.ClassesMapper.FindByClassesByCid"))
    })
    List<Student> FindStudentListForPageNum(@Param("studentPi") StudentPi studentPi);


}

2.9 功能9:批量删除

在这里插入图片描述

前段代码

<template>
  <div>
    <div>
        <el-breadcrumb separator="/">
            <el-breadcrumb-item :to="{ path: '/studentList' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item><a href="/studentList">学生管理</a></el-breadcrumb-item>
            <el-breadcrumb-item>学生列表</el-breadcrumb-item>
        </el-breadcrumb>
    </div>

    <el-card class="box-card">
        <div slot="header" class="clearfix">
               <div slot="header" >
          <el-form :inline="true" :model="studentPi" size="mini" class="demo-form-inline">
            <el-form-item label="姓名">
              <el-input v-model="studentPi.sname" clearable placeholder="请输入学生姓名"></el-input>
            </el-form-item>
            <el-form-item label="性别">
                <el-radio-group v-model="studentPi.gender">
                <el-radio label="1">男</el-radio>
                <el-radio label="2">女</el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="薪资">
                <el-col :span="10">
                <el-form-item>
                    <el-input  placeholder="请输入起始值" v-model="studentPi.minsalary" ></el-input>
                </el-form-item>
                </el-col>
                <el-col class="line" :span="2">-</el-col>
                <el-col :span="10">
                <el-form-item >
                    <el-input placeholder="请输入结束值" v-model="studentPi.maxsalary" ></el-input>
                </el-form-item>
                </el-col>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="FindStudentListForPageNum">查询</el-button>
            </el-form-item>
          </el-form>
    </div>
        </div>
        <div>
            <el-table ref="studentTable" :data="pageinfo.list" style="width: 100%">
                <el-table-column  type="selection" width="55"></el-table-column>
                <el-table-column prop="sname" label="学生姓名"></el-table-column>
                <el-table-column label="性别">
                    <template scope="scope">
                        {{scope.row.gender==1 ? "男":"女"}}
                    </template>
                </el-table-column>
                <el-table-column prop="age" label="年龄"></el-table-column>
                <el-table-column prop="salary" label="薪资"></el-table-column>
                <el-table-column label="班级名称">
                <template slot-scope="scope">{{ scope.row.classes.cname }}</template>
                </el-table-column>
                <el-table-column label="授课老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher1.tname }}</template>
                </el-table-column>
                <el-table-column label="助理老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher2.tname }}</template>
                </el-table-column>
                <el-table-column label="辅导员老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher3.tname }}</template>
                </el-table-column>
                <el-table-column prop="sid" label="操作">
                <template slot-scope="scope">
                    <el-button @click="FindStudent(scope.row.sid)" type="text" size="small">查看</el-button>
                </template>
                </el-table-column>
            </el-table>
         
            <el-table-column>
                <el-button @click="deleteStudentBysid" type="danger" >批量删除</el-button>
            </el-table-column>
            <div align ="center">
                <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page="pageinfo.pageNum"
                    :page-sizes="[2, 3, 5, 10]"
                    :page-size="pageinfo.pageSize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="pageinfo.total">
                </el-pagination>
            </div>
        </div>
    </el-card>
  </div>
</template>

<script>
import {FindStudentListForPageNum,deleteStudentBysid } from '../../api'
export default {
  data() {
      return {
        pageinfo:{},
        studentPi:{
            pageNum:1,
            pageSize:2,
            sname:'',
            gender:'',
            minsalary:'',
            maxsalary:''
        },
        ids:[]
    
      }
  },
  created() {
      this.FindStudentListForPageNum()
      this.Findclasses()
  },
  methods: {
      async FindStudentListForPageNum(){
          let { data } = await FindStudentListForPageNum(this.studentPi)
          if (data.code == 1) {
              this.pageinfo = data.data
          }
      },
       handleSizeChange(val) {
        this.studentPi.pageSize = 1
        this.studentPi.pageSize = val
        this.FindStudentListForPageNum()
      },
      handleCurrentChange(val) {
       this.studentPi.pageNum =val
       this.FindStudentListForPageNum()
      },
       deleteStudentBysid() {
           this.ids = this.$refs.studentTable.selection.map(item => item.sid).join(',')
           this.$confirm('确认要删除吗?').then(async() =>{
               let { data } = await deleteStudentBysid(this.ids)
               if (data.code == 1) {
                   this.$message.success(data.message)
                   this.studentPi.pageNum=1
                   this.FindStudentListForPageNum()
               }
           })
           .catch(()=>{
               this.$message.info("取消删除")
               this.FindStudentListForPageNum()
           })
      },
       handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      }
    }
  }

</script>

<style>

</style>

后端代码

  • controller
package com.czxy.controller;

        import com.czxy.domain.Classes;
        import com.czxy.domain.Student;
        import com.czxy.domain.StudentPi;
        import com.czxy.service.StudentService;
        import com.czxy.vo.BaseResult;
        import com.github.pagehelper.PageInfo;
        import org.springframework.web.bind.annotation.*;

        import javax.annotation.Resource;
        import java.util.List;

@RestController
@RequestMapping("/student")
public class StudentController {
    @Resource
    private StudentService studentService;

    /**
     *  学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @GetMapping("/FindStudentListForPageNum")
    public BaseResult FindStudentListForPageNum( StudentPi studentPi){
        PageInfo<Student> pageInfo =  studentService.FindStudentListForPageNum(studentPi);
        return BaseResult.ok("查询成功",pageInfo);
    }
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @PostMapping("/addStudent")
    private BaseResult addStudent(@RequestBody Student student){
        studentService.addStudent(student);
        return BaseResult.ok("添加成功");
    }

    /**
     *  批量删除
     * @param ids
     * @return
     */
    @DeleteMapping("/deleteStudentBysid/{ids}")
    public BaseResult deleteStudentBysid(@PathVariable("ids") String ids){
        studentService.deleteStudentBysid(ids);
        return BaseResult.ok("删除成功");
    }

 

}

  • service
package com.czxy.service;

import com.czxy.domain.Classes;
import com.czxy.domain.Student;
import com.czxy.domain.StudentPi;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface StudentService {
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    PageInfo<Student> FindStudentListForPageNum(StudentPi studentPi);

    /**
     *  添加一个学生
     * @param student
     * @return
     */
    void addStudent(Student student);
    /**
     *  批量删除
     * @param ids
     * @return
     */
    void deleteStudentBysid(String ids);

}

  • serviceImpl
package com.czxy.service.impl;

import com.czxy.domain.Classes;
import com.czxy.domain.Student;
import com.czxy.domain.StudentPi;
import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;
import com.czxy.service.StudentService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    @Resource
    private ClassesMapper classesMapper;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @Override
    public PageInfo<Student> FindStudentListForPageNum(StudentPi studentPi) {
        PageHelper.startPage(studentPi.getPageNum(),studentPi.getPageSize());
    //    设置姓名
        if (studentPi.getSname() != null && !"" .equals(studentPi.getSname())){
            studentPi.setSname("%"+studentPi.getSname()+"%");
        }
        List<Student> slist =  studentMapper.FindStudentListForPageNum(studentPi);
        PageInfo<Student> pageInfo = new PageInfo<>(slist);
        return pageInfo;
    }
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @Override
    public void addStudent(Student student) {
        studentMapper.insertSelective(student);
    }
    /**
     *  批量删除
     * @param ids
     * @return
     */
    @Override
    public void deleteStudentBysid(String ids) {
        String[] split = ids.split(",");
        for (String s : split) {
            studentMapper.deleteByPrimaryKey(Integer.parseInt(s));
        }
    }
 

2.10 功能10:修改学生

在这里插入图片描述

前端代码

<template>
  <div>
    <div>
        <el-breadcrumb separator="/">
            <el-breadcrumb-item :to="{ path: '/studentList' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item><a href="/studentList">学生管理</a></el-breadcrumb-item>
            <el-breadcrumb-item>学生列表</el-breadcrumb-item>
        </el-breadcrumb>
    </div>

    <el-card class="box-card">
        <div slot="header" class="clearfix">
               <div slot="header" >
          <el-form :inline="true" :model="studentPi" size="mini" class="demo-form-inline">
            <el-form-item label="姓名">
              <el-input v-model="studentPi.sname" clearable placeholder="请输入学生姓名"></el-input>
            </el-form-item>
            <el-form-item label="性别">
                <el-radio-group v-model="studentPi.gender">
                <el-radio label="1">男</el-radio>
                <el-radio label="2">女</el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="薪资">
                <el-col :span="10">
                <el-form-item>
                    <el-input  placeholder="请输入起始值" v-model="studentPi.minsalary" ></el-input>
                </el-form-item>
                </el-col>
                <el-col class="line" :span="2">-</el-col>
                <el-col :span="10">
                <el-form-item >
                    <el-input placeholder="请输入结束值" v-model="studentPi.maxsalary" ></el-input>
                </el-form-item>
                </el-col>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="FindStudentListForPageNum">查询</el-button>
            </el-form-item>
          </el-form>
    </div>
        </div>
        <div>
            <el-table ref="studentTable" :data="pageinfo.list" style="width: 100%">
                <el-table-column  type="selection" width="55"></el-table-column>
                <el-table-column prop="sname" label="学生姓名"></el-table-column>
                <el-table-column label="性别">
                    <template scope="scope">
                        {{scope.row.gender==1 ? "男":"女"}}
                    </template>
                </el-table-column>
                <el-table-column prop="age" label="年龄"></el-table-column>
                <el-table-column prop="salary" label="薪资"></el-table-column>
                <el-table-column label="班级名称">
                <template slot-scope="scope">{{ scope.row.classes.cname }}</template>
                </el-table-column>
                <el-table-column label="授课老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher1.tname }}</template>
                </el-table-column>
                <el-table-column label="助理老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher2.tname }}</template>
                </el-table-column>
                <el-table-column label="辅导员老师">
                <template slot-scope="scope">{{ scope.row.classes.teacher3.tname }}</template>
                </el-table-column>
                <el-table-column prop="sid" label="操作">
                <template slot-scope="scope">
                    <el-button @click="FindStudent(scope.row.sid)" type="text" size="small">查看</el-button>
                </template>
                </el-table-column>
            </el-table>
            <el-dialog
                title="修改学生"
                :visible.sync="dialogVisible"
                width="50%"
                :before-close="handleClose">
                   <el-form ref="form" :model="student" label-width="100px">
        <el-form-item label="选择班级">
          <el-select v-model="student.class_id" placeholder="请选择活班级">
            <el-option v-for="(c, index) in clist" :key="index" :label="c.cname" :value="c.cid"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="学生名称">
          <el-input v-model="student.sname"></el-input>
        </el-form-item>
        <el-form-item label="性别">
          <el-radio-group v-model="student.gender">
            <el-radio :label="1">男</el-radio>
            <el-radio :label="2">女</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input v-model="student.age"></el-input>
        </el-form-item>
        <el-form-item label="薪资">
          <el-input v-model="student.salary"></el-input>
        </el-form-item>
        <el-form-item label="个人介绍">
          <el-input type="textarea" v-model="student.desc"></el-input>
        </el-form-item>
        <el-form-item>
             <el-button @click="dialogVisible = false">取 消</el-button>
            <el-button type="primary">确 定</el-button>
        </el-form-item>
    </el-form>
            </el-dialog>
            <el-table-column>
                <el-button @click="deleteStudentBysid" type="danger" >批量删除</el-button>
            </el-table-column>
            <div align ="center">
                <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page="pageinfo.pageNum"
                    :page-sizes="[2, 3, 5, 10]"
                    :page-size="pageinfo.pageSize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="pageinfo.total">
                </el-pagination>
            </div>
        </div>
    </el-card>
  </div>
</template>

<script>
import {FindStudentListForPageNum, Findclasses,deleteStudentBysid ,FindStudent} from '../../api'
export default {
  data() {
      return {
        pageinfo:{},
        studentPi:{
            pageNum:1,
            pageSize:2,
            sname:'',
            gender:'',
            minsalary:'',
            maxsalary:''
        },
        ids:[],
        student:{},
        clist:[],
        dialogVisible:false
      }
  },
  created() {
      this.FindStudentListForPageNum()
      this.Findclasses()
  },
  methods: {
      async FindStudentListForPageNum(){
          let { data } = await FindStudentListForPageNum(this.studentPi)
          if (data.code == 1) {
              this.pageinfo = data.data
          }
      },
       handleSizeChange(val) {
        this.studentPi.pageSize = 1
        this.studentPi.pageSize = val
        this.FindStudentListForPageNum()
      },
      handleCurrentChange(val) {
       this.studentPi.pageNum =val
       this.FindStudentListForPageNum()
      },
       deleteStudentBysid() {
           this.ids = this.$refs.studentTable.selection.map(item => item.sid).join(',')
           this.$confirm('确认要删除吗?').then(async() =>{
               let { data } = await deleteStudentBysid(this.ids)
               if (data.code == 1) {
                   this.$message.success(data.message)
                   this.studentPi.pageNum=1
                   this.FindStudentListForPageNum()
               }
           })
           .catch(()=>{
               this.$message.info("取消删除")
               this.FindStudentListForPageNum()
           })
      },
      async Findclasses (){
    let { data:baserest1 }  = await Findclasses()
        if (baserest1.code == 1) {
            this.clist = baserest1.data
        }
      },
     async FindStudent(sid) {
        this.dialogVisible = true
    
        let { data:baserest2 } = await FindStudent(sid)
        if (baserest2.code==1) {
            this.student = baserest2.data
        }
      },
       handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      }
    }
  }

</script>

<style>

</style>

后端代码

  • controller
package com.czxy.controller;

        import com.czxy.domain.Classes;
        import com.czxy.domain.Student;
        import com.czxy.domain.StudentPi;
        import com.czxy.service.StudentService;
        import com.czxy.vo.BaseResult;
        import com.github.pagehelper.PageInfo;
        import org.springframework.web.bind.annotation.*;

        import javax.annotation.Resource;
        import java.util.List;

@RestController
@RequestMapping("/student")
public class StudentController {
    @Resource
    private StudentService studentService;

    /**
     *  学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @GetMapping("/FindStudentListForPageNum")
    public BaseResult FindStudentListForPageNum( StudentPi studentPi){
        PageInfo<Student> pageInfo =  studentService.FindStudentListForPageNum(studentPi);
        return BaseResult.ok("查询成功",pageInfo);
    }

    /**
     *  查询班级信息
     * @return
     */
    @GetMapping("/Findclasses")
    public BaseResult Findclasses(){
        List<Classes> clist = studentService.Findclasses();
        return BaseResult.ok("查询成功",clist);
    }

    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @PostMapping("/addStudent")
    private BaseResult addStudent(@RequestBody Student student){
        studentService.addStudent(student);
        return BaseResult.ok("添加成功");
    }

    /**
     *  批量删除
     * @param ids
     * @return
     */
    @DeleteMapping("/deleteStudentBysid/{ids}")
    public BaseResult deleteStudentBysid(@PathVariable("ids") String ids){
        studentService.deleteStudentBysid(ids);
        return BaseResult.ok("删除成功");
    }

    /**
     *  修改第一步: 回显对象
     * @param sid
     * @return
     */
    @GetMapping("/FindStudent/{sid}")
    public BaseResult FindStudent(@PathVariable("sid") Integer sid){
        Student student =  studentService.FindStudent(sid);
        return BaseResult.ok("查询成功",student);
    }


}

  • service
package com.czxy.service;

import com.czxy.domain.Classes;
import com.czxy.domain.Student;
import com.czxy.domain.StudentPi;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface StudentService {
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    PageInfo<Student> FindStudentListForPageNum(StudentPi studentPi);
    /**
     * 查询班级信息
     * @return
     */
    List<Classes> Findclasses();
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    void addStudent(Student student);
    /**
     *  批量删除
     * @param ids
     * @return
     */
    void deleteStudentBysid(String ids);
    /**
     *  修改第一步: 回显对象
     * @param sid
     * @return
     */
    Student FindStudent(Integer sid);
}

  • serviceImpl
package com.czxy.service.impl;

import com.czxy.domain.Classes;
import com.czxy.domain.Student;
import com.czxy.domain.StudentPi;
import com.czxy.mapper.ClassesMapper;
import com.czxy.mapper.StudentMapper;
import com.czxy.mapper.TeacherMapper;
import com.czxy.service.StudentService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    @Resource
    private ClassesMapper classesMapper;
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @Override
    public PageInfo<Student> FindStudentListForPageNum(StudentPi studentPi) {
        PageHelper.startPage(studentPi.getPageNum(),studentPi.getPageSize());
    //    设置姓名
        if (studentPi.getSname() != null && !"" .equals(studentPi.getSname())){
            studentPi.setSname("%"+studentPi.getSname()+"%");
        }
        List<Student> slist =  studentMapper.FindStudentListForPageNum(studentPi);
        PageInfo<Student> pageInfo = new PageInfo<>(slist);
        return pageInfo;
    }
    /**
     * 查询班级信息
     * @return
     */
    @Override
    public List<Classes> Findclasses() {
        List<Classes> classes = classesMapper.selectAll();
        return classes;
    }
    /**
     *  添加一个学生
     * @param student
     * @return
     */
    @Override
    public void addStudent(Student student) {
        studentMapper.insertSelective(student);
    }
    /**
     *  批量删除
     * @param ids
     * @return
     */
    @Override
    public void deleteStudentBysid(String ids) {
        String[] split = ids.split(",");
        for (String s : split) {
            studentMapper.deleteByPrimaryKey(Integer.parseInt(s));
        }
    }
    /**
     *  修改第一步: 回显对象
     * @param sid
     * @return
     */
    @Override
    public Student FindStudent(Integer sid) {
       Student student =  studentMapper.FindStudent(sid);
       return student;
    }
}

  • mapper
package com.czxy.mapper;

        import com.czxy.domain.Student;
        import com.czxy.domain.StudentPi;
        import org.apache.ibatis.annotations.*;
        import tk.mybatis.mapper.common.Mapper;

        import java.util.List;

public interface StudentMapper extends Mapper<Student> {
    /**
     * 学生列表(分页+多条件)
     * @param studentPi
     * @return
     */
    @Select("<script> select * from tb_student where 1=1"+
            "<if test= \" studentPi.sname != null and studentPi.sname != '' \"> and sname like #{studentPi.sname} </if> "+
            "<if test= \" studentPi.gender != null and studentPi.gender != '' \"> and gender=#{studentPi.gender} </if>"+
            "<if test= \" studentPi.minsalary != null and studentPi.minsalary != '' and studentPi.maxsalary != null and studentPi.maxsalary != '' \"> and salary between #{studentPi.minsalary} and #{studentPi.maxsalary} </if>"+
            "</script>")
    @Results(id = "s1",value = {
            @Result(property = "class_id",column = "class_id"),
            @Result(property = "classes",column = "class_id",one = @One(select = "com.czxy.mapper.ClassesMapper.FindByClassesByCid"))
    })
    List<Student> FindStudentListForPageNum(@Param("studentPi") StudentPi studentPi);

    @Select("select * from tb_student where sid=#{sid}")
    @ResultMap("s1")
    Student FindStudent(@Param("sid") Integer sid);
}

发布了31 篇原创文章 · 获赞 11 · 访问量 829

猜你喜欢

转载自blog.csdn.net/Eros1onz/article/details/103610149