在线教育是现有的主流互联网项目,前后端分离,支持高并发访问
后端开发人员在大公司:
- 不需要掌握深层次的前端
- 专业的人做专业的东西,前端负责页面,后端工程师负责接口
在线课堂 需求模块(简化开发)
- 用户注册-登陆
- 视频管理模块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