教育平台项目后台管理系统:课程信息模块

本文详细介绍了教育平台项目后台管理系统中课程信息模块的开发流程,包括需求分析、数据库表设计、 Dao 和 Service 层的编写。重点讲述了如何实现查询课程列表、多条件查询、新建、修改课程营销信息及修改课程状态等功能。通过 Postman 进行接口测试,确保功能的正确性。同时,文中还涉及文件上传至服务器和图片 URL 优化的实现细节。
摘要由CSDN通过智能技术生成

开发流程

需求分析

跟项目经理交流和分析需求文档。

课程信息相关的展示,查询,以及操作。

数据库表分析

数据库表和需求文档进行匹配,如分析哪些字段需要被使用。

需要使用数据库的课程信息表 - course。

实体类设计

根据数据库中的 Course 表对应创建 Course.java

@Data
public class Course implements Serializable {
   

    // 使用 @JSONField(ordinal = int 类型的值) 指定排序的值,生成 JSON 时会按照指定顺序进行排序
    // 使用 @JSONField(serialize = false) 排除不需要转换的字段
    // 另外 fastjson 还会自动排除为空的字段

    // 课程 ID
    @JSONField(ordinal = 1)
    private int id;

    //课程名称
    @JSONField(ordinal = 2)
    private String course_name;

    //课程介绍
    @JSONField(ordinal = 3)
    private String brief;

    //讲师名称
    @JSONField(ordinal = 4)
    private String teacher_name;

    //讲师介绍
    @JSONField(ordinal = 5)
    private String teacher_info;

    //课程原价
    @JSONField(ordinal = 6)
    private double price;

    //原价标签
    @JSONField(ordinal = 7)
    private String price_tag;

    //课程优惠价
    @JSONField(ordinal = 8)
    private double discounts;

    //课程概述
    @JSONField(ordinal = 9)
    private String preview_first_field;

    //课程概述第二个字段
    @JSONField(ordinal = 10)
    private String preview_second_field;

    //分享图片 url
    @JSONField(ordinal = 11)
    private String course_img_url;

    //分享标题
    @JSONField(ordinal = 12)
    private String share_title;

    //分享描述
    @JSONField(ordinal = 13)
    private String share_description;

    //课程描述
    @JSONField(ordinal = 14)
    private String course_description;

    //排序
    @JSONField(ordinal = 15)
    private int sort_num;

    //课程状态,0 - 草稿,1 -上架
    @JSONField(ordinal = 16)
    private int status;

    //创建时间
    @JSONField(ordinal = 17)
    private String create_time;

    //修改时间
    @JSONField(ordinal = 18)
    private String update_time;

    //是否删除
    @JSONField(ordinal = 19)
    private int isDel;

    @JSONField(ordinal = 20)
    private String share_image_title; //分享图 title

    @JSONField(serialize = false)
    private int total_course_time; //课时数

    @JSONField(serialize = false)
    private int sales; //显示销量

    @JSONField(serialize = false)
    private int actual_sales; //真实销量

    @JSONField(serialize = false)
    private int is_new; //是否新品

    @JSONField(serialize = false)
    private String is_new_des; //广告语

    @JSONField(serialize = false)
    private int last_operator_id; //最后操作者

    @JSONField(serialize = false)
    private int total_duration; //总时长

    @JSONField(serialize = false)
    private long course_type; //课程类型

    @JSONField(serialize = false)
    private String last_notice_time;  //最后课程最近通知时间

    @JSONField(serialize = false)
    private long is_gray; //是否是灰度课程

    @JSONField(serialize = false)
    private long grade; //级别
}
Dao 接口及实现类编写
/**
 * 课程模块 DAO 层接口
 * */
public interface CourseDao {
   
	...
}

/**
 * 课程模块 DAO 层实现类
 * */
public class CourseDaoImpl implements CourseDao {
   
	...
}
Service 接口及实现类编写
/**
 *  课程模块 Service 层 接口
 * */
public interface CourseService {
   
	...
}

/**
 * 课程模块 Service 层 实现类
 * */
public class CourseServiceImpl implements CourseService {
   
	...
}
CourseServlet 编写

CourseServlet 继承通用的 BaseServlet

@WebServlet(name="courseServlet", value="/course")
public class CourseServlet extends BaseServlet {
   
	...
}

功能一:查询课程列表信息

需求分析

分析需求文档的对应页面,查看需要展示课程列表的哪些数据。

编写代码
Dao 层

修改 CourseDao,添加 findCourseList 方法。

/**
 * 查询课程列表信息
 */
public List<Course> findCourseList();

实现类 CourseDaoImpl

/**
 * 查询课程列表信息
 */
@Override
public List<Course> findCourseList() {
   

    try {
   
        // 创建 Query Runner
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        // 编写 SQL:判断是否删除,取出 is_del = 0 的数据,即未删除的数据
        String sql = "SELECT `id`, `course_name`, `price`, `sort_num`, `status` FROM `course` WHERE is_del = ?";

        // 执行查询
        return qr.query(sql, new BeanListHandler<Course>(Course.class), 0);
    } catch (SQLException throwables) {
   
        throwables.printStackTrace();
    }

    return null;
}
补充说明

逻辑删除:逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识做修改操作;比如 0 是未删除,1 是删除;在逻辑上数据是被删除的,但数据本身依然存在库中。

物理删除:物理删除就是真正的从数据库中做删除操作了。

Service 层

修改 CourseService 添加 findCourseList 方法。

/**
 * 查询课程列表
 */
public List<Course> findCourseList();

实现类 CourseServiceImpl

/**
 * 创建 CourseDao
 */
CourseDao courseDao = new CourseDaoImpl();

/**
 * 查询课程列表
 */
@Override
public List<Course> findCourseList() {
   
    return courseDao.findCourseList();
}
接口开发说明

接口文档:

前端的开发基于服务端编写的接口,如果前端人员等待服务端人员将接口开发完毕再去开发前端内容这样做效率是 非常低下的;所以当接口定义完成,可以使用工具生成接口文档,前端人员查看接口文档即可进行前端开发;这样 前端和服务人员并行开发,大大提高了生产效率。

开发规范:

  • Get 请求时,采用 key / value 格式请求,Servlet中可以使用 getParameter() 获取。
  • Post 请求时有三种数据格式:JSON 数据,JSON 类型的数据 Servlet 中使用 fastJson 进行解析;提交 form 表单数据;文件等多部件类型 multipart / form-data。
  • 响应结果统一格式为 JSON。因为 JSON 数据格式比较简单,易于读写;JSON 格式能够直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,但是完成的任务不变,易于维护。
编写 CourseServlet

CourseServlet 中添加 findCourseList 方法。

@WebServlet("/course")
public class CourseServlet extends BaseServlet {
   

    /**
     * 查询课程信息列表
     */
    public void findCourseList(HttpServletRequest req, HttpServletResponse resp) {
   
        try {
   
            // 业务处理
            CourseService courseService = new CourseServiceImpl();
            List<Course> courseList = courseService.findCourseList();

            // 响应结果
            // FastJson 的 SimplePropertyPreFilter 指定要转换的 JSON 字段
            SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Course.class,
                    "id", "course_name", "price", "sort_num", "status");
            String result = JSON.toJSONString(courseList, filter);
            resp.getWriter().print(result);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }

}
Postman
Postman 介绍

Postman 是一款功能强大的 http 接口测试工具,使用 postman 可以完成 http 各种请求的功能测试。

官方地址:https://www.getpostman.com/

Postman 使用

使用 postman 创建请求来测试接口;创建课程模块,将请求保存到对应模块中。

功能二:多条件查询课程信息

需求分析

根据课程名称和课程状态进行查询。

要查询的字段:id, course_name, price, sort_num, STATUS

查询条件:is_del, course_name, statuts

编写代码
Dao 层

因为是多条件查询,所以要注意多个参数情况下 SQL 的编写

CourseDao

public List<Course> findByCourseNameAndStatus(String courseName, String status);

CourseDaoImpl

/**
 * 根据课程名和课程状态条件查询课程信息
 */
@Override
public List<Course> findByCourseNameAndStatus(String courseName, String status) {
   
    try {
   
        // 创建 QueryRunner
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        // 编写 SQL:当前的查询为多条件不定项查询
        // 创建 StringBuffer 对象,将 SQL 字符串添加进缓冲区
        StringBuffer stringBuffer = new StringBuffer("SELECT `id`, `course_name`, `price`, `sort_num`, `status` FROM `course` WHERE 1 = 1 AND `is_del` = ?");
        // 创建 list 集合保存参数
        List<Object> list =
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值