【Spring Boot 18】Spring Boot + Vue 实现CRUD(1)

PRIMARY KEY (`id`),

UNIQUE KEY `uk_name` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘讲师’;

4、nginx


(1)简介

nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。

(2)Nginx的主要作用

  • 请求转发

  • 负载均衡

  • 动态分离

(3)启动

cmd路径,执行nginx.exe命令即可。

(4)配置

目前暂时只有两个子端口,9001为nginx端口号,8001为讲师模块,8002为阿里云oss上传头像模块。

三、Spring Boot + Vue 实现CRUD

==========================

1、EduTeacherController


package com.atguigu.eduservice.controller;

import com.atguigu.commonutils.R;

import com.atguigu.eduservice.entity.EduTeacher;

import com.atguigu.eduservice.entity.vo.TeacherQuery;

import com.atguigu.eduservice.service.EduTeacherService;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import io.swagger.annotations.ApiParam;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.util.StringUtils;

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

import java.util.List;

@Api(description=“讲师管理”)

@RestController

@RequestMapping(“/eduservice/teacher”)

@CrossOrigin

public class EduTeacherController {

@Autowired

private EduTeacherService teacherService;

@ApiOperation(value = “所有讲师列表”)

@GetMapping(“findAll”)

public R findAllTeacher(){

List list = teacherService.list(null);

return R.Ok().data(“items”,list);

}

@ApiOperation(value = “根据ID查询讲师”)

@GetMapping(“findById{id}”)

public R findById(@ApiParam(name=“id”,value=“讲师ID”,required=true) @PathVariable String id){

EduTeacher teacher = teacherService.getById(id);

return R.Ok().data(“items”,teacher.getJson());

}

@ApiOperation(value = “根据ID删除讲师”)

//逻辑删除讲师的方法

@DeleteMapping(“{id}”)

public R removeTeacher(@ApiParam(name=“id”,value=“讲师ID”,required=true) @PathVariable String id){

Boolean flag = teacherService.removeById(id);

if(flag){

return R.Ok();

}else{

return R.error();

}

}

//分页

@GetMapping(“pageTeacher/{current}/{limit}”)

public R pageListTeacher(@PathVariable long current,@PathVariable long limit){

//创建page对象

Page pageTeacher = new Page<>(current,limit);

//调用方法的时候,底层封装,把分页所有数据封装到pageTeacher中

teacherService.page(pageTeacher,null);

long total = pageTeacher.getTotal();

List records = pageTeacher.getRecords();

//Map map = new HashMap();

//map.put(“total”,total);

//map.put(“rows”,records);

return R.Ok().data(“total”,total).data(“rows”,records);

}

@PostMapping(“pageTeacherCondition/{current}/{limit}”)

public R pageTeacherCondition(@PathVariable long current,@PathVariable long limit,

@RequestBody(required = false) TeacherQuery teacherQuery){

//创建一个page对象

Page pageTeacher = new Page<>(current,limit);

QueryWrapper wrapper = new QueryWrapper<>();

//多条件组合查询

//动态SQL

//判断条件值是否为空,不为空就拼接

String name = teacherQuery.getName();

Integer level = teacherQuery.getLevel();

String begin = teacherQuery.getBegin();

String end = teacherQuery.getEnd();

if(!StringUtils.isEmpty(name)){

wrapper.like(“name”,name);

}

if(!StringUtils.isEmpty(level)){

wrapper.eq(“level”,level);

}

if(!StringUtils.isEmpty(begin)){

wrapper.ge(“gmt_create”,begin);

}

if(!StringUtils.isEmpty(end)){

wrapper.le(“gmt_modified”,end);

}

wrapper.orderByDesc(“gmt_create”);

//wrapper.

teacherService.page(pageTeacher,wrapper);

long total = pageTeacher.getTotal();

List records = pageTeacher.getRecords();

return R.Ok().data(“total”,total).data(“rows”,records);

}

//添加讲师接口的方法

@PostMapping(“addTeacher”)

public R addTeacher(@RequestBody EduTeacher eduTeacher){

boolean save = teacherService.save(eduTeacher);

if(save){

return R.Ok();

}else {

return R.error();

}

}

@GetMapping(“getTeacher/{id}”)

public R getTeacher(@PathVariable String id){

EduTeacher byId = teacherService.getById(id);

return R.Ok().data(“teacher”,byId);

}

@PostMapping(“updateTeacher”)

public R updateTeacher(@RequestBody EduTeacher eduTeacher){

boolean flag = teacherService.updateById(eduTeacher);

if(flag){

return R.Ok();

}else {

return R.error();

}

}

}

2、前端讲师列表

<el-button type=“primary” icon=“el-icon-upload” @click=“imagecropperShow=true”>更换头像

<image-cropper

v-show=“imagecropperShow”

:width=“300”

:height=“300”

:key=“imagecropperKey”

:url=“BASE_API+‘/eduoss/fileoss’”

field=“file”

@close=“close”

@crop-upload-success=“cropSuccess”/>

<el-button :disabled=“saveBtnDisabled” type=“primary” @click=“saveOrUpdate”>保存

3、添加讲师页面

<el-date-picker

v-model=“teacherQuery.begin”

type=“datetime”

placeholder=“选择开始时间”

value-format=“yyyy-MM-dd HH:mm:ss”

default-time=“00:00:00”

/>

<el-date-picker

v-model=“teacherQuery.end”

type=“datetime”

placeholder=“选择截止时间”

value-format=“yyyy-MM-dd HH:mm:ss”

default-time=“00:00:00”

/>

<el-button type=“primary” icon=“el-icon-search” @click=“getList()”>查询

<el-button type=“default” @click=“resetData()”>清空

<el-table

:data=“list”

border

fit

highlight-current-row>

<el-table-column

label=“序号”

width=“70”

align=“center”>

{{ (page - 1) * limit + scope.$index + 1 }}

{{ scope.row.level===1?‘高级讲师’:‘首席讲师’ }}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

资料过多,篇幅有限,需要文中全部资料可以点击这里获取前端面试资料PDF完整版!

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-jGP5cpOR-1712557280484)]

[外链图片转存中…(img-XJnIJwhC-1712557280485)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-OQAVTISu-1712557280485)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

[外链图片转存中…(img-RmzCzbEu-1712557280486)]

[外链图片转存中…(img-BW2wkGww-1712557280486)]

资料过多,篇幅有限,需要文中全部资料可以点击这里获取前端面试资料PDF完整版!

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值