JDBC综合案例
1. 商城案例表设计
通过对商城项目的部分表关系进行分析,完成数据库表的设计
1.1 表关系分析
1.2 建库,建表
- 创建名为 store的数据库, 对应商城项目
1 | create database db6 character set utf8; |
- 创建用户表
1 | CREATE TABLE user ( |
1 | INSERT INTO USER VALUES |
- 创建订单表
1 | CREATE TABLE orders ( |
1 | -- 插入一条订单数据 |
- 创建商品分类表
1 | CREATE TABLE category ( |
1 | INSERT INTO `category` VALUES ('1','手机数码'),('2','电脑办公'),('3','运动鞋服'),('4','图书音像'); |
- 创建商品表
1 | CREATE TABLE product ( |
1 | INSERT INTO `product` VALUES |
- 订单项表 (中间表)
1 | -- 订单项表 |
1 | -- 向中间表中插入两条数据 |
2.环境搭建
2.1 项目结构
1 | com.lagou.app 测试包 用于对DAO代码进行测试 |
2.2 导入所需Jar包
1 | 我们只需要导入myjar仓库到项目中就可以了 |
2.3 导入配置文件及工具类
3. JavaBean类创建
3.1 设计用户与订单
3.1.1 一对多关系分析
在Java一对多的数据关系中,需要遵循以下设计原则:
- Java类的名称 = 实体表的名称
- Java类的属性 = 实体表的字段
- Java类的一个对象 = 表的一行记录
- 外键关系 = 引用配置
一个用户拥有多个订单,所以 用户是一的一方, 订单是多的一方
3.1.2 User类
1 | /** |
3.1.3 Orders类
1 | /** |
3.1.4 Orders类设计分析
第一种方式
根据两张表关系的描述 我们可以在 订单类中 添加一个uid 成员变量,表示订单属于哪个用户
1
private String uid;
但是这样设计会存在一些问题,比如 我要查询的是订单是属于哪个用户的用户名 ? 但是我们只有一个uid
第二种方式
Java类表示一对多关系,可以在多的一方添加一个成员变量,这个成员变量的类型 就是一的一方的类型.
再在订单表中 添加一个 User对象,User对象中 ,保存该订单关联的用户的所有信息
1
2private String uid;
private User user;
3.1.4 修改Orders类
1 | public class Orders { |
3.2 设计商品与分类
分类与商品 同样是一对多关系, 我们可以在多的一方进行操作 添加一个成员变量 类型是一的一方的类型
3.2.1 Category类
1 | public class Category { |
3.2.2 Product类
1 | public class Product { |
3.3 设计订单项
3.3.1 多对多关系分析
商品与订单是多对多关系, 一个订单上可以有多个商品, 一个商品可以出现在多个订单中.
多对多建表原则 需要一张中间表,中间表中至少有两个字段,作为中间表的外键分别指向另外两张表的主键
3.3.2 创建OrderItem
1 | /** |
4.编写DAO类
4.1 UserDao
- 需求一: 编写一个注册用户的方法,接收的参数是一个User对象
- 需求二: 编写一个 用户登录的方法,接收的参数是 用户名 和密码, 返回值是User对象
4.1.1 编写UserDao
1 | public class UserDao { |
4.1.2 测试注册与登录功能
1 | public class TestUserDao { |
4.2 ProductDao
需求1: 根据商品ID 获取商品名称 ,商品价格 以及商品所属分类的名称
- 参数 pid, 返回值 product对象
需求2: 根据分类ID 获取商品分类信息
- 参数 cid , 返回值 category对象
需求3: 查询指定分类ID 下的商品个数
- 参数 cid , 返回值 int类型 商品个数
需求4: 查询指定分类ID 下的所有商品信息
- 参数分类ID ,返回值 List集合 集合中保存商品对象
4.2.1 编写 ProductDao
1 | public class ProductDao { |
4.2.2 测试 ProductDao
1 | public class TestProductDao { |
4.3 OrdersDao
4.3.1 多对一分析
OrderItem表与Orders表的关系是 多对一
之前我们一直是在描述一对多,那么我们再反向描述一下 多对一
方式是在Orders中应该有一个 集合用来保存订单中的订单项信息
在Orders类中添加 订单项的集合
1 | //该订单中有多少订单项 |
4.3.2 创建OrdersDao
需求1: 获取 uid为 001 的用户的所有订单信息
参数 uid, 返回值 LIst
订单集合 需求2: 获取订单编号为 order001的订单中的所有商品信息
- 参数 oid, 返回值List
商品集合
1
2
3
4
5
6
7
8
9
10
11
12-- 获取订单编号为: order001的订单中的所有商品信息
-- 1.查询订单项表中 oid是order001的 所有商品信息
SELECT
oi.pid
FROM orderitem oi WHERE oid = 'order001';
-- 2.将上面的查询语句作为in函数的条件, 查询product表
SELECT * FROM product WHERE pid IN
(SELECT
oi.pid
FROM orderitem oi WHERE oid = 'order001');- 参数 oid, 返回值List
1 | public class OrdersDao { |
4.3.3 测试OrdersDao
1 | public class TestOrderDao { |
评论