文章大纲
加载中...

待办清单项目14:实现待办事项的增删改查

5/16/2025 160 阅读
待办清单项目14:实现待办事项的增删改查

实现查询待办的功能

1.打开IDEA后端代码,找到SysTodoService文件,把代码改成下面这样

package com.youngshu.todolist.service;

import com.youngshu.todolist.pojo.SysTodo;

import java.util.List;

/**
 * 定义系统待办事项的业务逻辑接口
 */
public interface SysTodoService {
    List<SysTodo> findByUserId(int uid);
}

2.找到SysTodoServiceImpl文件,把代码改成下面这样

package com.youngshu.todolist.service.impl;
import com.youngshu.todolist.dao.SysTodoDao;
import com.youngshu.todolist.dao.impl.SysTodoDaoImpl;
import com.youngshu.todolist.pojo.SysTodo;
import com.youngshu.todolist.service.SysTodoService;

import java.util.List;

/**
 * 实现待办事项接口
 */
public class SysTodoServiceImpl implements SysTodoService {
    private SysTodoDao todoDao = new SysTodoDaoImpl();
    @Override
    public List<SysTodo> findByUserId(int uid) {
        return todoDao.findByUserId(uid);
    }
}

3.找到SysTodoController文件,把代码改成下面这样

package com.youngshu.todolist.controller;

import com.youngshu.todolist.common.Result;
import com.youngshu.todolist.pojo.SysTodo;
import com.youngshu.todolist.utils.WebUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import com.youngshu.todolist.service.SysTodoService;
import com.youngshu.todolist.service.impl.SysTodoServiceImpl;

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

// 处理与待办事项相关的HTTP请求
@WebServlet("/todo/*")
public class SysTodoController extends BaseController {
    private SysTodoService sysTodoService = new SysTodoServiceImpl();
    // 添加新的待办事项
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("add todo");
    }
    // 删除指定的待办事项
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("delete todo");
    }
    // 编辑指定的待办事项
    protected void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("edit todo");
    }
    // 列出用户的所有的待办事项
    protected void findByUserId(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 接收请求中的uid参数
        int uid =Integer.parseInt(req.getParameter("uid"));
        // 查询用户的所有日程
        List<SysTodo> itemList =sysTodoService.findByUserId(uid);
        // 将用户的所有日程放入一个Result对象
        Map data =new HashMap();
        data.put("itemList",itemList);
        Result result = Result.ok(data);
    // 将Result对象转换为json响应给客户端
        WebUtils.writeJson(resp,result);
    }
}

4.找到LoginFilter文件,把该文件删除,或者把里面的代码全部注释掉

5.启动Tomcat服务器

6.打开vscode,把ShowTodoList.vue文件的代码改成下面这样

<script setup>
import { ref, computed, onMounted } from 'vue'
import { defineUser } from '../store/userStore.js'
import { defineTodoList } from '../store/todoStore.js'
import request from '../utils/request'

let sysUser = defineUser()
let todoList = defineTodoList()

// 新增待办输入
const newTodoTitle = ref('')

// 只显示当前用户的事项
const userTodos = computed(() => {
  if (!sysUser.uid) return []
  return todoList.list.filter(item => item.uid === sysUser.uid)
})

// 挂载时拉取数据
onMounted(async () => {
  let { data } = await request.get("TodoList/todo/findByUserId", { params: { "uid": sysUser.uid } })
  todoList.list = data.data.itemList
})

// 新增待办
async function addTodo() {
  const title = newTodoTitle.value.trim()
  if (!title) return
  // 发送请求新增
  let { data } = await request.post("TodoList/todo/add", {
    uid: sysUser.uid,
    title,
    completed: 0
  })
  if (data.code === 200) {
    // 新增成功后刷新
    todoList.list.push({
      sid: data.data.sid,
      uid: sysUser.uid,
      title,
      completed: 0
    })
    newTodoTitle.value = ''
  } else {
    alert('添加失败')
  }
}

// 切换完成状态
async function toggleCompleted(todo) {
  let { data } = await request.post("TodoList/todo/update", todo)
  if (data.code === 200) {
    todo.completed = todo.completed==1 ? 0 : 1
  } else {
    alert('更新失败')
  }
}

// 删除事项
async function removeTodo(sid) {
  //根据sid在todoList.list中查找出对应的todo对象
  let todo = todoList.list.find(item => item.sid === sid)
  let { data } = await request.post("TodoList/todo/delete", todo)
  if (data.code === 200) {
    todoList.list = todoList.list.filter(item => item.sid !== sid)
  } else {
    alert('删除失败')
  }
}
</script>

<template>
  <div class="todolist-wrapper">
    <div class="todolist-card">
      <div class="todolist-header">
        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="#4361ee" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M16 3v4"/><path d="M8 3v4"/></svg>
        <h2>我的待办事项</h2>
        <p>管理你的每日任务,保持高效!</p>
      </div>
      <form class="add-todo-form" @submit.prevent="addTodo">
        <input
          v-model="newTodoTitle"
          type="text"
          placeholder="请输入新的待办事项"
          class="input-todo"
        />
        <button type="submit" class="btn-add">添加</button>
      </form>
      <div v-if="userTodos.length > 0" class="todo-list">
        <div v-for="todo in userTodos" :key="todo.sid" class="todo-item" :class="{completed: todo.completed}">
          <label>
            <input type="checkbox" :checked="todo.completed" @change="toggleCompleted(todo)" />
            <span class="todo-title">{{ todo.title }}</span>
          </label>
          <button class="btn-delete" @click="removeTodo(todo.sid)">删除</button>
        </div>
      </div>
      <div v-else class="empty-tip">
        <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" stroke="#ccc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-inbox"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 3v4"/><path d="M8 3v4"/></svg>
        <p>暂无待办事项,快去添加吧!</p>
      </div>
    </div>
  </div>
</template>

<style scoped>
.todolist-wrapper {
  flex-grow: 1;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 2rem;
}
.todolist-card {
  background: white;
  padding: 2.5rem 3rem;
  border-radius: 12px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  width: 100%;
  max-width: 420px;
  text-align: center;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.todolist-header {
  margin-bottom: 1.5rem;
}
.todolist-header h2 {
  margin: 0.5rem 0 0.2rem;
  font-size: 1.4rem;
  color: #4361ee;
}
.todolist-header p {
  margin: 0;
  font-size: 0.95rem;
  color: #666;
}
.add-todo-form {
  display: flex;
  gap: 0.5rem;
  margin-bottom: 1.2rem;
}
.input-todo {
  flex: 1;
  padding: 0.6rem 1rem;
  border: 1px solid #ddd;
  border-radius: 6px;
  font-size: 1rem;
  transition: border-color 0.3s;
}
.input-todo:focus {
  outline: none;
  border-color: #4361ee;
}
.btn-add {
  background: linear-gradient(90deg, #4361ee 0%, #3a53c0 100%);
  color: white;
  border: none;
  border-radius: 6px;
  padding: 0.6rem 1.2rem;
  font-size: 1rem;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.2s;
}
.btn-add:hover {
  background: #4361ee;
}
.todo-list {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}
.todo-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: #f8f9fa;
  border-radius: 6px;
  padding: 0.7rem 1rem;
  transition: background 0.2s;
}
.todo-item.completed .todo-title {
  text-decoration: line-through;
  color: #aaa;
}
.todo-title {
  font-size: 1rem;
  margin-left: 0.5rem;
}
.btn-delete {
  background: #ef476f;
  color: #fff;
  border: none;
  border-radius: 4px;
  padding: 0.3rem 0.8rem;
  cursor: pointer;
  font-size: 0.9rem;
  transition: background 0.2s;
}
.btn-delete:hover {
  background: #d90429;
}
.empty-tip {
  color: #aaa;
  margin-top: 2rem;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.empty-tip p {
  margin-top: 0.5rem;
  font-size: 1rem;
}
</style>

7.打开数据库的sys_user表格,查看上一次课自己创建的用户名的uid,记在心里

8.按下图所示的步骤手动添加一些数据(注意uid要设置成上一步你的uid,添加完数据后点向上的箭头更新数据表)

9.启动前端服务器,访问前端页面,登录之后,可以看到你的待办事项

实现添加、删除和更新的功能

1.找到ResultCodeEnum文件,把代码改成下面这样

package com.youngshu.todolist.common;

// 定义一个枚举类型 ResultCodeEnum,用于表示操作结果的不同状态码及其对应的描述信息。
public enum ResultCodeEnum {
    // 表示操作成功,状态码为 200,描述信息为 "success"。
    SUCCESS(200, "success"),
    // 表示用户名错误,状态码为 501,描述信息为 "usernameError"。
    USERNAEM_ERROR(501, "usernameError"), // 注意:这里拼写错误,应该是 USERNAME_ERROR
    // 表示密码错误,状态码为 503,描述信息为 "passwordError"。
    PASSWORD_ERROR(503, "passwordError"),
    // 表示用户未登录,状态码为 504,描述信息为 "notlogin"。
    NOTLOGIN(504, "notlogin"),
    // 表示用户名已被使用,状态码为 505,描述信息为 "usernameUsed"。
    USERNAME_USED(505, "usernameUsed"), INSERT_ERROR(506, "insertError"), UPDATE_ERROR(507, "updateError"), DELETE_ERROR(508, "deleteError"), SELECT_ERROR(509, "selectError"), OTHER_ERROR(510, "otherError");

    // 私有成员变量 code,用于存储状态码。
    private Integer code;
    // 私有成员变量 message,用于存储描述信息。
    private String message;
    // 私有构造方法 ResultCodeEnum,用于初始化枚举实例的状态码和描述信息。
    private ResultCodeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
    // 公共方法 getCode,用于获取枚举实例的状态码。
    public Integer getCode() {
        return code;
    }
    // 公共方法 getMessage,用于获取枚举实例的描述信息。
    public String getMessage() {
        return message;
    }
}

2.找到SysTodoDao文件,把代码改成下面这样

package com.youngshu.todolist.dao;

import com.youngshu.todolist.pojo.SysTodo;
import java.util.List;

/**
 * 待办事项数据访问接口
 * 该接口定义了对待办事项(sys_todo表)的基本CRUD操作
 *
 * @author youngshu
 * @version 1.0
 * @since 2024-04-10
 */
public interface SysTodoDao {
    /**
     * 添加新的待办事项
     *
     * @param sysTodo 待添加的待办事项对象,不能为null
     * @return 影响的行数,插入成功返回1,失败返回0
     */
    int insert(SysTodo sysTodo);
    
    /**
     * 更新待办事项信息
     *
     * @param sysTodo 待更新的待办事项对象,必须包含sid,不能为null
     * @return 影响的行数,更新成功返回1,失败返回0
     */
    int update(SysTodo sysTodo);
    
    /**
     * 根据ID删除待办事项
     *
     * @param sid 待办事项ID
     * @return 影响的行数,删除成功返回1,失败返回0
     */
    int delete(int sid);
    
    /**
     * 根据ID查找待办事项
     *
     * @param sid 待办事项ID
     * @return 查找到的待办事项对象,如果不存在返回null
     */
    SysTodo findById(int sid);
    
    /**
     * 查找指定用户的所有待办事项
     *
     * @param uid 用户ID
     * @return 该用户的所有待办事项列表,如果没有则返回空列表
     */
    List<SysTodo> findByUserId(int uid);
    
    /**
     * 查找所有待办事项
     *
     * @return 所有待办事项的列表,如果没有则返回空列表
     */
    List<SysTodo> findAll();
    
    /**
     * 更新待办事项的完成状态
     *
     * @param sid 待办事项ID
     * @param completed 完成状态:0-未完成,1-已完成
     * @return 影响的行数,更新成功返回1,失败返回0
     */
    int updateCompleted(int sid, int completed);
}

3.找到SysTodoDaoImpl文件,把代码改成下面这样

package com.youngshu.todolist.dao.impl;

import com.youngshu.todolist.dao.SysTodoDao;
import com.youngshu.todolist.pojo.SysTodo;
import com.youngshu.todolist.utils.JDBCUtils;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 实现SysTodoDao接口的类,用于对sys_todo表进行数据库操作
 */
public class SysTodoDaoImpl implements SysTodoDao {

    /**
     * 插入新的待办事项到数据库
     * @param sysTodo 待办事项对象
     * @return 插入成功返回1,失败返回0
     */
    @Override
    public int insert(SysTodo sysTodo) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "INSERT INTO sys_todo (uid, title, completed) VALUES (?, ?, ?)";
            ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            ps.setInt(1, sysTodo.getUid());
            ps.setString(2, sysTodo.getTitle());
            ps.setInt(3, sysTodo.getCompleted());
            int affectedRows = ps.executeUpdate();
            if (affectedRows == 0) {
                return -1;
            }
            rs = ps.getGeneratedKeys();
            if (rs.next()) {
                return rs.getInt(1); // 返回主键sid
            } else {
                return -1;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return -1;
        } finally {
            JDBCUtils.closeResource(conn, ps, rs);
        }
    }

    /**
     * 更新指定待办事项的信息
     * @param sysTodo 待办事项对象,包含更新后的信息
     * @return 更新成功返回1,失败返回0
     */
    @Override
    public int update(SysTodo sysTodo) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "UPDATE sys_todo SET title = ?, completed = ? WHERE sid = ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, sysTodo.getTitle());
            ps.setInt(2, sysTodo.getCompleted());
            ps.setInt(3, sysTodo.getSid());
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } finally {
            JDBCUtils.closeResource(conn, ps, null);
        }
    }

    /**
     * 根据待办事项ID删除待办事项
     * @param sid 待办事项ID
     * @return 删除成功返回1,失败返回0
     */
    @Override
    public int delete(int sid) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "DELETE FROM sys_todo WHERE sid = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, sid);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } finally {
            JDBCUtils.closeResource(conn, ps, null);
        }
    }

    /**
     * 根据待办事项ID查找待办事项
     * @param sid 待办事项ID
     * @return 找到的待办事项对象,未找到返回null
     */
    @Override
    public SysTodo findById(int sid) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "SELECT * FROM sys_todo WHERE sid = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, sid);
            rs = ps.executeQuery();
            if (rs.next()) {
                return new SysTodo(
                    rs.getInt("sid"),
                    rs.getInt("uid"),
                    rs.getString("title"),
                    rs.getInt("completed")
                );
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.closeResource(conn, ps, rs);
        }
        return null;
    }

    /**
     * 根据用户ID查找该用户的所有待办事项
     * @param uid 用户ID
     * @return 该用户的所有待办事项列表
     */
    @Override
    public List<SysTodo> findByUserId(int uid) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<SysTodo> todoList = new ArrayList<>();
        try {
            conn = JDBCUtils.getConnection();
            String sql = "SELECT * FROM sys_todo WHERE uid = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, uid);
            rs = ps.executeQuery();
            while (rs.next()) {
                todoList.add(new SysTodo(
                    rs.getInt("sid"),
                    rs.getInt("uid"),
                    rs.getString("title"),
                    rs.getInt("completed")
                ));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.closeResource(conn, ps, rs);
        }
        return todoList;
    }

    /**
     * 查找数据库中所有的待办事项
     * @return 所有待办事项列表
     */
    @Override
    public List<SysTodo> findAll() {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<SysTodo> todoList = new ArrayList<>();
        try {
            conn = JDBCUtils.getConnection();
            String sql = "SELECT * FROM sys_todo";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                todoList.add(new SysTodo(
                    rs.getInt("sid"),
                    rs.getInt("uid"),
                    rs.getString("title"),
                    rs.getInt("completed")
                ));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.closeResource(conn, ps, rs);
        }
        return todoList;
    }

    /**
     * 更新指定待办事项的完成状态
     * @param sid 待办事项ID
     * @param completed 完成状态,1表示已完成,0表示未完成
     * @return 更新成功返回1,失败返回0
     */
    @Override
    public int updateCompleted(int sid, int completed) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "UPDATE sys_todo SET completed = ? WHERE sid = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, completed);
            ps.setInt(2, sid);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } finally {
            JDBCUtils.closeResource(conn, ps, null);
        }
    }
}

4.找到SysTodoService文件,把代码改写如下

package com.youngshu.todolist.service;

import com.youngshu.todolist.pojo.SysTodo;

import java.util.List;

/**
 * 定义系统待办事项的业务逻辑接口
 */
public interface SysTodoService {
    List<SysTodo> findByUserId(int uid);
    int insert(SysTodo todo);
    int delete(int id);
    int update(SysTodo todo);
}

5.找到SysTodoServiceImpl文件,把代码改下如下

package com.youngshu.todolist.service.impl;
import com.youngshu.todolist.dao.SysTodoDao;
import com.youngshu.todolist.dao.impl.SysTodoDaoImpl;
import com.youngshu.todolist.pojo.SysTodo;
import com.youngshu.todolist.service.SysTodoService;

import java.util.List;

/**
 * 实现待办事项接口
 */
public class SysTodoServiceImpl implements SysTodoService {
    private SysTodoDao todoDao = new SysTodoDaoImpl();
    @Override
    public List<SysTodo> findByUserId(int uid) {
        return todoDao.findByUserId(uid);
    }

    @Override
    public int insert(SysTodo todo) {
        return todoDao.insert(todo);
    }

    @Override
    public int delete(int id) {
        return todoDao.delete(id);
    }

    @Override
    public int update(SysTodo todo) {
        return todoDao.update(todo);
    }
}

6.找到SysTodoController文件,把代码改写如下

package com.youngshu.todolist.controller;

import com.youngshu.todolist.common.Result;
import com.youngshu.todolist.common.ResultCodeEnum;
import com.youngshu.todolist.pojo.SysTodo;
import com.youngshu.todolist.pojo.SysUser;
import com.youngshu.todolist.utils.WebUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import com.youngshu.todolist.service.SysTodoService;
import com.youngshu.todolist.service.impl.SysTodoServiceImpl;

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

// 处理与待办事项相关的HTTP请求
@WebServlet("/todo/*")
public class SysTodoController extends BaseController {
    private SysTodoService sysTodoService = new SysTodoServiceImpl();
    // 添加新的待办事项
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1 接收客户端提交的json参数,并转换为SysTodo对象对象,获取信息
        SysTodo todo = WebUtils.readJson(req, SysTodo.class);
        // 2. 调用 service 保存
        int sid = sysTodoService.insert(todo);
        // 3. 返回结果
        //如果sid为0,说明插入失败
        Result result = Result.ok(null);
        if(sid < 0){
            result = Result.build(null,ResultCodeEnum.INSERT_ERROR);
        }
        Map<String, Object> data = new HashMap<>();
        data.put("sid", sid);
        result = Result.ok(data);
        WebUtils.writeJson(resp, result);
    }
    // 删除指定的待办事项
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1 接收客户端提交的json参数,并转换为SysTodo对象对象,获取信息
        SysTodo todo = WebUtils.readJson(req, SysTodo.class);
        // 2. 调用 service 删除
        int rows = sysTodoService.delete(todo.getSid());
        // 3. 返回结果
        Result result = Result.ok(null);
        if(rows < 0){
            result = Result.build(null,ResultCodeEnum.DELETE_ERROR);
        }
        WebUtils.writeJson(resp, result);
    }
    // 更新指定的待办事项
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1 接收客户端提交的json参数,并转换为SysTodo对象对象,获取信息
        SysTodo todo = WebUtils.readJson(req, SysTodo.class);
        int completed = todo.getCompleted();
        todo.setCompleted(completed == 1 ? 0 : 1);
        // 2. 调用 service 更新
        int rows = sysTodoService.update(todo);
        // 3. 返回结果
        Result result = Result.ok(null);
        if(rows < 0){
            result = Result.build(null,ResultCodeEnum.UPDATE_ERROR);
        }
        WebUtils.writeJson(resp, result);
    }
    // 列出用户的所有的待办事项
    protected void findByUserId(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 接收请求中的uid参数
        int uid =Integer.parseInt(req.getParameter("uid"));
        // 查询用户的所有日程
        List<SysTodo> itemList =sysTodoService.findByUserId(uid);
        // 将用户的所有日程放入一个Result对象
        Map data =new HashMap();
        data.put("itemList",itemList);
        Result result = Result.ok(data);
    // 将Result对象转换为json响应给客户端
        WebUtils.writeJson(resp,result);
    }
}

删除多余文件

1.找到LoginFilter文件,将其删除

2.删除如下图所示的后端所有html代码

3.打开Tomcat里面的编辑配置,取消勾选在启动后打开浏览器。

测试

至此,我们已经完成整个待办事项管理系统项目,接下来,重新启动Tomcat服务器,重启前端服务器,测试所有功能是否可用

作业

1.通过看代码,打断点调试等操作学习项目代码
2.给项目代码补充更加规范和详细的代码注释,写出并理解每个函数的逻辑!


评论 (0)

暂无评论,来发表第一条评论吧!