专业的易买网的后台商品管理模块讲解
数据库表:SQL Server
public interface ProductDao_hb { //获取所有的商品信息 public List<Product> getAllInfo() throws Exception; //获取当前页的商品信息 public List<Product> getOneProductData(int pageIndex,int pageSize) throws Exception; //总记录数 public int getAllCount() throws Exception; //新增商品 public boolean AddProduct(Product p) throws Exception; //修改商品信息 public boolean UpProduct(Product p) throws Exception; //删除商品 public boolean DelProduct(int id) throws Exception; }
impl实现dao接口并且重写所有dao方法
这里一般是执行SQL语句
public class ProductDaoImpl_hb extends BaseDao implements ProductDao_hb{ //查询ID,照片,商品名称 public List<Product> getAllInfo() throws Exception { List<Product> list=new ArrayList<Product>(); String sql="select EP_ID,EP_FILE_NAME,EP_NAME from EASYBUY_PRODUCT"; ResultSet rs=executeSelect(sql); if (rs!=null) { while (rs.next()) { //实体类 Product pros=new Product(); pros.setId(rs.getInt("EP_ID")); pros.setFileName(rs.getString("EP_FILE_NAME")); pros.setName(rs.getString("EP_NAME")); list.add(pros); } } return list; } /** * 分页显示数据 * pageindex:显示有几页 * pagesize:显示几条数据 * @throws Exception */ public List<Product> getOneProductData( int pageIndex, int pageSize) throws Exception { List<Product> list=new ArrayList<Product>(); String sql="select top "+pageSize+" * from EASYBUY_PRODUCT where EP_ID not in (select top "+(pageIndex-1)*pageSize+" EP_ID from EASYBUY_PRODUCT)"; ResultSet rs=executeSelect(sql); if(rs!=null){ while(rs.next()){ Product pro=new Product(); pro.setId(rs.getInt("EP_ID")); pro.setFileName(rs.getString("EP_FILE_NAME")); pro.setName(rs.getString("EP_NAME")); list.add(pro); } } return list; } //查询总记录数 public int getAllCount() throws Exception { int result=0; String sql="select count(1) as num from EASYBUY_PRODUCT"; ResultSet rs=executeSelect(sql); if(rs!=null){ if (rs.next()) { result=rs.getInt("num"); } } return result; } //添加商品信息 public boolean AddProduct( Product p) throws Exception { boolean flag=false; String sql="select EPC_PARENT_ID from dbo.EASYBUY_PRODUCT_CATEGORY where EPC_ID="+p.getChildCategoryId()+""; ResultSet rs=this.executeSelect(sql); if (rs!=null) { while (rs.next()) { p.setCategoryId(rs.getInt("EPC_PARENT_ID")); flag=true; } } //添加列的名称 //(EP_ID, EP_NAME, EP_DESCRIPTION, EP_PRICE, EP_STOCK, EPC_ID, EPC_CHILD_ID, EP_FILE_NAME) String Addsql="insert into EASYBUY_PRODUCT values(?,?,?,?,?,?,?)"; Object[] objs={ p.getName(), p.getDescription(), p.getPrice(), p.getStock(), p.getCategoryId(), p.getChildCategoryId(), p.getFileName(), }; flag =this.executeUpdate(Addsql, objs); return flag; } //修改商品信息 public boolean UpProduct( Product p) throws Exception { boolean flag=false; String sql="update EASYBUY_PRODUCT set EP_NAME=?,EP_DESCRIPTION=?,EPC_ID=?,EPC_CHILD_ID=?,EP_PRICE=?,EP_STOCK=?,EP_FILE_NAME=? where EP_ID=?"; Object[] paras={ p.getName(), p.getDescription(), p.getCategoryId(), p.getChildCategoryId(), p.getPrice(), p.getStock(), p.getFileName(), p.getId() }; flag=executeUpdate(sql, paras); return flag; } //不修改图片的方法 //修改商品信息 public boolean UpPic( Product p) throws Exception { boolean flag=false; String sql="update EASYBUY_PRODUCT set EP_NAME=?,EP_DESCRIPTION=?,EPC_ID=?,EPC_CHILD_ID=?,EP_PRICE=?,EP_STOCK=? where EP_ID=?"; Object[] paras={ p.getName(), p.getDescription(), p.getCategoryId(), p.getChildCategoryId(), p.getPrice(), p.getStock(), p.getId() }; flag=executeUpdate(sql, paras); return flag; } //删除商品信息 public boolean DelProduct( int id) throws Exception { String sql ="delete from EASYBUY_PRODUCT where EP_ID=?"; Object[] prams={id}; return executeUpdate(sql, prams); } //通过id查询出商品信息并保存到list里面 public List<Product> updateInfo(int id) throws Exception{ List<Product> list=new ArrayList<Product>(); String sql="select * from EASYBUY_PRODUCT where EP_ID=?"; Object[] paras={id}; ResultSet rs=executeSelect(sql,paras); if(rs!=null){ while(rs.next()){ Product pro=new Product(); pro.setId(rs.getInt("EP_ID")); pro.setFileName(rs.getString("EP_FILE_NAME")); pro.setName(rs.getString("EP_NAME")); pro.setDescription(rs.getString("EP_DESCRIPTION")); pro.setPrice(rs.getFloat("EP_PRICE")); pro.setStock(rs.getInt("EP_STOCK")); pro.setCategoryId(rs.getInt("EPC_ID")); pro.setChildCategoryId(rs.getInt("EPC_CHILD_ID")); list.add(pro); } } return list; } }
在servlet用来:请求对象的信息,处理请求,访问其他资源,获得需要的信息
public class Servlet extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } ProductDaoImpl_hb pdimpl=new ProductDaoImpl_hb(); ProoductCategoryDaoImpl_hyj pcdimpl=new ProoductCategoryDaoImpl_hyj(); public void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String opr=request.getParameter("opr"); if(opr!=null){ if(opr.equals("addProduct")){ //----------加载下拉框中的信息 String name=request.getParameter("name"); try { //1获取一级分类 List<ProductCategory> listOnes=pcdimpl.getAllOneLeveInfo(3); List<ProductCategory> listOne=pcdimpl.getAllOneLeveInfo(0); //2.获取二级分类 List<ProductCategory> listTwo=pcdimpl.getAllTowLeveInfo(0); for ( ProductCategory item : listOne) { System.out.println(item.getName()); } //3.设置到作用域中 request.getSession().setAttribute("listOne",listOne); request.getSession().setAttribute("listTwo",listTwo); request.getSession().setAttribute("listOnes",listOnes); //4.跳转到添加页面 进行判断跳转页面 if (name.equals("in")) { //修改页面 String id=request.getParameter("nid"); int nid=0; if (id!=null&&!(id.equals(""))) { nid=Integer.parseInt(id); } try { List<Product> list=pdimpl.updateInfo(nid); request.setAttribute("cid",list.get(0).getChildCategoryId()); System.out.println(list.get(0).getChildCategoryId()); request.setAttribute("list",list); request.getRequestDispatcher("/manage/product-modify.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } }else{//新增页面 request.getRequestDispatcher("/manage/product-add.jsp").forward(request, response); } } catch ( Exception e) { e.getMessage(); } } if(opr.equals("addNewProduct")){ //添加商品 try { Product p=AddProduct(request,response); boolean flag=pdimpl.AddProduct(p); if (flag) { request.getRequestDispatcher("/manage/manage-result.jsp").forward(request, response); } } catch ( Exception e) { e.printStackTrace(); } } //删除 if(opr.equals("delete")){ String pid=request.getParameter("name"); if(pid!=null){ int id =Integer.parseInt(pid); try { boolean flag=pdimpl.DelProduct(id); if (flag) { request.getRequestDispatcher("/manage/manage-result.jsp").forward(request, response); } } catch (Exception e) { e.printStackTrace(); } } } //修改 if (opr.equals("update")) { try { Product p=new Product(); boolean flag=false; p= AddProduct(request,response); p.setId(Integer.parseInt(request.getParameter("id"))); if (p.getFileName()==null) { flag=pdimpl.UpPic(p); }else{ flag=pdimpl.UpProduct(p); } if (flag) { request.getRequestDispatcher("/manage/manage-result.jsp").forward(request, response); } } catch (Exception e) { e.printStackTrace(); } } if(opr.equals("list")){ ProductDaoImpl_hb dao=new ProductDaoImpl_hb(); //分页 try { //实例化page对象,给page的index和size赋值 //显示第一页 Page_hb page=new Page_hb(); //显示的数量 int pageSize=3; page.setPageSize(pageSize); int myindex=1; //当前页 String pageIndex=request.getParameter("pageIndex"); if (pageIndex!=null&&(!pageIndex.equals(""))) { myindex=Integer.parseInt(pageIndex); int mypageCount=0; //总页数 int pageCount=dao.getAllCount(); if (pageCount%pageSize==0) { mypageCount=pageCount/pageSize; }else { mypageCount=pageCount/pageSize+1; } page.setPageCount(mypageCount); } if (myindex<1) { myindex=1; }else if(myindex>page.getPageCount()){ myindex=page.getPageCount(); } //当前页赋值 page.setPageIndex(myindex); List<Product> list=dao.getOneProductData(page.getPageIndex(), page.getPageSize()); page.setList(list); request.setAttribute("listone", page); request.getRequestDispatcher("/manage/product.jsp").forward(request, response); } catch ( Exception e) { e.printStackTrace(); } } } } //添加商品方法 public Product AddProduct( HttpServletRequest request, HttpServletResponse response) throws Exception { Product p = new Product(); request.setCharacterEncoding("utf-8"); //文件上传 //上传文件名 String uploadFileName=""; //表单字段元素 String fieldName=""; //请求信息中的额内容是否是multipart类型 boolean isMultipart=ServletFileUpload.isMultipartContent(request); //上传文件存储路径(服务器文件系统上的绝对路径) String uploadFilePath=request.getSession().getServletContext().getRealPath("/images/product/"); if (isMultipart) { request.setCharacterEncoding("utf-8"); FileItemFactory factory=new DiskFileItemFactory(); //解析器 ServletFileUpload upload=new ServletFileUpload(factory); try { //解析from表单中所有文件 List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iter =items.iterator(); while (iter.hasNext()) { //依次处理每个文件 FileItem item=(FileItem) iter.next(); //普通表单字段 if (item.isFormField()) { fieldName= item.getFieldName(); //表单字段的name属性 if(fieldName.equals("productName")){ //输出表单阻断的值 //System.out.println(item.getString("utf-8")); p.setName(item.getString("utf-8")); }else if(fieldName.equals("productDetail")){ //System.out.println(item.getString("utf-8")); p.setDescription(item.getString("utf-8")); }else if(fieldName.equals("parentId")){ //System.out.println(item.getString("utf-8")); p.setChildCategoryId(Integer.parseInt(item.getString("utf-8"))); }else if(fieldName.equals("productPrice")){ //System.out.println(item.getString("utf-8")); p.setPrice(Float.valueOf(item.getString("utf-8"))); }else if(fieldName.equals("productNumber")){ p.setStock(Integer.parseInt(item.getString("utf-8"))); } }else{ //文件表单字段 String fileName=item.getName(); //文件名字 if(fileName!=null && !fileName.equals("")){ File fullFile=new File(item.getName()); File saveFile = new File(uploadFilePath,fullFile.getName()); item.write(saveFile); uploadFileName=fullFile.getName(); //上传文件名 p.setFileName(uploadFileName); } } } } catch ( Exception e) { e.printStackTrace(); } } return p; } }
这里我讲解一下分页吧
//分页 try { //实例化page对象,给page的index和size赋值 //显示第一页 Page_hb page=new Page_hb(); //显示的数量 int pageSize=3; page.setPageSize(pageSize); int myindex=1; //当前页 String pageIndex=request.getParameter("pageIndex"); if (pageIndex!=null&&(!pageIndex.equals(""))) { myindex=Integer.parseInt(pageIndex); int mypageCount=0; //总页数 int pageCount=dao.getAllCount(); if (pageCount%pageSize==0) { mypageCount=pageCount/pageSize; }else { mypageCount=pageCount/pageSize+1; } page.setPageCount(mypageCount); } if (myindex<1) { myindex=1; }else if(myindex>page.getPageCount()){ myindex=page.getPageCount(); } //当前页赋值 page.setPageIndex(myindex); List<Product> list=dao.getOneProductData(page.getPageIndex(), page.getPageSize()); page.setList(list); request.setAttribute("listone", page); request.getRequestDispatcher("/manage/product.jsp").forward(request, response); } catch ( Exception e) { e.printStackTrace(); }
这是分页的代码,众所周知当你在网上happy(搜索信息)的时候,当前的页面没有你需要信息你会点击下一页来继续寻找信息,我所书写的功能和这个类似吧
工具类:
/** *提供分页使用的工具类 * @author HYJ * */ public class Page_hb { private int pageIndex=1;//当前显示第几页数据 private int pageSize=3;//每页显示几条数据 private int pageSum;//总记录数 private int pageCount;//总页数 private List<Product> list;//保存商品分页信息的集合 public Page_hb() { super(); // TODO Auto-generated constructor stub } public Page_hb(int pageIndex, int pageSize, int pageSum, int pageCount, List<Product> list) { super(); this.pageIndex = pageIndex; this.pageSize = pageSize; this.pageSum = pageSum; this.pageCount = pageCount; this.list = list; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { //pageindex是外界调用这个方法传过来的值,当pageIndex的值大于总页数的,就让他显示最后一页 if(pageIndex>pageCount){ pageIndex=pageCount;//把pageIndex的值改为总页数显示最后一页 } else if(pageIndex<0){//如果传过来的值小于0,就让pageIndex的值为1,显示第一页的数据 pageIndex=1; } else{ this.pageIndex = pageIndex; } } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageSum() { return pageSum; } public void setPageSum(int pageSum) { this.pageSum = pageSum; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public List<Product> getList() { return list; } public void setList(List<Product> list) { this.list = list; } }
根据工具类:设置设置显示的数量
//实例化page对象,给page的index和size赋值 //显示第一页 Page_hb page=new Page_hb(); //显示的数量 int pageSize=3; page.setPageSize(pageSize);
设置当前页,和根据从数据库中查询的count值除每页显示的数量=总页数
并且判断当前页的值和1去比较如果小于1那么就显示第一页的数据
没有理由别问我
int myindex=1; //当前页 String pageIndex=request.getParameter("pageIndex"); if (pageIndex!=null&&(!pageIndex.equals(""))) { myindex=Integer.parseInt(pageIndex); int mypageCount=0; //总页数 int pageCount=dao.getAllCount(); if (pageCount%pageSize==0) { mypageCount=pageCount/pageSize; }else { mypageCount=pageCount/pageSize+1; } page.setPageCount(mypageCount); } if (myindex<1) { myindex=1; }else if(myindex>page.getPageCount()){ myindex=page.getPageCount(); }
把当前页的值赋给页面
//当前页赋值 page.setPageIndex(myindex); List<Product> list=dao.getOneProductData(page.getPageIndex(), page.getPageSize()); page.setList(list); request.setAttribute("listone", page); request.getRequestDispatcher("/manage/product.jsp").forward(request, response);
写这个项目的大概流程就是这些了
可能写的不是太好,请大家多多理解
谢谢欣赏
public interface ProductDao_hb {
//获取所有的商品信息
public List<Product> getAllInfo() throws Exception;
//获取当前页的商品信息
public List<Product> getOneProductData(int pageIndex,int pageSize) throws Exception;
//总记录数
public int getAllCount() throws Exception;
//新增商品
public boolean AddProduct(Product p) throws Exception;
//修改商品信息
public boolean UpProduct(Product p) throws Exception;
//删除商品
public boolean DelProduct(int id) throws Exception;
}