J2EE项目-仿天猫整站day02(中)

实体类设计

所谓实体类,就是对于数据库中的表的互相映射的类。

这是一种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这样一个集合属性。

productsByRow

3. Property类 

  1. 基本属性的getter、setter
  2. 与Category的多对一关系

如图,这些属性,都属于平板电视这个分类。

Property.java

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类

  1. 与数据库相关字段一一对应的基本属性
  2. 与Category的多对一关系
  3. 与ProductImage的一对多关系
  4. firstProductImage这个属性,是从productSingleImage集合中取出第一个来,用于显示这个产品的默认图片
  5. 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

相关功能页面截图-理解ProductImage

 相关功能页面截图-理解reviewCount,saleCount

相关功能页面截图-理解reviewCount,saleCount

 5. ProductImage类

  1. 基础属性的getter、setter
  2. 与Product的多对一关系

ProductImage.java

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类

  1. 基本属性的getter、setter
  2. 与Product的多对一关系
  3. 与Property的多对一关系

如图所示,一个属性值,需要同时关联Property和Product

PropertyValue.java

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类

  1. 基本属性的getter、setter
  2. 与User的多对一关系
  3. 与Product的多对一关系

Review.java

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类

  1. 基本属性的getter、setter
  2. 与OrderItem的一对多关系
  3. 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的一对多关系

一个订单下多个订单项

相关功能页面截图-理解与OrderItem的一对多关系

理解total,totalNumber

订单的总金额和商品数量

 相关功能页面截图-理解total,totalNumber

理解getStatusDesc

在数据库中存放的Status是英文,而在界面上需要把这些英文对应的中文显示出来。这些英文是常量,保存在OrderDAO上。

相关功能页面截图-理解getStatusDesc

 9. OrderItem类

  1. 基本属性的getter、setter
  2. 与Product的多对一关系
  3. 与User的多对一关系
  4. 与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关联起来。

 

相关功能页面截图-理解与User、Product的多对一关系

理解与Order的多对一关系

相关功能页面截图-理解与Order的多对一关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值