你的位置:首页 > Java教程

[Java教程]一个小白写易买网的自诉


 专业的易买网的后台商品管理模块讲解

数据库表:SQL Server


 
相关联的表有:
1.商品信息表  EASYBUY_PRODUCT
2.商品分类表  EASYBUY_PRODUCT_CATEGORY
 
项目架构图:

 
dao编写接口,书写实现功能的方法
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;
}