(此處原文有圖示,略)
CREATE DATABASE shop;
USE shop;
-- 使用者表
CREATE TABLE user (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100),
password VARCHAR(100),
nickname VARCHAR(100),
type INT(5) -- 1=管理員, 2=註冊用戶
);
INSERT INTO user VALUES (NULL, 'admin', '7946521', '管理員', 1);
-- 收貨地址表
CREATE TABLE address (
id INT(10) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
phone VARCHAR(100),
postcode VARCHAR(100),
user_id INT(10),
CONSTRAINT FOREIGN KEY (user_id) REFERENCES user(id)
);
-- 訂單表
CREATE TABLE orders (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
buy_date DATETIME,
pay_date DATETIME,
confirm_date DATETIME,
status INT(5),
user_id INT(11),
address_id INT(11),
CONSTRAINT FOREIGN KEY (user_id) REFERENCES user(id),
CONSTRAINT FOREIGN KEY (address_id) REFERENCES address(id)
);
-- 商品分類表
CREATE TABLE category (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
-- 商品表
CREATE TABLE goods (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
price DOUBLE,
intro TEXT,
img VARCHAR(100),
stock INT(10),
c_id INT(10),
CONSTRAINT FOREIGN KEY (c_id) REFERENCES category(id)
);
-- 訂單商品關聯表
CREATE TABLE goods_orders (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
goods_id INT(10),
orders_id INT(10),
CONSTRAINT FOREIGN KEY (goods_id) REFERENCES goods(id),
CONSTRAINT FOREIGN KEY (orders_id) REFERENCES orders(id)
);
建立 model 套件,對應資料表。外鍵關聯直接使用物件引用(如 Address 中持有 User 物件),查詢時一併載入。
// User.java
package com.model;
import java.util.List;
public class User {
private int id;
private String username;
private String password;
private String nickname;
private int type; // 1=admin, 2=user
private List addresses;
// getter/setter 省略
}
// Address.java
package com.model;
public class Address {
private int id;
private String name;
private String phone;
private String postcode;
private User user; // 直接關聯 User 物件
// getter/setter 省略
}
建立三個核心類:
Pager.java:分頁資料容器(總筆數、頁大小、當前頁、資料列表)。SystemContext.java:ThreadLocal 保存當前請求的分頁參數(pageSize, pageOffset)。SystemFilter.java:攔截器從請求參數讀取分頁資訊存入 SystemContext,請求結束時清理。後續篇章將實作 DAO、Service、Controller 層及前端頁面。