SpringBoot2.x+Spring5+Mybits3.x后期使用vue前端构建前后端分离-3 在线教育需求分析

在线教育是现有的主流互联网项目,前后端分离,支持高并发访问

后端开发人员在大公司:

  • 不需要掌握深层次的前端
  • 专业的人做专业的东西,前端负责页面,后端工程师负责接口

在线课堂 需求模块(简化开发)

  • 用户注册-登陆
  • 视频管理模块CRUD
  • 视频列表查询
  • 全局异常处理
  • 日志统计记录
  • ...

数据查询和存储

  • 前期是内存数据库存储-HashMap-Arraylist
  • 后期使用数据库存储

从项目实战角度学习和开发功能

  • 不开发全部功能
  • 核心:学会springboot在开发项目中常见的使用

在线教育项目架构搭建

  • 创建项目

  • 配置启动类

  • 建立对应的包,先建立这些包,其他用到再补充

    • controller 控制器

    • service 业务层

    • dao(mapper)数据库访问层

    • domain 实体层

    • utils 工具

  • 初始化数据开发:视频、章、默认用户信息

分别创建两个实体类,数据库访问层和业务层

实体类

package work.flyrun.demoproject1.domain;

/**
 * @Program: demo-project1
 * @Description: 用户模块实体类
 * @Author: chen
 * @Dates: 2020-11-08-13-39
 * @Version:
 **/

public class User {
    private int id;
    private String username;
    private String pwd;

    public User(int id,String username, String pwd) {
        this.id=id;
        this.username = username;
        this.pwd = pwd;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

 

package work.flyrun.demoproject1.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * @Program: demo-project1
 * @Description: 视频模块实体类
 * @Author: chen
 * @Dates: 2020-11-08-13-31
 * @Version:
 **/

public class Video implements Serializable {
    private int id;
    private String title;
    private String summary;
    private int price;
    private String coverImg;
    private Date createTime;

    public Video(){}
    public Video(int id,String title){
        this.id = id;

        this.title = title;

        this.createTime = new Date();
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getCoverImg() {
        return coverImg;
    }

    public void setCoverImg(String coverImg) {
        this.coverImg = coverImg;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "Video{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", summary='" + summary + '\'' +
                ", price=" + price +
                ", coverImg='" + coverImg + '\'' +
                ", createTime=" + createTime +
                '}';
    }
}

访问层(dao层)

package work.flyrun.demoproject1.mapper;

import work.flyrun.demoproject1.domain.User;

import java.util.HashMap;
import java.util.Map;

/**
 * @Program: demo-project1
 * @Description: 用户模块服务访问层
 * @Author: chen
 * @Dates: 2020-11-08-13-40
 * @Version:
 **/

public class UserMapper {
    private static Map<Integer, User> userMap=new HashMap<>();
    static {
        userMap.put(1,new User(1,"admin","admin"));
    }
}
package work.flyrun.demoproject1.mapper;

import work.flyrun.demoproject1.domain.Video;

import java.util.HashMap;
import java.util.Map;

/**
 * @Program: demo-project1
 * @Description: 视频模块访问层
 * @Author: chen
 * @Dates: 2020-11-08-11-15
 * @Version:
 **/

public class VideoMapper {
    private static Map<Integer, Video> videoMap=new HashMap<>();
    static {
        videoMap.put(1,new Video(1,"视频课程"));
        videoMap.put(1,new Video(2,"面试课程"));

    }
}

业务层

package work.flyrun.demoproject1.service.impl;

import work.flyrun.demoproject1.service.UserService;

/**
 * @Program: demo-project1
 * @Description: 用户业务层实现
 * @Author: chen
 * @Dates: 2020-11-08-13-44
 * @Version:
 **/

public class UserServiceImpl implements UserService {
}
package work.flyrun.demoproject1.service;

/**
 * @Program: demo-project1
 * @Description: 用户业务层
 * @Author: chen
 * @Dates: 2020-11-08-13-43
 * @Version:
 **/

public interface UserService {
}
package work.flyrun.demoproject1.service.impl;

import work.flyrun.demoproject1.service.VideoService;

/**
 * @Program: demo-project1
 * @Description: 视频服务业务层
 * @Author: chen
 * @Dates: 2020-11-08-11-14
 * @Version:
 **/

public class VideoServiceimpl implements VideoService {
}
package work.flyrun.demoproject1.service;

public interface VideoService {
}

这样构成了基础的在线教育的网站架构

进行http请求

GET请求

  • 场景:一般的查询接口就是get请求
  • 注解:@GetMapping = @RequestMapping(method = RequestMethod.GET)

一个顶两的注解

@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)

功能:视频列表查询例子

修改之前的视频控制器中的RequestMapping请求

修改为

@RequestMapping(value = "list",method = RequestMethod.GET)
@GetMapping(value = "list")

后期会进行数据库解耦

现在先在Mapper中书写模拟数据并返回

@Repository

@Repository
public class VideoMapper {
    private static Map<Integer, Video> videoMap=new HashMap<>();
    static {
        videoMap.put(1,new Video(1,"视频课程"));
        videoMap.put(2,new Video(2,"面试课程"));

    }
    public List<Video> listVideo(){
        List<Video> list = new ArrayList<>();
        list.addAll(videoMap.values());
        return list;
    }
}

书写注解之后后扫描类不需要再new

业务层接口和业务层实现

package work.flyrun.demoproject1.service;

import work.flyrun.demoproject1.domain.Video;

import java.util.List;

public interface VideoService {
    public List<Video> listVideo();
}
package work.flyrun.demoproject1.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import work.flyrun.demoproject1.domain.Video;
import work.flyrun.demoproject1.mapper.VideoMapper;
import work.flyrun.demoproject1.service.VideoService;

import java.util.List;

/**
 * @Program: demo-project1
 * @Description: 视频服务业务层
 * @Author: chen
 * @Dates: 2020-11-08-11-14
 * @Version:
 **/
@Service
//@Component 都叫这个也行
public class VideoServiceimpl implements VideoService {
    @Autowired
    private VideoMapper videoMapper;


    @Override
    public List<Video> listVideo() {
        return videoMapper.listVideo();
    }
}

视频显示的控制器

package work.flyrun.demoproject1.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import work.flyrun.demoproject1.domain.Video;
import work.flyrun.demoproject1.service.VideoService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Program: demo-project1
 * @Description: 视频控制器
 * @Author: chen
 * @Dates: 2020-11-07-21-55
 * @Version:
 **/
//@Controller 不会返回json数据 使用restcontroller会返回json字符串
@RestController
@RequestMapping("/api/v1/video")
public class VideoController {
    @Autowired
    private VideoService videoService;
//    @RequestMapping(value = "list",method = RequestMethod.GET)
    @GetMapping(value = "list")
    public Object list(){
//        Map<String,String> map = new HashMap<>();
//        map.put("1","面试专题课程");
//        map.put("2","spring第一个json");
//        return map;
        List<Video> list= videoService.listVideo();
        return list;
    }
}

postman访问http://localhost:8080/api/v1/video/list

下一章进行接口的规范化

课程的实战源码是我在 GitHub 上开源项目 spring-boot-projects 中的其中一个项目代码,目前已有 2300 多个 star,项目截图如下: 由于项目比较受大家欢迎,因此心中就出现了将它做成教学视频的想法,也就是你现在了解的这个课程《SpringBoot入门及前后端分离项目开发》,本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;这最后的项目实战为课程的主要部分,我会带着大家实际的开发一个前后端分离Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其中的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; 以下为实践项目的页面和功能展示,分别为:登录页面 列表页面(分页功能) 图片上传功能 富文本编辑器整合使用 实践项目的主要功能和页面就是这些,通过项目展示大家也能够感受到,在实际应用开发中的高频次功能都已经实现,稍加修改就可以运用到企业开发中,整个项目的开发模式为前后端分离的模式,即 Spring Boot 提供后端接口,前端页面通过 Ajax 异步调用接口的方式与后端服务器进行交互并将数据填充至页面中,这也是目前企业开发中比较重用的开发模式,希望大家能够了解并且能够实际的上手开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值