表结构设计
对整个项目进行深入理解,在需求分析结束之后,首先进行表结构设计。只有先把表结构设计正确,对表结构的理解到位,在接下来的开发中,才能一清二白,才能支撑软件后续的开发功能。设计过程分为四步:
- 数据库创建
- 表与表关系
- 建表SQL语句
- 表与页面
1. 数据库创建
DROP DATABASE IF EXISTS tmall;
CREAT DATABASE tmall DEFAULT CHARACTER SET utf8;
如果存在数据库tmall,就删除;
创建数据库tmall,将数据库得到编码设置为utf8,便于存放中文;
2. 表与表关系
模仿天猫整站一共需要9张表,表与表之间关系如下:
表的详细介绍:
表名 | 中文含义 | 介绍 |
Category | 分类表 | 存放分类信息,如女装,平板电视,沙发等 |
Property | 属性表 | 存放属性信息,如颜色,重量,品牌,厂商,型号等 |
Product | 产品表 | 存放产品信息,如LED40EC平板电视机,海尔EC6005热水器 |
PropertyValue | 属性值表 | 存放属性值信息,如重量是900g,颜色是粉红色 |
ProductImage | 产品图片表 | 存放产品图片信息,如产品页显示的5个图片 |
Review | 评论表 | 存放评论信息,如买回来的蜡烛很好用,么么哒 |
User | 用户表 | 存放用户信息,如斩手狗,千手小粉红 |
Order | 订单表 | 存放订单信息,包括邮寄地址,电话号码等信息 |
OrderItem | 订单项表 | 存放订单项信息,包括购买产品种类,数量等 |
3. 建表SQL语句 & 4. 表与页面
建表顺序:
建表过程中,会设置外键约束,所以表与表之间有依赖关系。因此会先建立被外键指向的表,比如User,Category,然后再是其他表。
外键:外键指的是本表的某一个字段,指向另一张表的主键(或者是有唯一约束的字段)。
用户表:
id | name | password |
1 | 王加油 | YouAreMoreThanWhatYouHaveBecome |
...... | ...... | ...... |
登录页面采集用户的账号和密码
分类表:
id | name |
1 | 沙花 |
...... | ...... |
首页的竖状导航栏显示所有17种分类信息
属性表:
本表的外键cid,指向分类表的id字段
id | cid | name |
1 | 1 | ...... |
...... | ...... | ...... |
在产品页的商品详情标签下,显示本产品对应分类所设置的所有属性。
产品表:
本表的外键cid,指向分类表的id字段
id | name | subTitle | originalPrice | promotePrice | stock | fid | createDate |
1 | ...... | ...... | ...... | ...... | ...... | ...... | ...... |
...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... |
产品页的产品信息里显示本产品的名称,小标题,原始价格,促销价,销量,库存等信息
属性值表:
本表有两个外键
外键ptid,指向属性表的id字段
外键ptid,指向产品表的id字段
id | pid | ptid | value |
...... | ...... | ...... | ...... |
在产品页的商品详情标签下,显示本产品的所有属性值
产品图片表:
type表示类型,产品图片分单个图片和详情图片两种
本表的外键pid,指向产品表的id字段
id | pid | type |
...... | ...... | ...... |
在产品页显示5个单个图片
评价表:
外键pid,指向产品表的id字段
外键uid,指向用户表的id字段
id | content | uid | pid | createDate |
...... | ...... | ...... | ...... | ...... |
产品页显示评价信息
订单表:
外键uid,指向用户表id字段
id | orderCode | address | post | receiver | mobile | userMessage | createDate | payDate | deliveryDate | confirmDate | uid | status |
...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... | ...... |
在后台的订单管理页面看到的订单信息
订单项表:
这个表是外键最多的一个表
外键pid,指向产品表id字段
外键oid,指向订单表id字段
外键uid,指向用户表id字段
id | pid | oid | uid | number |
...... | ...... | ...... | ...... | ...... |
在购物车中看到的订单项信息
实体类
所谓实体类,就是对于数据库的表的相互映射的类。
ORM = Object Relationship Datebase Mapping 对象和关系数据库的映射,简单来说,一个对象那个,对应数据库里的一条记录。
基于前面数据库表结构的分析和设计,根据创建表的SQL语句,和表与页面一一对应关系,按照表与表之间的依赖顺序,逐个设计总计九个实体类。
DAO类设计
DAO:Date Access Object,专门用于进行数据库访问的操作。
工具类
DBUtil
DateUtil
业务类
作为 J2EE web应用,一般会按照如图设计流程进行,Servlet -> Service(业务类) -> DAO -> database
当浏览器提交请求到 tomcat web 服务器的时候,对应的 servlet 的 doGet/doPost 方法会被调用,接着在 servlet 中调用Service类,然后在 Service 类中调用 DAO 类,最后在 DAO 中访问数据库获取相应的数据。
本版本不使用 Service 这一层。原因是 DAO 进行了比较详细的设计,已经提供了很好的支持业务的方法。
后台-分类管理
开发整站的顺序,通常还是按照依赖性来进行,前端需要的数据,都要先通过后台的功能维护在数据库中,才可以拿到。
所以,先进行后台功能的开发,然后再是前台功能的开发。
Filter配合Servlet
原理流程图:
换句话说:
- 如果访问的路径是admin_category_add,就会调用categoryServlet.add()方法
- 如果访问的路径是admin_category_delete,就会调用categoryServlet.delete()方法
- 如果访问的路径是admin_category_edit,就会调用categoryServlet.edit()方法
- 如果访问的路径是admin_category_update,就会调用categoryServlet.update()方法
这样,就可以实现一个categoryServlet类,就完成了本来需要5个Servlet类才能完成的功能。