JavaWeb 日程管理项目

0 阅读3分钟

创建数据库

# 新建一个数据库
CREATE DATABASE IF NOT EXISTS schedule_system CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;

# 创建日程表
DROP TABLE IF EXISTS `sys_schedule`;
CREATE TABLE sys_schedule (
  sid INT PRIMARY KEY AUTO_INCREMENT,
  uid INT NOT NULL,
  title VARCHAR(50) NOT NULL,
  # 是否完成
  completed TINYINT(1) NOT NULL DEFAULT 0,
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

# 创建用户表
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE sys_user (
  uid INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL UNIQUE,
  user_pwd VARCHAR(255) NOT NULL,
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

# 插入用户数据
INSERT INTO sys_user (username, user_pwd) VALUES ('zhangsan', 'e10adc3949ba59abbe56e057f20f883e');
INSERT INTO sys_user (username, user_pwd) VALUES ('lisi', 'e10adc3949ba59abbe56e057f20f883e');

image.png

image.png

创建 JavaWeb 项目

  • 创建项目 image.png image.png

  • 为项目增加 Tomcat 依赖 image.png image.png

  • 项目增加 Web 资源组件

  1. 选择File-->Project Structure菜单 image.png
  2. Project Structure中,左侧选中Modules,右侧点击 + 号; image.png
  3. 在Add弹出框的下方Framework,选中相应的框架支持。 image.png image.png

连接数据库

  1. 新建数据源 image.png
  2. 测试连接 image.png

创建数据库实体类

  1. 创建一个包,专门放实体类 image.png image.png
  2. 新建实体类
    image.png
  3. 使用 Lombok 生成类中的 getter setter 等等...
    image.png image.png image.png 导入 Lombok 的 jar 包。
    image.png image.png 添加注解,就不用手动去写 getter setter equals hashcode toString
package com.atguigu.schedule.pojo;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Data;

import java.time.LocalDateTime;
/*
 * 1 实体类的类名和表格名称应该对应  (对应不是一致)
 * 2 实体类的属性名和表格的列名应该对应
 * 3 每个属性都必须是私有的
 * 4 每个属性都应该具备 getter setter
 * 5 必须具备无参构造器
 * 6 应该实现序列化接口( 缓存  分布式项目数据传递  可能会将对象序列化 )
 * 7 应该重写类的hashcode和equals方法
 * 8 toString是否重写都可以
 */
@AllArgsConstructor // 添加全参构造
@NoArgsConstructor // 添加无参构造
@Data // getter setter equals hashcode toString
public class SysUser {
    private Integer uid;
    private String username;
    private String userPwd;
    private LocalDateTime createTime;
}

创建数据访问对象 DAO

  1. 定义接口 SysScheduleDao
package com.atguigu.schedule.dao;
import com.atguigu.schedule.pojo.SysSchedule;
public interface SysScheduleDao {
    int addSchedule(SysSchedule schedule);
}
  1. 实现接口
    创建 impl 文件夹,创建 SysScheduleDaoImplSysUserDaoImpl
package com.atguigu.schedule.dao.impl;

import com.atguigu.schedule.dao.SysScheduleDao;
import com.atguigu.schedule.pojo.SysSchedule;

public class SysScheduleDaoImpl implements SysScheduleDao {
    @Override
    public int addSchedule(SysSchedule schedule) {
        return 0;
    }
}
package com.atguigu.schedule.dao.impl;

import com.atguigu.schedule.dao.SysUserDao;
import com.atguigu.schedule.pojo.SysUser;

public class SysUserDaoImpl implements SysUserDao {

    @Override
    public int addUser(SysUser user) {
        return 0;
    }
}

JDBC使用

  1. 导入 druid-1.1.21.jar 包 和 mysql 驱动 image.png
  2. 创建jdbc.properties配置文件
    创建 resources 文件夹
    创建配置文件 jdbc.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/schedule_system
username=root
password=root
initialSize=5
maxActive=10
maxWait=1000

标记 resources 目录,使得能与 src 打包到一块 image.png

  • 创建 BaseDao 类,对增删改查进行封装
public class BaseDao {
    // 公共的查询方法  返回的是单个对象
    public <T> T baseQueryObject(Class<T> clazz, String sql, Object ... args) {...}
    // 公共的查询方法  返回的是对象的集合
    public <T> List<T> baseQuery(Class clazz, String sql, Object ... args){...}
    // 通用的增删改方法
    public int baseUpdate(String sql, Object ... args){...}
}
  • SysScheduleDaoImpl、SysUserDaoImpl 使用了 BaseDao 提供的数据库操作函数,实现了接口 SysScheduleDao、SysUserDao。

service 包处理

定义了以 sys_user、sys_schedule 表格为核心的业务处理 分别定义 SysScheduleService、SysUserService 接口,并且创建实现类:

public interface SysScheduleService {}

public interface SysUserService {}


package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.service.SysUserService;
public class SysUserServiceImpl implements SysUserService {}

package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.service.SysScheduleService;
public class SysScheduleServiceImpl implements SysScheduleService {
}

controller 包处理

写一个公共路径处理类:

public class BaseController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String requestURI = req.getRequestURI();
        String[] split = requestURI.split("/");
        String methodName = split[split.length - 1];
        // 通过反射获取要执行的方法
        Class clazz = this.getClass();
        try {
            Method method = clazz.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            // 设置方法可以访问
            method.setAccessible(true);
            // 通过反射执行代码
            method.invoke(this, req, resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

用户类/日程类 继承 公共路径处理类

package com.atguigu.schedule.controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/schedule/*")
public class SysScheduleController extends BaseController {
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("add");
    }
}

tomcat 部署项目操作

image.png image.png