目录
一、网站功能需求
1、只有注册用户成功登录后才可查看商品类别,查看商品,选购商品,生成订单、查看订单
2、只有管理员才有权限进入购物网后台管理(用户管理 + 类别管理 + 商品管理 + 订单管理)
二、网站设计思路
(一)设计模式
分层架构:展现层(JSP)<——>控制层(Controller)<——>业务层(Service)<——>数据访问层(Dao)<——>数据库(DB)
(二)网站前台
登录——显示商品类别——显示某类商品信息——查看购物车——生成订单——支付
注册<——>登录
(三)网站后台
1、用户管理
查看用户
添加用户
修改用户
删除用户
2、类别管理
查看类别
添加类别
修改类别
删除类别
3、商品管理
查看商品
添加商品
修改商品
删除商品
4、订单管理
查看订单
删除订单
(四)购物流程图
管理员登录成功,进入后台管理
普通用户登录成功,进入前台购物
三、网站运行效果
四、网站实现步骤
(一)创建数据库与表
1、创建数据库
数据库 - simonshop
2、创建用户表
创建用户表结构 - t_user
在用户表里插入记录
查看用户表
3、创建类别表
创建类别表结构 - t_category
在类别表里插入记录
查看类别表记录
4、创建商品表
创建商品表结构 - t_product
在商品表里插入记录
查看商品表记录
5、创建订单表
创建订单表结构 - t_order
在订单表里插入记录
查看订单表记录
(二)创建Web项目
1、创建Web项目
创建Java Enterprise项目,添加Web Application功能
设置项目名称与保存位置
单击【Finish】按钮
2、修改Artifact名称
将Artifact名称改为simonshop
3、重新部署项目
先移除,后添加,重新部署项目
切换到【Server】选项卡
4、编辑首页
首页 - index.jsp
5、启动应用,查看效果
启动服务器,显示首页
(三)创建实体类
创建四个实体类:User、Category、Product与Order,与四张表t_user、t_category、t_product与t_order一一对应。ORM(Object Relation Mapping)——对象关系映射。
1、创建用户实体类
创建net.huawei.shop.bean包,在包里创建User类
2、创建类别实体类
在net.huawei.shop.bean包里创建Category类
3、创建商品实体类
在net.huawei.shop.bean包里创建Product类
4、创建订单实体类
在net.huawei.shop.bean包里创建Order类
(四)创建数据库工具类
1、添加数据库驱动程序包
在\WEB-INF里创建lib子目录,添加MySQL驱动程序的jar包
将数据库驱动程序包作为库添加到项目
2、创建数据库连接管理类
创建net.huawei.shop.dbutil包,在里面创建ConnectionManager类
3、测试数据库连接是否成功
运行程序,查看结果
4、数据库连接的常见错误
(1)数据库驱动程序名称错误
数据库驱动程序名称写错
(2)未知数据库没错误
数据库名称写错
(3)数据库连接密码错误
数据库密码写错
(五)创建数据访问接口
1、创建用户数据访问接口
在net.huawei.shop根包里创建dao子包,在子包里创建UserDao接口
2、创建类别数据访问接口
在net.huawei.shop.dao包里创建CategoryDao接口
3、创建商品数据访问接口
在net.huawei.shop.dao包里创建ProductDao接口
4、创建订单数据访问接口
在net.huawei.shop.dao包里创建OrderDao接口
(六)创建数据访问接口实现类
1、创建用户数据访问接口实现类
在net.huawei.shop.dao包里创建impl子包,在子包里创建UserDaoImpl类
实现UserDao接口
按 + + <-> 收拢代码
1_、对用户数据访问接口实现类做单元测试
我们需要对用户数据访问接口实现类的各个方法进行单元测试,采用JUnit来进行单元测试。
在项目根目录创建一个test文件夹,然后在项目结构窗口里将其标记为"Tests",这样文件夹颜色变成绿色。
于是项目里有了一个绿色的测试文件夹 - test
在test文件夹里创建net.huawei.shop.dao.impl包,在里面创建TestUserDaoImpl类
(1)编写测试登录方法
给测试方法添加@Test注解,会报错
添加单元测试JUnit到项目,将光标移到@Test注解上,按Alt + Enter组合键
单击【Add ‘JUnit4’ to classpath】
单击【OK】按钮
运行testLogin()方法,查看结果
修改登录密码,再进行单元测试,会显示登录失败
(2)编写按标识符查询用户方法
运行testFindById()方法,查看结果
修改标识符变量,再运行测试方法,查看结果
(3)编写按用户名查询用户方法
运行testFindByUsername()方法,查看结果
修改待查用户名,再运行测试方法,查看结果
(4)编写查询全部用户方法
运行testFindAll()方法,查看结果
(5)编写测试插入用户方法
运行testInsert()方法,查看结果
在Navitcat里查看用户表
(6)编写测试更新用户方法
运行testUpdate()方法,查看结果
在Navicat里查看用户表
如果不设置用户的标识符,那么更新用户记录就会失败
(7)编写测试按标识符删除用户方法
运行testDeleteById()方法,查看结果
在Navicat里查看用户表,看还有没有id = 5的用户记录
再次运行testDeleteById()方法,查看结果
思考题
如何避免插入同名用户?插入同名用户时,提示用户名已存在。
如何避免更新用户记录时注册时间在当前时间之后的问题?
2、创建类别数据访问接口实现类
在net.huawei.shop.dao.impl包里创建CategoryDaoImpl类
实现CategoryDao接口
(1)编写插入类别方法
(2)编写按标识符删除类别方法
(3)编写更新类别方法
(4)编写按标识符查询类别方法
(5)编写查询全部类别方法
2_、对类别数据访问接口对象做单元测试
在测试文件夹的net.huawei.shop.dao.impl包里创建TestCategoryDaoImpl类
(1)编写测试按标识符查询类别方法
运行testFindById()方法,查看结果
修改标识符变量值,再运行测试方法,查看结果
判断集合categories是否为空,可以有两种处理方式
运行testFindAll()方法,查看结果
(3)编写测试插入类别方法
运行testInsert()方法,查看结果
在Navicat里查看类别表
(4)编写测试更新类别方法
运行testUpdate()方法,查看结果
在Naviat里查看类别表
如果传入更新方法的类别对象没有设置id值,更新就会失败
(5)编写测试删除类别方法
运行testDeleteById()方法,查看结果
在Navicat里查看类别表
3、编写商品数据访问接口实现类
在net.huawei.shop.dao.impl包里创建ProductDaoImpl类
实现ProductDao接口
(1)编写插入商品方法
(2)编写按标识符删除商品方法
(3)编写更新商品方法
(4)编写按标识符查询商品方法
(5)编写按类别标识符查询商品方法
(6)编写查询全部商品方法
3_、对商品数据访问接口对象做单元测试
在test里的net.huawei.shop.dao.impl包里创建TestProductDaoImpl类
(1)编写按标识符查询商品方法
运行testFindById()方法,查看结果
修改标识符变量值,再运行testFindById()方法,查看结果
(2)编写测试按类别标识符查询商品方法
@Test // 按类别标识符查询商品
public void testFindByCategoryId() {
// 定义类别标识符变量
int categoryId = 2;
// 创建商品数据访问接口对象
ProductDao productDao = new ProductDaoImpl();
// 调用商品数据访问接口对象的按类别标识符查询商品方法
List products = productDao.findByCategoryId(categoryId);
// 判断指定类别里是否有商品
if (products.size() > 0) { // 有商品
products.forEach(product -> System.out.println(product));
} else { // 没商品
System.out.println(“类别编号为[” + categoryId + “]的商品未找到~”);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
运行testFindByCategoryId()方法,查看结果
修改类别标识符变量值,再运行testFindByCategoryId()方法,查看结果
(3)编写测试查询全部商品方法
运行testFindAll()方法,查看结果
(4)编写测试插入商品方法
运行testInsert()方法,查看结果
在Navicat里查看商品表
(5)编写测试更新商品方法
运行testUpdate()方法,查看结果
在Navicat里查看商品表
如果不设置商品标识符,那么就会更新失败
(6)编写测试删除商品方法
运行testDeleteById()方法,查看结果
在Navicat里查看商品表
4、创建订单数据访问接口实现类
在net.huawei.shop.dao.impl包里创建OrderDaoImpl类
实现OrderDao接口
(1)编写插入订单方法
(2)编写按标识符删除订单方法
(3)编写更新订单方法
(4)编写按标识符查询订单方法
(5)编写查询最后一个订单方法
(6)编写查询全部订单方法
4_、对订单数据访问接口对象做单元测试
在test里的net.huawei.shop.dao.impl包里创建TestOrderDaoImpl类
(1)编写按标识符查询订单方法
运行testFindById()方法,查看结果
(七)创建数据访问服务类
1、创建用户服务类
在net.huawei.shop包里创建service子包,在子包里创建UserService类
2、创建类别服务类
在net.huawei.shop.service包里创建CategoryService类
3、创建商品服务类
在net.huawei.shop.service包里创建ProductService类
4、创建订单服务类
在net.huawei.shop.service包里创建OrderService