###Jsp+Servlet购物商城day04.3:订单模块Order实体设计失误。【Bean属性设计两大原则】-MyBeanUtils使用注意事项。

Order  bean代码:

package cn.itcast.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;

public class Orders implements Serializable{
	private String oid;
//	private Date orderTime;
	/*========#########======
	 ===属性名和字段名不一致。导致set get方法名和字段名不一致。
	 插入订单信息时,因为是SQL 参数是 传参数:Order对象getDate();
	 ====【插入 只需要SQL语句字段名和表字段对应即可,和属性get。set方法名称和字段名是否一致无关!!!。】
	 ====【查询 封装数据时,这里使用了工具类MyBeanUtils(封装了BeanUtils,对日期类型进行注册),
	 他会根据map字段名匹配对应的get方法,读取map数据,把map封装为bean:BeanUtils.populate(bean,map)。
	 】
	 ====这里,把ordertime 写成了date,插入订单成功。显示订单封装数据时,死活查不出来date和OrderItem的subtotal。
	 =====【找了一上午的错误,就是出不来!!】
	 
	 
	  ===subtotal是计算出来的,不用set方法赋值【插入值的时候】。于是我给注释掉了。。。
	  * ====######===但是查询Order,BeanUtils封装查询的map时,需要set方法封装数据。
	  * 所以,原则:
	  * 【Bean的get set 方法即使一时没用到,全都加上。
	  * 不用管他,难保什么时候用到!!!】
	 
	public void setSubtotal(double subtotal) {
		this.subtotal = subtotal;
	}
	========######=======总之:
	【牢记bean属性设计 两大原则】:
	《1》属性名和字段名 必须严格一致;
	【即使属性名 不一致有时不会报错,但是大大减少出错的可能,检查错误也方便。
	何况 后面学习 Struts2 必须要求一致,也能养成好习惯。】
	《2》get set 方法 用不到的,bean 也全都给加上。===不要轻易删除。
	
	======熟练BeanUtils的使用注意事项:属性名和字段名 必须严格一致;
	 * */
	//private Date orderTime;//==###=getOrderTime()获取失败,只能getOrdertime()==(已测)
	private Date ordertime;
	private double total;
	private int state;
	//对着关系图写。sql语句找起来还是费点劲的。
	private String address;
	private String name;//===不使用user表的username,因为收货人未必是下单的用户。
	private String telephone;
//	private String uid ;
	private User user;//每个用户有自己的订单
	
	//================#######===========【加深理解:Bean属性有 两种。业务需要,表字段映射】
	//订单和订单项。1:n关系。所以Orders表里不需要添加 itemid属性。
	//但是业务逻辑上: Orders 包含 多个OrderItem,Orders本就是用来封装OderItem的。
	//(和分页 PageBean类似,封装数据,作用只不过是:方便页面取值)
	//所以:和【Cart封装CartItem一样,这里也要添加一个Map<Stirng pid,OderItem item> 的map 封装多个订单项。 】 
	//===所以说:这个map属性是 业务需要。其他属性是表字段映射。
	//private LinkedHashMap<String,OrderItem> orderItems = new LinkedHashMap<String,OrderItem>();
	private List<OrderItem> orderItems = new ArrayList<OrderItem>();
	/*
	private List<OrderItem> orderItems;//teacher
	===######=======为什么,CartItem用LinkedHashMap<String,CartItem>,
	而OrderItem使用List<OrderItem>?
	(前面说过,哪种集合都可以实现,实现复杂度不同。如何选择集合,实现最简单的集合呢?)其实都差不多。
	 * */
	/*public Collection<OrderItem> getOrderItems() {
		return orderItems.values();//===为了页面取值方便。
	}*/
	/*public Collection<OrderItem> getOrderItems() {
		return orderItems.values();//===date,subtotal取不到。
	}*/
	public List<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(List< OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	public Orders() {
		super();
	}
	
	public String getOid() {
		return oid;
	}
	public void setOid(String oid) {
		this.oid = oid;
	}
	/*public Date getOrderTime() {//==getOrderTime()获取失败,只能getOrdertime()
		return ordertime;
	}*/
	public Date getOrdertime() {
		return ordertime;
	}
	
	public void setOrdertime(Date ordertime) {
		this.ordertime = ordertime;
	}
	public double getTotal() {
		Collection<OrderItem> items = getOrderItems();
		int total=0;
		for (OrderItem item : items) {
			total += item.getSubtotal();
		}
		return total;
	}
	public void setTotal(double total) {
		this.total = total;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	
	/*@Override
	public String toString() {
		return "Orders [oid=" + oid + ", ordertime=" + ordertime + ", total=" + getTotal() + ", state=" + state + ", address="
				+ address + ", name=" + name + ", telephone=" + telephone + ", user=" + user + ", orderItems="
				+ orderItems + "]";
	}*/
	
	@Override
	public String toString() {
		return "Orders [oid=" + oid + ", ordertime=" + ordertime + ", total=" + total + ", state=" + state
				+ ", address=" + address + ", name=" + name + ", telephone=" + telephone + "]";
	}
	
}


MyBeanUtils:

package cn.itcast.utils;

import java.util.Date;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

/*
 ======封装优化了BeanUtils类。
 解决:BeanUtils封装  含有 Date 类型属性 的实体。封装不了Date类型。只可以封装String。 
 * */
public class MyBeanUtils {
	
	
	//====只是getObject去掉了Map泛型。
	public static void setObject(Object obj, Map map) {
		try {
			DateConverter dc = new DateConverter();
			dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy/MM/dd"});// 设置要转换的字符串的格式
			// 注册时间转换器,将某种格式的字符串转换成 Date 对象
			//===BeanUtils底层本来就会 调用类型转换器。
			//===(因为基本类型可以自动转换:String:"1"会自动转为数字)。===ConvertUtils
			ConvertUtils.register(dc, Date.class);
			BeanUtils.populate(obj, map);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void getObject(Object obj, Map<String, String[]> map) {
		try {
			DateConverter dc = new DateConverter();
			dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy/MM/dd"});// 设置要转换的字符串的格式
			// 注册时间转换器,将某种格式的字符串转换成 Date 对象
			ConvertUtils.register(dc, Date.class);
			BeanUtils.populate(obj, map);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static <T>T getObj(Class<T> clazz, Map<String, String[]> map){
		T t = null;
		try {
			t = clazz.getConstructor().newInstance();
			BeanUtils.populate(t, map);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return t;
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子商务购物平台 概要设计说明书 1引言 作为互联网战略的延伸,电子商务的热潮一度兴起,但是一直以来,很多企业网站都局限在信息发布等一些基本的功能,而越来越深入的实践表明,这些仅仅代表了企业网站的一个起点功能。随着企业网络环境的发展成熟,企业门户网站可以帮助企业把现有的业务系统整合起来,集中优势资源为客户提供个性化服务,并为企业创建一个良好的收入渠道。 1.1编写目的 锻炼本阶段学校的成果,让我们更加的熟练运用所学的知识,对应web开发的流程更加的清晰,增加了我们对servlet的理解。 1.2背景 网上购物是电子商务的重要组成部分。网上购物就是通过互联网检索商品信息,并通过电订购单发出购物请求,然后填上私人支票帐号或信用卡的号码,厂商通过邮购的方式发货,或是通过快递公司送货上门。国内的网上购物,一般付款方式是款到发货(直接银行转帐,在线汇款)。担保交易(淘宝支付宝,百度百付宝,腾讯财付通等的担保交易),货到付款等 2总体设计 2.1运行环境 Jdk1.7 Tomcat7.0.61 Oracle 11g 2.2软件功能框架图 基于jsp+servlet开发的电子商务购物平台 3相关设计 3.1类框图(必须包括DAO相关类框图) 基于jsp+servlet开发的电子商务购物平台 1.1编写目的 锻炼本阶段学校的成果,让我们更加的熟练运用所学的知识,对应web开发的流程更加的清晰,增加了我们对servlet的理解。 2未完成功能说明 重置用户所有密码 3安装与初始化 3.1可执行程序安装运行说明 前台登录url:http://localhost:8080/EbProject/ 后台管理登录url:http://localhost:8080/EbProject/admin/AdminIndex.jsp 3.2数据库安装说明 百度安照教程去操作http://jingyan.baidu.com/article/ed15cb1b785b1c1be3698105.html 3.3初始数据说明 前台登录账号与密码, 账户0002密码2222 后台登录账号与密码 账户Admin密码8888 普通管理员: 账户0008密码8888 4操作简要说明 结合项目效果图说明操作步骤,每一个功能对应一张效果图 基于jsp+servlet开发的电子商务购物平台基于jsp+servlet开发的电子商务购物平台基于jsp+servlet开发的电子商务购物平台基于jsp+servlet开发的电子商务购物平台基于jsp+servlet开发的电子商务购物平台基于jsp+servlet开发的电子商务购物平台
│ workspace.zip │ 列表生成.reg │ 淘淘商城源代码.zip │ ├─01.第一天 │ 01.课程计划.avi │ 02.淘淘商城介绍.avi │ 03.创建后台工程-taotao-parent.avi │ 04.创建taotao-manager.avi │ 05.svn的使用.avi │ 06.ssm框架整合思路.avi │ 07.ssm框架整合.avi │ 08.测试工程.avi │ 打开必读.txt │ 淘淘商城第一天笔记.docx │ ├─02.第二天 │ 07.商品类目选择完成.avi │ 01.课程计划.avi │ 02.展示首页.avi │ 03.分页插件01.avi │ 04.分页插件的使用方法.avi │ 05.商品列表展示.avi │ 06.商品类目选择-分析.avi │ 08.图片服务器的分析.avi │ 09.nginx介绍.avi │ 10.项目调试方法.avi │ 11.nginx的安装及启动、停止.avi │ 12.nginx的配置文件-通过端口号区分虚拟机.avi │ 13.通过域名配置虚拟机.avi │ 淘淘商城第二天笔记.docx │ ├─03.第三天 │ 01.课程回顾.avi │ 02.课程计划.avi │ 03.什么是反向代理.avi │ 04.nginx的反向代理及负载均衡.avi │ 05.FastDFS介绍.avi │ 06.FastDFS安装步骤-文件上传.avi │ 07.配置nginx插件访问图片.avi │ 08.测试图片上传.avi │ 09.FastDFS工具类的使用.avi │ 10.图片上传过程分析.avi │ 11.图片上传Service.avi │ 12.图片上传完成.avi │ 13.解决火狐兼容性问题.avi │ 14.spring的父子容器.avi │ 淘淘商城第三天笔记.docx │ ├─04.第四天 │ 01.第三天内容复习.avi │ 02.课程计划.avi │ 03.富文本编辑器的使用.avi │ 04.商品添加功能-分析.avi │ 05.商品添加功能实现.avi │ 06.规格参数介绍及实现思路.avi │ 07.规格参数关联的数据库.avi │ 08.商品规格参数模板列表.avi │ 09.判断规格参数模板是否存在.avi │ 10.保存规格参数模板.avi │ 11.展示规格参数模板.avi │ 12.保存规格参数.avi │ 13.展示规格参数.avi │ 淘淘商城第四天笔记.docx │ ├─05.第五天 │ 01.课前复习.avi │ 02.课程计划.avi │ 03.服务层taotao-rest工程搭建.avi │ 04.创建taotao-portal,展示首页.avi │ 05.展示商品类目01.avi │ 06.jsonp原理.avi │ 07.发布商品分类查询服务-分析.avi │ 08.发布商品分类查询服务-Service.avi │ 09.发布商品分类查询服务-完成.avi │ 10.跨域调用taotao-rest服务.avi │ 打开必读.txt │ 淘淘商城第五天笔记.docx │ ├─06.第六天 │ 01.内容复习.avi │ 02.课程计划.avi │ 03.cms系统分析.avi │ 04.内容分类列表展示.avi │ 05.添加节点、及课后作业.avi │ 06.新增内容-分析.avi │ 07.cms系统添加内容-完成.avi │ 08.httpclient.avi │ 09.HttpClient的使用方法.avi │ 10.内容查询服务发布.avi │ 11.轮播图展示.avi │ 淘淘商城第六天笔记.doc │ ├─07.第七天 │ 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值