创建数据库
# 新建一个数据库
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');
创建 JavaWeb 项目
-
创建项目
-
为项目增加 Tomcat 依赖
-
项目增加 Web 资源组件
- 选择File-->Project Structure菜单
- 在Project Structure中,左侧选中Modules,右侧点击 + 号;
- 在Add弹出框的下方Framework,选中相应的框架支持。
连接数据库
- 新建数据源
- 测试连接
创建数据库实体类
- 创建一个包,专门放实体类
- 新建实体类
- 使用 Lombok 生成类中的 getter setter 等等...
导入 Lombok 的 jar 包。
添加注解,就不用手动去写
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
- 定义接口
SysScheduleDao
package com.atguigu.schedule.dao;
import com.atguigu.schedule.pojo.SysSchedule;
public interface SysScheduleDao {
int addSchedule(SysSchedule schedule);
}
- 实现接口
创建 impl 文件夹,创建SysScheduleDaoImpl、SysUserDaoImpl
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使用
- 导入
druid-1.1.21.jar包 和 mysql 驱动 - 创建
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 打包到一块
- 创建 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 部署项目操作