商品管理

发表时间:2017-05-15 17:13:53 浏览量( 34 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

下面我们需要完成的是商品管理,虽然也是增删改查这个几个功能,不过因为需要上传商品图和分页两个功能,而且商品也和类别有多对一的关系,所以商品管理相比之下就比较复杂一点,不过也没有关系,这方便的知识点我们前面也已经讲过了。

attcontent/f6a7ad75-f217-400e-a4af-64c11a236117.png

1、完成dao层。注意分页的代码,这里用到了Page类,这个类可在源码中获得。

   public class GoodsDao extends BaseDao {	/**	 * 添加商品	 * 	 * @param goods	 * @return	 */	public int add(Goods goods) {		int result = 0;		getCon();		String sql = "insert into goods(type_id,goods_name,cash,infos,pic,nums) values(?,?,?,?,?,?)";		result = exeUpdate(				sql,				new Object[] { goods.getTypeId(), goods.getGoodsName(),						goods.getCash(), goods.getInfos(), goods.getPic(),						goods.getNums() });		closeAll();		return result;	}	/**	 * 根据Id删除商品	 * 	 * @param id	 * @return	 */	public int del(int id) {		int result = 0;		getCon();		String sql = "delete from goods where goods_id=?";		result = exeUpdate(sql, new Object[] { id });		closeAll();		return result;	}	/**	 * 更新商品信息	 * 	 * @param goods	 * @return	 */	public int update(Goods goods) {		int result = 0;		getCon();		String sql = "update goods set type_id=?,goods_name=?,cash=?,infos=?,pic=?,nums=?  where goods_id=?";		result = exeUpdate(				sql,				new Object[] { goods.getTypeId(), goods.getGoodsName(),						goods.getCash(), goods.getInfos(), goods.getPic(),						goods.getNums(), goods.getGoodsId() });		closeAll();		return result;	}	/**	 * 根据商品Id获得单个商品信息	 * 	 * @param id	 * @return	 */	public Goods getById(int id) {		Goods goods = null;		getCon();		String sql = "select * from goods where goods_id=?";		rs = exeQuery(sql, new Object[] { id });		try {			if (rs.next()) {				goods = new Goods();				goods.setCash(rs.getDouble("cash"));				goods.setGoodsId(rs.getInt("goods_id"));				goods.setGoodsName(rs.getString("goods_name"));				goods.setInfos(rs.getString("infos"));				goods.setNums(rs.getInt("nums"));				goods.setPic(rs.getString("pic"));				goods.setTypeId(rs.getInt("type_id"));			}		} catch (SQLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} finally {			closeAll();		}		return goods;	}	/**	 * 根据商品类型分页显示商品信息列表	 * 	 * @param typeId	 *            商品类别ID	 * @param page	 *            分页信息	 * @return	 */	public List<Goods> getByType(int typeId, Page page) {		List<Goods> goodses = new ArrayList<Goods>();		getCon();		try {			String sqlcount = "select count(*) from goods where type_id=?";			rs = exeQuery(sqlcount, new Object[] { typeId });			if (rs.next()) {               page.setItmeCount(rs.getInt(1));			}			String sql = "select * from goods where type_id=? limit ?,?";			rs = exeQuery(					sql,					new Object[] { typeId, page.getItemStart(),							page.getPageSize() });			while (rs.next()) {				Goods goods = new Goods();				goods.setCash(rs.getDouble("cash"));				goods.setGoodsId(rs.getInt("goods_id"));				goods.setGoodsName(rs.getString("goods_name"));				goods.setInfos(rs.getString("infos"));				goods.setNums(rs.getInt("nums"));				goods.setPic(rs.getString("pic"));				goods.setTypeId(rs.getInt("type_id"));				goodses.add(goods);			}		} catch (SQLException e) {			e.printStackTrace();		} finally {			closeAll();		}		return goodses;	}	public static void main(String[] args) {		GoodsDao goodsDao = new GoodsDao();		Goods goods = new Goods();		for (int i = 0; i < 10; i++) {			goods.setCash(10.0);			goods.setGoodsName("商品名2" + i);			goods.setTypeId(2);			goods.setInfos("好好吃");			goods.setNums(200);			goods.setPic("zhou.jpg");			goodsDao.add(goods);		}		Page page = new Page();		page.setCurrentPage(1);		List<Goods> goodses = goodsDao.getByType(2, page);		for (Goods g : goodses) {			System.out.println(g.getGoodsName());		}	}}

2、实现控制层也就是servlet层。需要注意的地方是,在列表页面、添加页面和修改页面都需要把商品类别显示出来,所有这些方法都需查询所有的类别,并放到request作用域中。还有就是在删除数据库的商品时,注意应该把商品图片也删除了,这样可以节省空间。

   /** * 后台商品管理 -- 增删改查 *  * @author Administrator *  */public class GoodsServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		GoodsDao goodsDao = new GoodsDao();		GoodsTypesDao goodsTypesDao = new GoodsTypesDao();		String ope = request.getParameter("ope");		if (ope == null || ope.equals("list")) {// 商品列表			int cpage = 1;			int tid = 0;			// 获得所有的类别			List<GoodsTypes> goodsTypeses = goodsTypesDao.getAllTypes();			String cpagestr = request.getParameter("cpage");			String tidstr = request.getParameter("tid");			if (cpagestr != null) {				cpage = Integer.parseInt(cpagestr);			}			if (tidstr == null) {				tid = goodsTypeses.get(0).getTypeId();			} else {				tid = Integer.parseInt(tidstr);			}			Page page = new Page();			page.setCurrentPage(cpage);			page.setPageSize(5);			List<Goods> goodses = goodsDao.getByType(tid, page);			request.setAttribute("goodses", goodses);			request.setAttribute("goodsTypeses", goodsTypeses);			request.setAttribute("page", page);			request.setAttribute("tid", tid);			request.getRequestDispatcher("goodslist.jsp").forward(request,					response);		} else if (ope.equals("toadd")) {// 进入添加商品页			List<GoodsTypes> goodsTypeses = goodsTypesDao.getAllTypes();			request.setAttribute("goodsTypeses", goodsTypeses);			request.getRequestDispatcher("goodsadd.jsp").forward(request,					response);		} else if (ope.equals("add")) {// 执行添加			Map<String, String> forMap = new HashMap<String, String>();			String filename = null;			FileItemFactory factory = new DiskFileItemFactory();			ServletFileUpload upload = new ServletFileUpload(factory);			try {				List items = upload.parseRequest(request);				Iterator iter = items.iterator();				while (iter.hasNext()) {					FileItem item = (FileItem) iter.next();					if (item.isFormField()) {						String name = item.getFieldName();						String value = item.getString("utf-8");						forMap.put(name, value);					} else {						String fieldname = item.getFieldName();						filename = item.getName();						// UUID唯一值						filename = UUID.randomUUID()								+ filename.substring(filename.indexOf("."));						String path = request.getSession().getServletContext()								.getRealPath("/");						File uploadFile = new File(path + "/uploadfile/"								+ filename);						item.write(uploadFile);					}				}			} catch (FileUploadException e) {				// TODO Auto-generated catch block				e.printStackTrace();			} catch (Exception e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			Goods goods = new Goods();			goods.setGoodsName(forMap.get("goodsName"));			goods.setTypeId(Integer.parseInt(forMap.get("typeId")));			goods.setCash(Double.parseDouble(forMap.get("cash")));			goods.setInfos(forMap.get("infos"));			goods.setNums(Integer.parseInt(forMap.get("nums")));			goods.setPic(filename);			int result = goodsDao.add(goods);			if (result > 0) {				response.sendRedirect("GoodsServlet");			} else {				response.sendRedirect("error.jsp");			}		} else if (ope.equals("del")) {// 执行删除			// 获得要删除id			int gid = Integer.parseInt(request.getParameter("gid"));			int result = goodsDao.del(gid);			if (result > 0) {				response.sendRedirect("GoodsServlet");			} else {				response.sendRedirect("error.jsp");			}						//需要同时删除图片,不过这里还没有完成		} else if (ope.equals("toupdate")) {// 进入更新						List<GoodsTypes> goodsTypeses = goodsTypesDao.getAllTypes();							int gid = Integer.parseInt(request.getParameter("gid"));			Goods goods = goodsDao.getById(gid);			request.setAttribute("goods", goods);			request.setAttribute("goodsTypeses", goodsTypeses);						request.getRequestDispatcher("goodsupdate.jsp").forward(request,					response);		} else if (ope.equals("update")) {// 执行更新						//修改 商品  			//如果用户没有选择新的图片 》》 不能修改数据库里 商品 pic 属性  》》 使用原先的值			//如果用户选择新的图片>>  1、修改数据库  2、删除原来的文件,这里留给大家自己完成									Map<String, String> forMap = new HashMap<String, String>();			String filename = null;			//服务器路径			String path = request.getSession()					.getServletContext().getRealPath("/");						FileItemFactory factory = new DiskFileItemFactory();			ServletFileUpload upload = new ServletFileUpload(factory);			try {				List items = upload.parseRequest(request);				Iterator iter = items.iterator();				while (iter.hasNext()) {					FileItem item = (FileItem) iter.next();					if (item.isFormField()) {						String name = item.getFieldName();						String value = item.getString("utf-8");						forMap.put(name, value);					} else {						String fieldname = item.getFieldName();						filename = item.getName();						// UUID唯一值						// 如果用户上传了新的图片,那么要把原来的图片删除						if (filename != "" || !filename.equals("")								|| filename != null) {							filename = UUID.randomUUID()									+ filename.substring(filename.indexOf("."));																					File uploadFile = new File(path + "/uploadfile/"									+ filename);							item.write(uploadFile);						}					}				}			} catch (FileUploadException e) {				// TODO Auto-generated catch block				e.printStackTrace();			} catch (Exception e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			Goods goods = new Goods();			int gid=Integer.parseInt(forMap.get("goodsId"));						Goods temp=goodsDao.getById(gid);//原来保存在数据库中的信息						goods.setGoodsId(gid);			goods.setGoodsName(forMap.get("goodsName"));			goods.setTypeId(Integer.parseInt(forMap.get("typeId")));			goods.setCash(Double.parseDouble(forMap.get("cash")));			goods.setInfos(forMap.get("infos"));			goods.setNums(Integer.parseInt(forMap.get("nums")));						//如果用户没有上传新的图片			if (filename == "" || filename.equals("") || filename == null) {							goods.setPic(temp.getPic());				} else {								//删除文件				File file=new File(path+"/uploadfile/"+temp.getPic());				file.delete();								goods.setPic(filename);			}			int result = goodsDao.update(goods);			if (result > 0) {				response.sendRedirect("GoodsServlet");			} else {				response.sendRedirect("error.jsp");			}		}	}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		doGet(request, response);	}}

页面代码比较多,也比较简单,这里就不全部显示出来的,大家可以参考源码实现。今天的任何还需要完成后台的用户管理的,这部分内容和商品管理类似,留给大家作为作业吧。下面列出商品列表的代码:

<body>
<div id="manage_body">

<!-- header -->
<jsp:include page="head.jsp"></jsp:include>
<!-- end of header -->

<!-- content -->
<div id="manage_content_wrapper">
<div id="manage_content_left">
<jsp:include page="left.jsp"></jsp:include>
</div>
<div id="manage_content_right">

<div id="admin_content_contain">

<a href="GoodsServlet?ope=toadd">添加商品</a> <br /> <br />
<form action="GoodsServlet">

<select name="tid">
<c:forEach items="${goodsTypeses }" var="type">
<option value="${type.typeId }" <c:if test="${type.typeId eq tid }">selected="selected"</c:if>>${type.typeName }</option>
</c:forEach>
</select> <input type="submit" value="查找" />
</form>

<table width="859" border="0" cellspacing="1" bgcolor="#e8822e">
<tr class="admin_font3">
<td width="57" height="30">序号</td>
<td width="98">商品名称</td>
<td width="90">商品价格</td>
<td width="171">商品信息</td>
<td width="161">商品图片</td>
<td width="96">商品数量</td>

<td width="69">操作</td>
</tr>


<c:forEach var="goods" items="${goodses }" varStatus="status">
<tr class="admin_font2">
<td height="25">${status.index+1 }</td>
<td>${goods.goodsName }</td>
<td>${goods.cash }</td>
<td>${goods.infos }</td>
<td><img src="<%=basePath %>uploadfile/${goods.pic }"
height="50" /></td>
<td>${goods.nums }</td>

<td><a
href="GoodsServlet?ope=toupdate&gid=${goods.goodsId }"> 修改
</a> | <a href="GoodsServlet?ope=del&gid=${goods.goodsId }"> 删除</a>
</td>
</tr>
</c:forEach>


</table>
</div>

</div>

<div align="center">
第${page.currentPage }页,共有 ${page.pageCount } 页  

<a href="GoodsServlet?tid=${tid }&cpage=${page.currentPage-1}">上一页</a>

<c:set var="endItem" value="${page.currentPage+5 }"/>
<c:if test="${endItem>page.pageCount }">
     <c:set var="endItem" value="${page.pageCount }"/>
</c:if>

<c:set var="startItem" value="${page.currentPage-5 }"></c:set>
<c:if test="${startItem<1 }">
     <c:set var="startItem" value="1"/>
</c:if>


<c:forEach begin="${startItem }" end="${endItem }" var="a">
    <a href="GoodsServlet?tid=${tid }&cpage=${a}">[${a}]</a>
 
</c:forEach>

<a href="GoodsServlet?tid=${tid }&cpage=${page.currentPage+1}">下一页</a>
</div>
</div>

<!-- end of content -->

<!-- footer -->
<div id="manage_footer_wrapper">备案号:粤0000123</div>
<!-- end of footer -->
</div>
</body>