周末拿最近学习的知识 (JDBC, Servlet, JSP) 做一个小案例, 本来周末就应该整理笔记的, 但是打球也不能耽误啊, 所以只好赶着在今天下班的时间, 做下记录.
技术准备
Java 基础知识, JavaEE 基础
tomcat, servlet, jsp(EL + JSTL)
web前端的基础知识
html, css, javascript基础 + Jquery 基础
关系型数据库
使用 SpringJDBC 操作 mysql
开发工具
IDEA, JDK8.0
需求分析
使用 mysql 来存储学生信息
页面上完成学生数据的展示, 可进行学生信息的增删改差, 然后支持上一页, 下一页操作, 以及学生信息查询.
实现
一. 表结构设计
创建数据库: student
将编码设置为 utf-8, 便于存取中文
drop database if exists student;
create database student default charset=utf8;
创建表: student
create table student(
id int unsigned primary key auto_increment not null,
student_id varchar(20) not null unique COMMENT '学号',
name varchar(20) not null,
gender varchar(5),
birthday date,
address varchar(50),
qq varchar(20),
email varchar(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
设置student_id的原因是因为学号可能会改变, 而主键 id 无法修改.
二. 创建JavaEE项目, 导入 jar 包
项目结构图如下:
三. 准备前端页面 (原型设计)
在项目中就是前端的 html 代码, 这一步也非常的重要.
首页以列表的形式展示学生信息
新增 和 修改信息页面, 这两个页面应该长的很像
如果把新增和修改看成一个页面, 那么一共就两个页面 ~
学生信息列表
添加学生页面
编辑学生页面
四. src目录层次结构
代码模块的划分:
实体类: student (就一张学生表, 所以对应的实体类只有一个)
数据访问对象: dao (操作学生对象的 StudentDao)
逻辑处理: Servlet (学生信息列表展示, 新增, 修改, 删除学生信息)
工具类: JDBCDruidUtils (封装了 SpringJDBC 对数据库的操作)
单元测试: test
在 src 目录下创建代码的层次结构:
五. 具体代码逻辑实现
student 实体类
package com.student.entity;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Student {
private int id;
private String studentId;
private String name;
private String gender;
private Date birthday;
private String address;
private String qq;
// setter and getter , 日期类型需要额外转换下
public String getBirthday() {
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
return formater.format(this.birthday);
}
public void setBirthday(String birthday) {
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = formater.parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
this.birthday = date;
}
}
JDBCDruidUtils 连接池:
package com.student.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
i