专业的易买网的后台商品管理模块讲解
数据库表: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;
}