1. 项目的分析
1)数据类型提取
接手到新的项目,首先应该大致分析这个项目中有哪些类型的数据,例如:商品、商品分类、用户、收货地址、收藏、购物车、订单……
2)数据开发顺序
然后,对这些需要处理的数据排个开发顺序,通常遵守的原则有2个:由简到难,由基础数据开始。所以以上数据的开发顺序应该是:用户 > 收货地址 > 商品分类 > 商品 > 收藏 > 购物车 > 订单。
3)设计每种数据的功能
接下来,根据需求(也可以根据现有的界面设计)分析每种数据处理时涉及的功能,例如用户数据的相关功能有:注册、登录、修改密码、修改个人资料、上传头像,并对这些功能的开发设计先后顺序,通常遵守增、查、删、改的顺序,可以是:注册 > 登录 > 修改密码 > 修改个人资料 > 上传头像。
针对每个功能,开发顺序应该是:数据库与数据表 > 实体类 > 持久层 > 业务层 > 控制器层 > 前端界面。
做项目之前,一定要把某个数据或功能拆出来,一次只解决一个问题!
2. 用户-注册-数据库与数据表
创建数据库:
CREATE DATABASE tedu_store;
使用数据库:
USE tedu_store;
创建用户数据表:
CREATE TABLE t_user (
uid INT AUTO_INCREMENT COMMENT '用户id',username VARCHAR(20) UNIQUE NOT NULL COMMENT '用户名',
password CHAR(32) NOT NULL COMMENT '密码',salt CHAR(36) COMMENT '盐值',
gender INT COMMENT '性别,0-女性,1-男性',phone VARCHAR(20) COMMENT '电话',
email VARCHAR(50) COMMENT '邮箱',avatar VARCHAR(50) COMMENT '头像',
is_delete INT COMMENT '是否删除,0-未删除,1-已删除',created_user VARCHAR(20) COMMENT '创建执行人',
created_time DATETIME COMMENT '创建时间',modified_user VARCHAR(20) COMMENT '修改执行人',
modified_time DATETIME COMMENT '修改时间',PRIMARY KEY (uid)) DEFAULT CHARSET=UTF8;
3. 用户-注册-实体类
打开https://start.spring.io,准备创建SpringBoot项目,勾选上MySQL和MyBatis,将下载的项目导入到Eclipse中,由于添加了数据库相关依赖,首先,必须在application.properties中添加连接数据库的配置,否则运行时会报告错误:
# datasource
spring.datasource.url=jdbc:mysql://localhost:3306/tedu_store?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
由于4个日志属性在各数据表中都将存在,对应的实体类也都需要添加这些属性,所以先创建实体类公共的父类BaseEntity用于定义这4个日志属性:
/**实体类的基类*/
abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = -5882064199939706583L;
private String createdUser;
private Date createdTime;
private String modifiedUser;
private Date modifiedTime;
// SET/GET/toString
}
由于BaseEntity只在当前cn.tedu.store.entity包中使用,且不需要单独创建对象,所以,可以将访问权限设置为默认(删除public)并添加abstract修饰符。
然后,创建cn.tedu.store.entity.User实体类:
/**用户数据的实体类*/
public class User extends BaseEntity {
private static final long serialVersionUID = 8777086855777796877L;
private Integer uid;
...
// GET/SET/toString
}