实体类设计
所谓实体类,就是对于数据库中的表的互相映射的类。
这是一种ORM(对象关系映射,Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)的设计思想,即一个对象,对应数据库里的一条记录。
基于前面数据库表结构的分析和设计,根据创建表的SQL语句和表与页面一一对应关系,按照表与表之间的依赖顺序,逐个设计总计九个实体类。
1. User类
建立java project:tmall;注:不要用Dynamic Web Project,而是使用java project。后续的tomcat中的配置都是基于java project上进行的。
所有的实体类,都放在tmall.bean包中。
User类主要就是提供id,name,passwo的getter和setter。
其中getAnonymousName表示获取本用户的匿名名称,在评价的时候显示用户名使用。
package tmall.bean;
public class User {
private String password;
private String name;
private int id;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAnonymousName() {
if(null==name) {
return null;
}
if(name.length()<=1) {
return "*";
}
if(name.length()==2) {
return name.substring(0,1)+"*";
}
char[] cs = name.toCharArray();
for(int i=1;i<cs.length-1;i++) {
cs[i]='*';
}
return new String(cs);
}
}
2. Category类
Category除了基本属性id和name的getter和setter外,还提供了一对多关系products的getter与setter。另外还有一个List<List<Product>>productsByRow;属性。
package tmall.bean;
import java.util.List;
public class Category {
private String name;
private int id;
List<Product> products;
List<List<Product>> productsByRow;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Category [name=" + name + "]";
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public List<List<Product>> getProductsByRow() {
return productByRow;
}
public void setProductsByRow(List<List<Product>> productByRow) {
this.productByRow = productByRow;
}
}
productsByRow这个属性的类型是List<List<Product>> productsByRow。
即一个分类又对应多个List<Product>,提供这个属性,是为了在首页竖状导航的分类名称右边显示产品列表。
如图所示,一个分类会对应多行产品,而一行产品里又有多个产品记录。为了实现页面上的这个功能,为Category类设计了List<List<Product>> productsByRow这样一个集合属性。
3. Property类
- 基本属性的getter、setter
- 与Category的多对一关系
如图,这些属性,都属于平板电视这个分类。
package tmall.bean;
public class Property {
private String name;
private Category category;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
4. Product类
- 与数据库相关字段一一对应的基本属性
- 与Category的多对一关系
- 与ProductImage的一对多关系
- firstProductImage这个属性,是从productSingleImage集合中取出第一个来,用于显示这个产品的默认图片
- reviewCount,saleCount这两个字段,分别表示评价数量和销售数量,并不是在数据库中对应的字段。
注:截止目前,还没有ProductImage类,故会暂时编译错误。
package tmall.bean;
import java.util.Date;
import java.util.List;
public class Product {
private String name;
private String subTitle;
private float orignalPrice;
private float promotePrice;
private int stock;
private Date createDate;
private Category category;
private int id;
private ProductImage firstProductImage;
private List<ProductImage> productImages;
private List<ProductImage> productSingleImages;
private List<ProductImage> productDetailImages;
private int reviewCount;
private int saleCount;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubTitle() {
return subTitle;
}
public void setSubTitle(String subTitle) {
this.subTitle = subTitle;
}
public float getOrignalPrice() {
return orignalPrice;
}
public void setOrignalPrice(float orignalPrice) {
this.orignalPrice = orignalPrice;
}
public float getPromotePrice() {
return promotePrice;
}
public void setPromotePrice(float promotePrice) {
this.promotePrice = promotePrice;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String toString(){
return name;
}
public ProductImage getFirstProductImage() {
return firstProductImage;
}
public void setFirstProductImage(ProductImage firstProductImage) {
this.firstProductImage = firstProductImage;
}
public List<ProductImage> getProductImages() {
return productImages;
}
public void setProductImages(List<ProductImage> productImages) {
this.productImages = productImages;
}
public List<ProductImage> getProductSingleImages() {
return productSingleImages;
}
public void setProductSingleImages(List<ProductImage> productSingleImages) {
this.productSingleImages = productSingleImages;
}
public List<ProductImage> getProductDetailImages() {
return productDetailImages;
}
public void setProductDetailImages(List<ProductImage> productDetailImages) {
this.productDetailImages = productDetailImages;
}
public int getReviewCount() {
return reviewCount;
}
public void setReviewCount(int reviewCount) {
this.reviewCount = reviewCount;
}
public int getSaleCount() {
return saleCount;
}
public void setSaleCount(int saleCount) {
this.saleCount = saleCount;
}
}
理解ProductImage
单个产品图片集合:productSingleImages
详情产品集合:productDetailImages
相关功能页面截图-理解reviewCount,saleCount
5. ProductImage类
- 基础属性的getter、setter
- 与Product的多对一关系
package tmall.bean;
public class ProductImage {
private String type;
private Product product;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
6. PropertyValue类
- 基本属性的getter、setter
- 与Product的多对一关系
- 与Property的多对一关系
如图所示,一个属性值,需要同时关联Property和Product
package tmall.bean;
public class PropertyValue {
private String value;
private Product product;
private Property property;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Property getProperty() {
return property;
}
public void setProperty(Property property) {
this.property = property;
}
}
7. Review类
- 基本属性的getter、setter
- 与User的多对一关系
- 与Product的多对一关系
package tmall.bean;
import java.util.Date;
public class Review {
private String content;
private Date createDate;
private User user;
private Product product;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
8. Order类
- 基本属性的getter、setter
- 与OrderItem的一对多关系
- total,totalNumber这个订单的总金额和总数量
package tmall.bean;
import java.util.Date;
import java.util.List;
//import tmall.dao.OrderDAO;
public class Order {
private String orderCode;
private String address;
private String post;
private String receiver;
private String mobile;
private String userMessage;
private Date createDate;
private Date payDate;
private Date deliveryDate;
private Date confirmDate;
private User user;
private int id;
private List<OrderItem> orderItems;
private float total;
private int totalNumber;
private String status;
public String getStatusDesc(){
String desc ="未知";
switch(status){
// case OrderDAO.waitPay:
// desc="待付款";
// break;
// case OrderDAO.waitDelivery:
// desc="待发货";
// break;
// case OrderDAO.waitConfirm:
// desc="待收货";
// break;
// case OrderDAO.waitReview:
// desc="等评价";
// break;
// case OrderDAO.finish:
// desc="完成";
// break;
// case OrderDAO.delete:
// desc="刪除";
// break;
// default:
// desc="未知";
}
return desc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getUserMessage() {
return userMessage;
}
public void setUserMessage(String userMessage) {
this.userMessage = userMessage;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getPayDate() {
return payDate;
}
public void setPayDate(Date payDate) {
this.payDate = payDate;
}
public Date getDeliveryDate() {
return deliveryDate;
}
public void setDeliveryDate(Date deliveryDate) {
this.deliveryDate = deliveryDate;
}
public Date getConfirmDate() {
return confirmDate;
}
public void setConfirmDate(Date confirmDate) {
this.confirmDate = confirmDate;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getOrderCode() {
return orderCode;
}
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<OrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(List<OrderItem> orderItems) {
this.orderItems = orderItems;
}
public float getTotal() {
return total;
}
public void setTotal(float total) {
this.total = total;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getTotalNumber() {
return totalNumber;
}
public void setTotalNumber(int totalNumber) {
this.totalNumber = totalNumber;
}
}
理解OrderItem的一对多关系
一个订单下多个订单项
理解total,totalNumber
订单的总金额和商品数量
理解getStatusDesc
在数据库中存放的Status是英文,而在界面上需要把这些英文对应的中文显示出来。这些英文是常量,保存在OrderDAO上。
9. OrderItem类
- 基本属性的getter、setter
- 与Product的多对一关系
- 与User的多对一关系
- 与Order的多对一关系
package tmall.bean;
public class OrderItem {
private int number;
private Product product;
private Order order;
private User user;
private int id;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
理解与User、Product的多对一关系
在产品页面,立即购买,或者加入购物车就会创建一条OrderItem对象。而此时必须有Product,并且是登录状态(能够从Session中取出User),但是此时还没有和Order关联起来。
理解与Order的多对一关系