JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。

一、功能介绍

使用JSP+Servlet实现商品管理功能,开发工具IDEA,后台为mysql数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。具体要求如下:

1.1显示

打开商品信息管理首页,以列表方式显示所有商品信息
在这里插入图片描述

1.2商品详情

单击商品超链接,则跳转至指定商品的商品详情页面
在这里插入图片描述

1.3新增

设计及实现新增商品功能
在这里插入图片描述

1.4修改

设计及实现修改商品功能
在这里插入图片描述

1.5删除

单击“删除”链接可以进行商品信息删除,弹出提示框,点击“确定”进行删除。

在这里插入图片描述

二、数据库语句

-- 商品管理功能-- 
-- 主管表 -- 
create TABLE charge(
chargeNum int PRIMARY KEY,
chargeName VARCHAR(100)
);

INSERT into charge values (201,"赵云");
INSERT into charge values (202,"张飞");
INSERT into charge values (203,"黄忠");
SELECT * from charge
-- -- 商品信息表
CREATE TABLE goods(
goodsId int PRIMARY KEY auto_increment,
barCode int,
chargeNum int,
goodsName VARCHAR(50),
goodsPrice VARCHAR(50),
purchaseId int,
expirationDate VARCHAR(50),
FOREIGN KEY(chargeNum) references charge(chargeNum) on delete cascade on update cascade 
);
-- 添加数据
insert into goods VALUES (null,902083,201,"脉动","5元",6,"一年");
insert into goods VALUES (null,902084,201,"纯牛奶","3元",4,"六个月");
insert into goods VALUES (null,902085,203,"面包","2元",3,"两个月");
insert into goods VALUES (null,902086,202,"毛巾","12元",8,"无");

SELECT * from goods WHERE goodsId=902083
DELETE from goods where goodsId=902083
update goods set chargeNum =1, goodsName="1",goodsPrice="1", purchaseId=1,expirationDate="1" WHERE goodsId=902083

三、项目结构

在这里插入图片描述
在这里插入图片描述

四、java代码

4.1Good类

package com.blb.beans;
//商品类:条形码、主管工号、商品名称、商品价格、进货单号、保质时间
public class Good {
    private String goodsId;
    private String barCode;
    private String chargeNum;
    private String goodsName;
    private String goodsPrice;
    private String purchaseId;
    private String expirationDate;

    public Good() {
    }

    @Override
    public String toString() {
        return "Good{" +
                "goodsId='" + goodsId + '\'' +
                ", barCode='" + barCode + '\'' +
                ", chargeNum='" + chargeNum + '\'' +
                ", goodsName='" + goodsName + '\'' +
                ", goodsPrice='" + goodsPrice + '\'' +
                ", purchaseId='" + purchaseId + '\'' +
                ", expirationDate='" + expirationDate + '\'' +
                '}';
    }

    public Good(String goodsId, String barCode, String chargeNum, String goodsName, String goodsPrice, String purchaseId, String expirationDate) {
        this.goodsId = goodsId;
        this.barCode = barCode;
        this.chargeNum = chargeNum;
        this.goodsName = goodsName;
        this.goodsPrice = goodsPrice;
        this.purchaseId = purchaseId;
        this.expirationDate = expirationDate;
    }

    public String getBarCode() {
        return barCode;
    }

    public void setBarCode(String barCode) {
        this.barCode = barCode;
    }

    public String getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }

    public String getChargeNum() {
        return chargeNum;
    }

    public void setChargeNum(String chargeNum) {
        this.chargeNum = chargeNum;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public String getGoodsPrice() {
        return goodsPrice;
    }

    public void setGoodsPrice(String goodsPrice) {
        this.goodsPrice = goodsPrice;
    }

    public String getPurchaseId() {
        return purchaseId;
    }

    public void setPurchaseId(String purchaseId) {
        this.purchaseId = purchaseId;
    }

    public String getExpirationDate() {
        return expirationDate;
    }

    public void setExpirationDate(String expirationDate) {
        this.expirationDate = expirationDate;
    }
}

4.2 Charge类

package com.blb.beans;
//主管:主管工号、主管名称
public class Charge {
    private String chargeNum;
    private String chargeName;

    @Override
    public String toString() {
        return "Charge{" +
                "chargeNum='" + chargeNum + '\'' +
                ", chargeName='" + chargeName + '\'' +
                '}';
    }

    public Charge() {
    }

    public Charge(String chargeNum, String chargeName) {
        this.chargeNum = chargeNum;
        this.chargeName = chargeName;
    }

    public String getChargeNum() {
        return chargeNum;
    }

    public void setChargeNum(String chargeNum) {
        this.chargeNum = chargeNum;
    }

    public String getChargeName() {
        return chargeName;
    }

    public void setChargeName(String chargeName) {
        this.chargeName = chargeName;
    }
}

4.3GoodDao接口

package com.blb.dao;

import com.blb.beans.Charge;
import com.blb.beans.Good;

import java.util.List;

public interface GoodDao {
    List<Good> list();//显示商品列表
    List<Charge> chargeList();//主管工号列表
    boolean del(String id);//删除:根据id删除商品
    boolean update(Good good);//修改商品信息
    boolean insert(Good good);//添加商品
    Good findGoodById(String id);//详情根据id查找商品的信息
}

4.4GoodDaoImpl(GoodDao接口实现类)

package com.blb.dao.impl;

import com.blb.beans.Charge;
import com.blb.beans.Good;
import com.blb.dao.GoodDao;
import com.blb.util.DBUtils;

import java.util.List;

public class GoodDaoImpl implements GoodDao {
    @Override
    public List<Good> list() {
        return DBUtils.queryAllList("SELECT * from goods ",Good.class);
    }

    @Override
    public List<Charge> chargeList() {
        return DBUtils.queryAllList("SELECT * from charge",Charge.class);
    }

    @Override
    public boolean del(String id) {
        return DBUtils.update("DELETE from goods where goodsId=?",id)>0;
    }

    @Override
    public boolean update(Good good) {
        return DBUtils.update("update goods set barCode=?, chargeNum =?, goodsName=?,goodsPrice=?, purchaseId=?,expirationDate=? WHERE goodsId=?",good.getBarCode(),good.getChargeNum(),good.getGoodsName(),good.getGoodsPrice(),good.getPurchaseId(),good.getExpirationDate(),good.getGoodsId())>0;
    }

    @Override
    public boolean insert(Good good) {
        return DBUtils.update("insert into goods VALUES (null,?,?,?,?,?,?)",good.getBarCode(),good.getChargeNum(),good.getGoodsName(),good.getGoodsPrice(),good.getPurchaseId(),good.getExpirationDate())>0;
    }

    @Override
    public Good findGoodById(String id) {
        return DBUtils.queryOneToBean("SELECT * from goods WHERE goodsId=?",Good.class,id);
    }
}

4.5GoodService接口

package com.blb.service;

import com.blb.beans.Charge;
import com.blb.beans.Good;

import java.util.List;

public interface GoodService {
    List<Good> list();//显示商品列表
    List<Charge> chargeList();//主管工号列表
    boolean del(String id);//删除:根据id删除商品
    boolean update(Good good);//修改商品信息
    boolean insert(Good good);//添加商品
    Good findGoodById(String id);//详情根据id查找商品的信息
}

4.6GoodServiceImpl(GoodService接口实现类)

package com.blb.service.impl;

import com.blb.beans.Charge;
import com.blb.beans.Good;
import com.blb.dao.GoodDao;
import com.blb.dao.impl.GoodDaoImpl;
import com.blb.service.GoodService;

import java.util.List;

public class GoodServiceImpl implements GoodService {
   private GoodDao goodDao=new GoodDaoImpl();
    @Override
    public List<Good> list() {
        return goodDao.list();
    }

    @Override
    public List<Charge> chargeList() {
        return goodDao.chargeList();
    }

    @Override
    public boolean del(String id) {
        return goodDao.del(id);
    }

    @Override
    public boolean update(Good good) {
        return goodDao.update(good);
    }

    @Override
    public boolean insert(Good good) {
        return goodDao.insert(good);
    }

    @Override
    public Good findGoodById(String id) {
        return goodDao.findGoodById(id);
    }
}

4.7BaseServlet

package com.blb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;


public class BaseServlet extends HttpServlet {

    @Override//service可以写公用的属性、方法
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            //设置请求和响应,发往服务器的参数的编码格式
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            //拿浏览器传入的方法参数
            String m = req.getParameter("m");
            //获取当前对象的class,方法。并调用方法
            Class clazz = this.getClass();
            System.out.println("当前进入的servlet:"+clazz+"当前调用的方法"+m);
            Method method = clazz.getDeclaredMethod(m, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,req,resp);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //请求转发
    public void dispatcher(String url,HttpServletRequest req, HttpServletResponse res){
        try {
            req.getRequestDispatcher(url).forward(req,res);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //重定向
    public void redirect(String url,HttpServletRequest req, HttpServletResponse res){
        try{
            res.sendRedirect(req.getContextPath()+url);
        }catch (Exception e){
            e.printStackTrace();
        }
    }


}

4.8ListServlet

package com.blb.servlet;

import com.blb.beans.Good;
import com.blb.service.GoodService;
import com.blb.service.impl.GoodServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/ListServlet")
public class ListServlet extends HttpServlet {
    //创建good的服务对象
    private GoodService goodService=new GoodServiceImpl();
    //调用list方法,查找所有商品并存入list集合,请求转发到index.jsp页面显示商品信息
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Good> list = goodService.list();
        req.setAttribute("list",list);
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4.9GoodServlet

package com.blb.servlet;

import com.blb.beans.Charge;
import com.blb.beans.Good;
import com.blb.service.GoodService;
import com.blb.service.impl.GoodServiceImpl;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

@WebServlet("/GoodServlet")
public class GoodServlet extends BaseServlet {
    //创建商品的服务对象
    private GoodService goodService=new GoodServiceImpl();

    //添加:调用chargeList方法,获取主管工号的数据列表并存入集合,请求转发到insert.jsp页面
    public void insertPage (HttpServletRequest req, HttpServletResponse resp)  {
        List<Charge> charges = goodService.chargeList();
        req.setAttribute("chargeList",charges);
        dispatcher("/insert.jsp",req,resp);
    }
        //将用户输入的数据存入good对象并调用insert方法,把数据加入数据库,最后,重新获取数据库数据返回首页。
        public void insert (HttpServletRequest req, HttpServletResponse resp)  {
        String barCode = req.getParameter("barCode");
        String chargeNum = req.getParameter("chargeNum");
        String goodsName = req.getParameter("goodsName");
        String goodsPrice = req.getParameter("goodsPrice");
        String purchaseId = req.getParameter("purchaseId");
        String expirationDate = req.getParameter("expirationDate");
        Good good = new Good(null,barCode, chargeNum, goodsName, goodsPrice, purchaseId, expirationDate);
        boolean result = goodService.insert(good);
        dispatcher("/ListServlet",req,resp);
    }
    //修改:调用findGoodById方法,获取当前修改商品的信息并存入集合,请求转发到update.jsp页面
    public void updatePage (HttpServletRequest req, HttpServletResponse resp)  {
        String goodsId = req.getParameter("id");
        Good good = goodService.findGoodById(goodsId);
        req.setAttribute("good",good);
        List<Charge> charges = goodService.chargeList();
        req.setAttribute("chargeList",charges);
        dispatcher("/update.jsp",req,resp);
    }
    //将用户输入的数据存入good对象并调用update方法,把数据库中的当前商品的数据进行修改,最后,重新获取数据库数据返回首页。
    public void update (HttpServletRequest req, HttpServletResponse resp) {
        String goodsId = req.getParameter("goodsId");
        String barCode = req.getParameter("barCode");
        String chargeNum = req.getParameter("chargeNum");
        String goodsName = req.getParameter("goodsName");
        String goodsPrice = req.getParameter("goodsPrice");
        String purchaseId = req.getParameter("purchaseId");
        String expirationDate = req.getParameter("expirationDate");
        Good good = new Good(goodsId,barCode, chargeNum, goodsName, goodsPrice, purchaseId, expirationDate);
        boolean result = goodService.update(good);
        dispatcher("/ListServlet",req,resp);
    }
    //删除:根据商品的id进行删除,最后,重新获取数据库数据返回首页。
    public void delete (HttpServletRequest req, HttpServletResponse resp)  {
        String id = req.getParameter("id");
        boolean del = goodService.del(id);
        dispatcher("/ListServlet",req,resp);
    }

    //详情:调用findGoodById方法,获取当前修改商品的信息并存入集合,请求转发到details.jsp页面
    public void details (HttpServletRequest req, HttpServletResponse resp)  {
        String id = req.getParameter("id");
        Good good = goodService.findGoodById(id);
        req.setAttribute("good",good);
        dispatcher("/details.jsp",req,resp);
    }
    }

4.10DBUtils工具类

package com.blb.util;


import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class DBUtils {
	//	要连接的驱动类型
	private static String DRIVER = null;
	//要连接的URL
	private static String URL = null;
	//	要连接的数据库的用户名
	private static String USER = null;
	//	要连接的数据库的密码
	private static String PWD = null;

	private static QueryRunner runner ;


	static {
		//建立连接器
		File f = new File("D:\\ commercialinformationmanagementsystem\\src\\com\\blb\\file.properties");

		Properties p = new Properties();
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(f);
			p.load(fis);
			DRIVER = p.getProperty("DRIVER");
			URL = p.getProperty("URL");
			USER = p.getProperty("USER");
			PWD = p.getProperty("PWD");
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		//连接数据库
		DruidDataSource ds = new DruidDataSource();
		ds.setUrl(URL);
		ds.setUsername(USER);
		ds.setPassword(PWD);
		ds.setDriverClassName(DRIVER);
		runner = new QueryRunner(ds);
	}

	/**
	 * 进行新增、修改、删除操作
	 * @param sql  进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL执行后受影响的行
	 */
	public static int update(String sql ,Object... param ){
		try {
			return runner.update(sql, param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0 ;
	}

	/**
	 * 查询1个对象封装成Bean对象
	 * @param sql 进行操作的SQL语句
	 * @param clazz 结果封装的Bean类型
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的Bean对象,如果异常则返回null
	 */
	public static<T> T queryOneToBean(String sql, Class<T> clazz,Object... param  ){
		try {
			BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
			return runner.query(sql, new BeanHandler<T>(clazz,brp),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 查询只有1行结果的操作,结果封装成Map
	 * @param sql 进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的1行内容封装到Map中,如果异常则返回null
	 */
	public static Map<String,Object> queryOneToMap(String sql, Object... param  ){
		try {
			return  runner.query(sql,new MapHandler(),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 有多行结果的查询操作,结果封装成List,元素为bean类型
	 * @param sql sql 进行操作的SQL语句
	 * @param clazz 结果封装的Bean类型
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的多行内容封装到List中,如果异常则返回null
	 */
	public static<T> List<T> queryAllList(String sql, Class<T> clazz,Object... param ){
		try {
			BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
			return runner.query(sql, new BeanListHandler<T>(clazz,brp),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 查询有多行结果的操作,结果封装成List中,元素为map类型
	 * @param sql 进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的多行内容封装到List中,如果异常则返回null
	 */
	public static List<Map<String,Object>> queryAllMap(String sql, Object... param ){
		try {
			return runner.query(sql,new MapListHandler(),param );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

4.11file.properties文件

DRIVER = com.mysql.jdbc.Driver
URL = jdbc:mysql://127.0.0.1:3306/decemberexamination?useUnicode=true&characterEncoding=UTF-8
USER = root
PWD = root

五、JSP代码

5.1common.jsp共有的配置信息

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<%
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
%>

5.2index.jsp商品信息管理首页

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="/common/common.jsp"%>
<html>
  <head>
    <title>商品信息管理首页</title>
  </head>
  <style>
    #add{
      display: block;
      text-align: center;
    }
  </style>
  <body>

  <table align="center" border="1" >

    <tr align="center">
      <td>条形码</td>
      <td>主管工号</td>
      <td>商品名称</td>
      <td>商品价格</td>
      <td>进货单号</td>
      <td>保质时间</td>
      <td>编辑</td>
    </tr>
    <c:forEach items="${list}" var="good">
      <tr align="center">
        <td>${good.barCode}</td>
        <td>${good.chargeNum}</td>
        <td><a href="${path}/GoodServlet?m=details&id=${good.goodsId}">${good.goodsName}</a> </td>
        <td>${good.goodsPrice}</td>
        <td>${good.purchaseId}</td>
        <td>${good.expirationDate}</td>
        <td><a href="${path}/GoodServlet?m=updatePage&id=${good.goodsId}">修改</a> &nbsp;<a href="javascript:void(0)" onclick="confirmDel(${good.goodsId})">删除</a> </td>
      </tr>
    </c:forEach>
  </table>
  <a id="add" href="${path}/GoodServlet?m=insertPage">添加商品</a>

  <script type="text/javascript">
    function confirmDel(param)
    {
      if(window.confirm("确定删除?")){
        document.location="${path}/GoodServlet?m=delete&id="+param
      }
    }
  </script>

  </body>
</html>

5.3details.jsp商品详情页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="/common/common.jsp"%>
<html>
<head>
    <title>商品详情</title>
</head>
<body>
<table border="1" align="center">
    <tr>
        <td>条形码</td>
        <td>${good.barCode}</td>
    </tr>
    <tr>
        <td>主管工号</td>
        <td>${good.chargeNum}</td>
    </tr>
    <tr>
        <td>商品名称</td>
        <td>${good.goodsName}</td>
    </tr>
    <tr>
        <td>商品价格</td>
        <td>${good.goodsPrice}</td>
    </tr>
    <tr>
        <td>进货单号</td>
        <td>${good.purchaseId}</td>
    </tr>
    <tr>
        <td>保质时间</td>
        <td>${good.expirationDate}</td>
    </tr>
    <tr>
        <td colspan="2"><a href="${path}/ListServlet">返回</a> </td>

    </tr>
</table>
</body>
</html>

5.4insert.jsp添加商品页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="/common/common.jsp"%>
<html>
<head>
    <title>新增商品</title>
</head>
<body>

<form action="${path}/GoodServlet?m=insert" method="post" align="center">
    <h3>添加商品</h3>

    条形码 <input type="text" name="barCode"><br />
    主管工号 <select name="chargeNum"><option>请选择主管工号</option>
        <c:forEach items="${chargeList}" var="charge">
            <option value="${charge.chargeNum}">${charge.chargeNum}</option>
        </c:forEach>
</select> <br />
    商品名称<input type="text" name="goodsName"><br />
    商品价格 <input type="text"name="goodsPrice"> <br />
    进货单号 <input type="text"name="purchaseId"> <br />
    保质期 <input type="text" name="expirationDate"> <br />
    <input type="submit">

</form>
</body>
</html>

5.5update.jsp修改商品页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="/common/common.jsp"%>
<html>
<head>
    <title>修改商品</title>
</head>
<body>
<form action="${path}/GoodServlet?m=update" method="post" align="center">
    <input type="hidden"name="goodsId" value="${good.goodsId}">
    条形码 <input type="text" name="barCode" value="${good.barCode}"><br />
    主管工号 <select name="chargeNum" value="${good.chargeNum}">
    <option>${good.chargeNum}</option>
    <c:forEach items="${chargeList}" var="charge"><option>${charge.chargeNum}</option></c:forEach>
</select> <br />
    商品名称<input type="text" name="goodsName" value="${good.goodsName}"><br />
    商品价格 <input type="text"name="goodsPrice" value="${good.goodsPrice}"> <br />
    进货单号 <input type="text"name="purchaseId" value="${good.purchaseId}"> <br />
    保质期 <input type="text" name="expirationDate" value="${good.expirationDate}"> <br />
    <input type="submit">

</form>
</body>
</html>

5.6web.xml

在这里插入图片描述
配置welcome-file-list是为了去ListServlet拿商品信息的数据。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<welcome-file-list>
    <welcome-file>ListServlet</welcome-file>
</welcome-file-list>
</web-app>

六、项目下载

JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。

  • 16
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值