国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

這篇具有很好參考價(jià)值的文章主要介紹了Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、商品列表

本關(guān)任務(wù)

具體要求

結(jié)果輸出

實(shí)現(xiàn)代碼

二、商品詳情

本關(guān)任務(wù)

JDBC查詢方法封裝

商品相關(guān)信息介紹

具體要求

結(jié)果輸出

實(shí)現(xiàn)代碼

三、商品搜索

編程要求

測試說明

實(shí)現(xiàn)代碼

四、購物車列表

本關(guān)任務(wù)

JDBC查詢方法封裝

購物車相關(guān)信息介紹

編程要求

測試說明

實(shí)現(xiàn)代碼

五、購物車操作

本關(guān)任務(wù)

JDBC查詢方法封裝

購物車相關(guān)信息介紹

編程要求

實(shí)現(xiàn)代碼

六、下單

本關(guān)任務(wù)

編程要求

實(shí)現(xiàn)代碼

七、訂單查詢

本關(guān)任務(wù)

編程要求

測試說明

實(shí)現(xiàn)代碼


一、商品列表

本關(guān)任務(wù)

一個(gè)商場不能缺少商品,本關(guān)需要借助JDBC,從 t_goods表中獲取銷量前四的商品信息,并展示到頁面。

JDBC信息;

MYSQL用戶名 MYSQL密碼 驅(qū)動(dòng) URL
root 123123 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

com.educoder.entity.Goods字段及方法;

字段 描述 類型 get方法 set方法
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
goodsName 商品名 String getGoodsName() setGoodsName(String goodsName)
goodsImg 展示于主頁的圖 String getGoodsImg()? setGoodsImg(String goodsImg)
goodsPrice 價(jià)格 BigDecimal getGoodsPrice() setGoodsPrice(BigDecimal goodsPrice)
goodsNum 庫存數(shù)量 Integer getGoodsNum() setGoodsNum(Integer goodsNum)
salesNum 銷售數(shù)量 Integer getSalesNum() setSalesNum(Integer salesNum)
goodsSize 商品規(guī)格 String getGoodsSize() setGoodsSize(String goodsSize)
goodsFrom 商品產(chǎn)地 String getGoodsFrom() setGoodsFrom(String goodsFrom)
goodsTime 保質(zhì)期 String getGoodsTime() setGoodsTime(String goodsTime)
goodsSaveCondition 存儲(chǔ)條件 String getGoodsSaveCondition() setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe 商品描述介紹 String getGoodsDescribe() setGoodsDescribe(String goodsDescribe)
goodsExplain 對(duì)商品簡短說明 String getGoodsExplain() setGoodsExplain(String goodsExplain)
goodsClass 所屬類別 String getGoodsClass() setGoodsClass(String goodsClass)
goodsDiscount 折扣 BigDecimal getGoodsDiscount() setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime 優(yōu)惠起始時(shí)間 Date getDiscountStartTime() setDiscountStartTime(Date discountStartTime)
discountEndTime 優(yōu)惠截止時(shí)間 Date getDiscountEndTime() setDiscountEndTime(Date discountEndTime)

表和類對(duì)應(yīng)表;

庫名 表名 類名
online_shop t_goods Goods
  1. 注意:類字段和對(duì)應(yīng)的表字段名稱一致,這里不再重復(fù)列出了。

頁面初始效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

最終頁面效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

具體要求

  • 補(bǔ)全?getGoodsList()方法,返回List<Goods>(商品列表)。

結(jié)果輸出

[{"goodsClass":"甜品","goodsDescribe":"口感綿密,精致細(xì)膩\r\n這份雪白讓你有如獲至寶的幸福感","goodsExplain":"手工打發(fā)而成的進(jìn)口鮮奶油","goodsFrom":"上海","goodsId":"list1","goodsImg":"list_1-1.jpg","goodsName":"雪域牛乳芝士","goodsNum":996,"goodsPrice":98.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約450g","goodsTime":"3天","salesNum":44},{"goodsClass":"甜品","goodsDescribe":"酸甜清爽\r\n回味無窮","goodsExplain":"卡福洛芒果泥","goodsFrom":"上海","goodsId":"list3","goodsImg":"list_3-1.jpg","goodsName":"芒果熔巖星球蛋糕 Mango Planet","goodsNum":1994,"goodsPrice":118.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約680g","goodsTime":"2天","salesNum":42},{"goodsClass":"甜品","goodsDescribe":"通過精致的工藝\r\n將巧克力的香醇甜蜜發(fā)揮到極致\r\n每一口都倍感甜蜜","goodsExplain":"進(jìn)口的黑巧克力","goodsFrom":"上海","goodsId":"list2","goodsImg":"list_2-1.jpg","goodsName":"哈!蜜瓜蛋糕 Hey Melon","goodsNum":1496,"goodsPrice":99.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約500g","goodsTime":"3天","salesNum":39},{"goodsClass":"甜品","goodsDescribe":"在金色芒果淋面的外衣下\r\n是芒果慕斯的柔情\r\n是芒果啫喱的牽掛\r\n還有絲絲香草戚風(fēng)蛋糕的香氣","goodsExplain":"手工打發(fā)而成的進(jìn)口鮮奶油","goodsFrom":"上海","goodsId":"list5","goodsImg":"list_5-1.jpg","goodsName":"蟹蟹你偷吃 Yum Yum Cake","goodsNum":6999,"goodsPrice":88.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約480g","goodsTime":"3天","salesNum":5}]

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import com.educoder.entity.Goods;
    import com.educoder.service.GoodsService;
    import com.educoder.dao.impl.BaseDao;
    public class GoodsServiceImpl implements GoodsService {
        /**
         * 商品詳情接口
         */
        public Goods getGoodsByGoodsId(String goodsId) {
            /********* Begin *********/
             String sql = "select * from t_goods where goodsId = ?";
            List<Object> parameters = new ArrayList<Object>();
            parameters.add(goodsId);
            List<Goods> goodsList = null;
            try {
                goodsList = BaseDao.operQuery(sql, parameters, Goods.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return goodsList.size() == 0 ? null : goodsList.get(0);
            /********* End *********/
        }
        /**
         * 商品搜索接口
         */
        public List<Goods> searchGoods(String condition) {
             /********* Begin *********/
            String sql = "select * from t_goods where goodsName like ? or goodsClass like ? order by salesNum desc";
            List<Goods> goodsList = null;
            condition = "%" + condition + "%";
            List<Object> paramenter = new ArrayList<Object>();
            paramenter.add(condition);
            paramenter.add(condition);
            try {
                goodsList = BaseDao.operQuery(sql, paramenter, Goods.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return goodsList;
            /********* End *********/
        }
        /**
         * 商品列表接口
         */
        public List<Goods> getGoodsList() {
            /********* Begin *********/
            String USERNAME = "root";
            String PASSWORD = "123123";
            String URL = "jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";
            Connection conn = null;
            PreparedStatement pste = null;
            ResultSet executeQuery = null;
            List<Goods> list = new ArrayList<Goods>();
            String sql = "select * from t_goods order by salesNum desc limit 4";
            try {
                conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                pste = conn.prepareStatement(sql);
                executeQuery = pste.executeQuery();
                while (executeQuery.next()) {
                    Goods goods = new Goods();
                    goods.setGoodsId(executeQuery.getString("goodsId"));
                    goods.setGoodsName(executeQuery.getString("goodsName"));
                    goods.setGoodsImg(executeQuery.getString("goodsImg"));
                    goods.setGoodsPrice(executeQuery.getBigDecimal("goodsPrice"));
                    goods.setGoodsNum(executeQuery.getInt("goodsNum"));
                    goods.setSalesNum(executeQuery.getInt("salesNum"));
                    goods.setGoodsSize(executeQuery.getString("goodsSize"));
                    goods.setGoodsFrom(executeQuery.getString("goodsFrom"));
                    goods.setGoodsTime(executeQuery.getString("goodsTime"));
                    goods.setGoodsSaveCondition(executeQuery.getString("goodsSaveCondition"));
                    goods.setGoodsDescribe(executeQuery.getString("goodsDescribe"));
                    goods.setGoodsExplain(executeQuery.getString("goodsExplain"));
                    goods.setGoodsClass(executeQuery.getString("goodsClass"));
                    goods.setGoodsDiscount(executeQuery.getBigDecimal("goodsDiscount"));
                    goods.setDiscountStartTime(executeQuery.getDate("discountStartTime"));
                    goods.setDiscountEndTime(executeQuery.getDate("discountEndTime"));
                    list.add(goods);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (executeQuery != null)
                        executeQuery.close();
                    if (pste != null)
                        pste.close();
                    if (conn != null)
                        conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
            /********* End *********/
        }
    }

二、商品詳情

本關(guān)任務(wù)

有了商品還需要看商品的詳細(xì)信息,本關(guān)需要借助JDBC,通過參數(shù)商品Id從數(shù)據(jù)庫中獲取商品詳情,展示到頁面。為了完成本關(guān)任務(wù),需要了解:

  • JDBC?查詢方法封裝;
  • 商品相關(guān)信息介紹。

JDBC查詢方法封裝

為了方便JDBC操作,平臺(tái)對(duì)JDBC查詢方法進(jìn)行了封裝,封裝類com.educoder.dao.impl.BaseDao

public static <T> List<T> operQuery(String sql, List<Object> p, Class<T> cls)
            throws Exception {
        Connection conn = null;
        PreparedStatement pste = null;
        ResultSet rs = null;
        List<T> list = new ArrayList<T>();
        conn = getConn();
        try {
            pste = conn.prepareStatement(sql);
            if (p != null) {
                for (int i = 0; i < p.size(); i++) {
                    pste.setObject(i + 1, p.get(i));
                }
            }
            
            rs = pste.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            while (rs.next()) {
                T entity = cls.newInstance();
                for (int j = 0; j < rsmd.getColumnCount(); j++) {
                    String col_name = rsmd.getColumnName(j + 1);
                    Object value = rs.getObject(col_name);
                    Field field = cls.getDeclaredField(col_name);
                    field.setAccessible(true);
                    field.set(entity, value);
                }
                list.add(entity);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            releaseAll(rs, pste, conn);
        }
        return list;
    }

例如,第一關(guān)可以使用如下方法,獲取商品列表:

String sql = "select * from t_goods order by salesNum desc limit 4";
        List<Goods> goodsList = null;
        try {
            goodsList = BaseDao.operQuery(sql, null, Goods.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

商品相關(guān)信息介紹

MYSQL用戶名 MYSQL密碼 驅(qū)動(dòng) URL
root 123123 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

com.educoder.entity.Goods字段及方法;

字段 描述 類型 get方法 set方法
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
goodsName 商品名 String getGoodsName() setGoodsName(String goodsName)
goodsImg 展示于主頁的圖 String getGoodsImg()? setGoodsImg(String goodsImg)
goodsPrice 價(jià)格 BigDecimal getGoodsPrice() setGoodsPrice(BigDecimal goodsPrice)
goodsNum 庫存數(shù)量 Integer getGoodsNum() setGoodsNum(Integer goodsNum)
salesNum 銷售數(shù)量 Integer getSalesNum() setSalesNum(Integer salesNum)
goodsSize 商品規(guī)格 String getGoodsSize() setGoodsSize(String goodsSize)
goodsFrom 商品產(chǎn)地 String getGoodsFrom() setGoodsFrom(String goodsFrom)
goodsTime 保質(zhì)期 String getGoodsTime() setGoodsTime(String goodsTime)
goodsSaveCondition 存儲(chǔ)條件 String getGoodsSaveCondition() setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe 商品描述介紹 String getGoodsDescribe() setGoodsDescribe(String goodsDescribe)
goodsExplain 對(duì)商品簡短說明 String getGoodsExplain() setGoodsExplain(String goodsExplain)
goodsClass 所屬類別 String getGoodsClass() setGoodsClass(String goodsClass)
goodsDiscount 折扣 BigDecimal getGoodsDiscount() setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime 優(yōu)惠起始時(shí)間 Date getDiscountStartTime() setDiscountStartTime(Date discountStartTime)
discountEndTime 優(yōu)惠截止時(shí)間 Date getDiscountEndTime() setDiscountEndTime(Date discountEndTime)

表和類對(duì)應(yīng)表;

庫名 表名 類名
online_shop t_goods Goods
  1. 注意:類字段和對(duì)應(yīng)的表字段名稱一致,這里不再重復(fù)列出了。

頁面初始效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

最終頁面效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

具體要求

  • 補(bǔ)全getGoodsByGoodsId()方法,完成查詢商品詳情的任務(wù),最后返回Goods(商品)。

結(jié)果輸出

{"goodsClass":"甜品","goodsDescribe":"口感綿密,精致細(xì)膩\r\n這份雪白讓你有如獲至寶的幸福感","goodsExplain":"手工打發(fā)而成的進(jìn)口鮮奶油","goodsFrom":"上海","goodsId":"list1","goodsImg":"list_1-1.jpg","goodsName":"雪域牛乳芝士","goodsNum":996,"goodsPrice":98.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約450g","goodsTime":"3天","salesNum":44}

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import com.educoder.entity.Goods;
    import com.educoder.service.GoodsService;
    import com.educoder.dao.impl.BaseDao;
    public class GoodsServiceImpl implements GoodsService {
        /**
         * 商品詳情接口
         */
        public Goods getGoodsByGoodsId(String goodsId) {
            /********* Begin *********/
             String sql = "select * from t_goods where goodsId = ?";
            List<Object> parameters = new ArrayList<Object>();
            parameters.add(goodsId);
            List<Goods> goodsList = null;
            try {
                goodsList = BaseDao.operQuery(sql, parameters, Goods.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return goodsList.size() == 0 ? null : goodsList.get(0);
            /********* End *********/
        }
        /**
         * 商品搜索接口
         */
        public List<Goods> searchGoods(String condition) {
             /********* Begin *********/
            String sql = "select * from t_goods where goodsName like ? or goodsClass like ? order by salesNum desc";
            List<Goods> goodsList = null;
            condition = "%" + condition + "%";
            List<Object> paramenter = new ArrayList<Object>();
            paramenter.add(condition);
            paramenter.add(condition);
            try {
                goodsList = BaseDao.operQuery(sql, paramenter, Goods.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return goodsList;
            /********* End *********/
        }
        /**
         * 商品列表接口
         */
        public List<Goods> getGoodsList() {
            /********* Begin *********/
            String USERNAME = "root";
            String PASSWORD = "123123";
            String URL = "jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";
            Connection conn = null;
            PreparedStatement pste = null;
            ResultSet executeQuery = null;
            List<Goods> list = new ArrayList<Goods>();
            String sql = "select * from t_goods order by salesNum desc limit 4";
            try {
                conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                pste = conn.prepareStatement(sql);
                executeQuery = pste.executeQuery();
                while (executeQuery.next()) {
                    Goods goods = new Goods();
                    goods.setGoodsId(executeQuery.getString("goodsId"));
                    goods.setGoodsName(executeQuery.getString("goodsName"));
                    goods.setGoodsImg(executeQuery.getString("goodsImg"));
                    goods.setGoodsPrice(executeQuery.getBigDecimal("goodsPrice"));
                    goods.setGoodsNum(executeQuery.getInt("goodsNum"));
                    goods.setSalesNum(executeQuery.getInt("salesNum"));
                    goods.setGoodsSize(executeQuery.getString("goodsSize"));
                    goods.setGoodsFrom(executeQuery.getString("goodsFrom"));
                    goods.setGoodsTime(executeQuery.getString("goodsTime"));
                    goods.setGoodsSaveCondition(executeQuery.getString("goodsSaveCondition"));
                    goods.setGoodsDescribe(executeQuery.getString("goodsDescribe"));
                    goods.setGoodsExplain(executeQuery.getString("goodsExplain"));
                    goods.setGoodsClass(executeQuery.getString("goodsClass"));
                    goods.setGoodsDiscount(executeQuery.getBigDecimal("goodsDiscount"));
                    goods.setDiscountStartTime(executeQuery.getDate("discountStartTime"));
                    goods.setDiscountEndTime(executeQuery.getDate("discountEndTime"));
                    list.add(goods);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (executeQuery != null)
                        executeQuery.close();
                    if (pste != null)
                        pste.close();
                    if (conn != null)
                        conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
            /********* End *********/
        }
    }

三、商品搜索

編程要求

請(qǐng)仔細(xì)閱讀右側(cè)代碼,在Begin-End區(qū)域內(nèi)進(jìn)行代碼補(bǔ)充,實(shí)現(xiàn)商品搜索的功能,具體需求如下:

  • 補(bǔ)全searchGoods()方法,完成商品搜索的功能,最后返回List<Goods>(商品列表)。

測試說明

平臺(tái)會(huì)對(duì)你編寫的代碼進(jìn)行測試:

測試輸入:雪域牛

預(yù)期輸出:文章來源地址http://www.zghlxwxcb.cn/news/detail-429923.html

[{"goodsClass":"甜品","goodsDescribe":"口感綿密,精致細(xì)膩\r\n這份雪白讓你有如獲至寶的幸福感","goodsExplain":"手工打發(fā)而成的進(jìn)口鮮奶油","goodsFrom":"上海","goodsId":"list1","goodsImg":"list_1-1.jpg","goodsName":"雪域牛乳芝士","goodsNum":996,"goodsPrice":98.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約450g","goodsTime":"3天","salesNum":44}]

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import com.educoder.entity.Goods;
    import com.educoder.service.GoodsService;
    import com.educoder.dao.impl.BaseDao;
    public class GoodsServiceImpl implements GoodsService {
        /**
         * 商品詳情接口
         */
        public Goods getGoodsByGoodsId(String goodsId) {
            /********* Begin *********/
             String sql = "select * from t_goods where goodsId = ?";
            List<Object> parameters = new ArrayList<Object>();
            parameters.add(goodsId);
            List<Goods> goodsList = null;
            try {
                goodsList = BaseDao.operQuery(sql, parameters, Goods.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return goodsList.size() == 0 ? null : goodsList.get(0);
            /********* End *********/
        }
        /**
         * 商品搜索接口
         */
        public List<Goods> searchGoods(String condition) {
             /********* Begin *********/
            String sql = "select * from t_goods where goodsName like ? or goodsClass like ? order by salesNum desc";
            List<Goods> goodsList = null;
            condition = "%" + condition + "%";
            List<Object> paramenter = new ArrayList<Object>();
            paramenter.add(condition);
            paramenter.add(condition);
            try {
                goodsList = BaseDao.operQuery(sql, paramenter, Goods.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return goodsList;
            /********* End *********/
        }
        /**
         * 商品列表接口
         */
        public List<Goods> getGoodsList() {
            /********* Begin *********/
            String USERNAME = "root";
            String PASSWORD = "123123";
            String URL = "jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";
            Connection conn = null;
            PreparedStatement pste = null;
            ResultSet executeQuery = null;
            List<Goods> list = new ArrayList<Goods>();
            String sql = "select * from t_goods order by salesNum desc limit 4";
            try {
                conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                pste = conn.prepareStatement(sql);
                executeQuery = pste.executeQuery();
                while (executeQuery.next()) {
                    Goods goods = new Goods();
                    goods.setGoodsId(executeQuery.getString("goodsId"));
                    goods.setGoodsName(executeQuery.getString("goodsName"));
                    goods.setGoodsImg(executeQuery.getString("goodsImg"));
                    goods.setGoodsPrice(executeQuery.getBigDecimal("goodsPrice"));
                    goods.setGoodsNum(executeQuery.getInt("goodsNum"));
                    goods.setSalesNum(executeQuery.getInt("salesNum"));
                    goods.setGoodsSize(executeQuery.getString("goodsSize"));
                    goods.setGoodsFrom(executeQuery.getString("goodsFrom"));
                    goods.setGoodsTime(executeQuery.getString("goodsTime"));
                    goods.setGoodsSaveCondition(executeQuery.getString("goodsSaveCondition"));
                    goods.setGoodsDescribe(executeQuery.getString("goodsDescribe"));
                    goods.setGoodsExplain(executeQuery.getString("goodsExplain"));
                    goods.setGoodsClass(executeQuery.getString("goodsClass"));
                    goods.setGoodsDiscount(executeQuery.getBigDecimal("goodsDiscount"));
                    goods.setDiscountStartTime(executeQuery.getDate("discountStartTime"));
                    goods.setDiscountEndTime(executeQuery.getDate("discountEndTime"));
                    list.add(goods);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (executeQuery != null)
                        executeQuery.close();
                    if (pste != null)
                        pste.close();
                    if (conn != null)
                        conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
            /********* End *********/
        }
    }

四、購物車列表

本關(guān)任務(wù)

網(wǎng)上看中的商品,暫時(shí)不買,還需要保存起來,這個(gè)需要通過購物車來實(shí)現(xiàn)。本關(guān)需要從session里獲取屬性名為userUser對(duì)象,并借助JDBC,通過表t_cartt_goods獲取用戶購物車的商品內(nèi)容,并展示到頁面。

為了完成本關(guān)任務(wù),需要了解:

  • JDBC查詢方法封裝;

  • 購物車相關(guān)信息介紹。

JDBC查詢方法封裝

為了方便JDBC操作,平臺(tái)對(duì)JDBC查詢方法進(jìn)行了封裝,封裝類com.educoder.dao.impl.BaseDao

public static <T> List<T> operQuery(String sql, List<Object> p, Class<T> cls)
            throws Exception {
        Connection conn = null;
        PreparedStatement pste = null;
        ResultSet rs = null;
        List<T> list = new ArrayList<T>();
        conn = getConn();
        try {
            pste = conn.prepareStatement(sql);
            if (p != null) {
                for (int i = 0; i < p.size(); i++) {
                    pste.setObject(i + 1, p.get(i));
                }
            }
            
            rs = pste.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            while (rs.next()) {
                T entity = cls.newInstance();
                for (int j = 0; j < rsmd.getColumnCount(); j++) {
                    String col_name = rsmd.getColumnName(j + 1);
                    Object value = rs.getObject(col_name);
                    Field field = cls.getDeclaredField(col_name);
                    field.setAccessible(true);
                    field.set(entity, value);
                }
                list.add(entity);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            releaseAll(rs, pste, conn);
        }
        return list;
    }

例如,第一關(guān)可以使用如下方法,獲取商品列表:

  1. String sql = "select * from t_goods order by salesNum desc limit 4";
  2. List<Goods> goodsList = null;
  3. try {
  4. goodsList = BaseDao.operQuery(sql, null, Goods.class);
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. }

購物車相關(guān)信息介紹

MYSQL用戶名 MYSQL密碼 驅(qū)動(dòng) URL
root 123123 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

com.educoder.entity.Goods字段及方法;

字段 描述 類型 get方法 set方法
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
goodsName 商品名 String getGoodsName() setGoodsName(String goodsName)
goodsImg 展示于主頁的圖 String getGoodsImg()? setGoodsImg(String goodsImg)
goodsPrice 價(jià)格 BigDecimal getGoodsPrice() setGoodsPrice(BigDecimal goodsPrice)
goodsNum 庫存數(shù)量 Integer getGoodsNum() setGoodsNum(Integer goodsNum)
salesNum 銷售數(shù)量 Integer getSalesNum() setSalesNum(Integer salesNum)
goodsSize 商品規(guī)格 String getGoodsSize() setGoodsSize(String goodsSize)
goodsFrom 商品產(chǎn)地 String getGoodsFrom() setGoodsFrom(String goodsFrom)
goodsTime 保質(zhì)期 String getGoodsTime() setGoodsTime(String goodsTime)
goodsSaveCondition 存儲(chǔ)條件 String getGoodsSaveCondition() setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe 商品描述介紹 String getGoodsDescribe() setGoodsDescribe(String goodsDescribe)
goodsExplain 對(duì)商品簡短說明 String getGoodsExplain() setGoodsExplain(String goodsExplain)
goodsClass 所屬類別 String getGoodsClass() setGoodsClass(String goodsClass)
goodsDiscount 折扣 BigDecimal getGoodsDiscount() setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime 優(yōu)惠起始時(shí)間 Date getDiscountStartTime() setDiscountStartTime(Date discountStartTime)
discountEndTime 優(yōu)惠截止時(shí)間 Date getDiscountEndTime() setDiscountEndTime(Date discountEndTime)

注意:Cart類冗余信息是通過和t_goods表關(guān)聯(lián)查詢出來的,不是存在下面的t_cart表里。

表和類對(duì)應(yīng)表;

庫名 表名 類名
online_shop t_cart Cart

注意:類字段和對(duì)應(yīng)的表字段名稱一致,這里不再重復(fù)列出了。

頁面初始效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

最終頁面效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

編程要求

根據(jù)提示,在右側(cè)編輯器補(bǔ)充getGoodsByUserId方法代碼,并返回Cart列表。

注意:后續(xù)關(guān)卡都是需要從request獲取用戶信息,從而獲得userId。在本關(guān)卡獲取成功后,后續(xù)關(guān)卡默認(rèn)已經(jīng)獲取到userId,并當(dāng)成接口參數(shù)傳入,不再需要重復(fù)獲取。

測試說明

平臺(tái)會(huì)對(duì)你編寫的代碼進(jìn)行測試:

預(yù)期輸出:

[{"addTime":1543505629000,"buyNum":1,"cartId":101,"goodsClass":"甜品","goodsDescribe":"酸甜清爽\r\n回味無窮","goodsExplain":"卡福洛芒果泥","goodsFrom":"上海","goodsId":"list3","goodsImg":"list_3-1.jpg","goodsName":"芒果熔巖星球蛋糕 Mango Planet","goodsNum":1994,"goodsPrice":118.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約680g","goodsTime":"2天","salesNum":42,"userId":"123456"},{"addTime":1543505631000,"buyNum":1,"cartId":102,"discountEndTime":1499184679000,"discountStartTime":1498923465000,"goodsClass":"甜品","goodsDescribe":"芝士與香草戚風(fēng)被雪域奶油的浪漫籠罩\r\n每一口都充滿快樂的滋味","goodsDiscount":0.75,"goodsExplain":"選用進(jìn)口白巧克力","goodsFrom":"上海","goodsId":"list6","goodsImg":"list_6-1.jpg","goodsName":"美刀刀蛋糕 Ms. Golden","goodsNum":3000,"goodsPrice":99.00,"goodsSaveCondition":"冷藏0~4攝氏度","goodsSize":"約700g","goodsTime":"3天","salesNum":5,"userId":"123456"}]

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import com.educoder.dao.impl.BaseDao;
    import com.educoder.entity.Cart;
    import com.educoder.entity.User;
    import com.educoder.service.CartService;
    public class CartServiceImpl implements CartService {
        // 查詢購物車列表
        public List<Cart> getGoodsByUserId(HttpServletRequest request) {
            /********* Begin *********/
            User user = (User)request.getSession().getAttribute("user");
            String userId = user.getUserId();
            String sql = "select * from t_cart as a, t_goods as b where a.goodsId = b.goodsId and a.userId = ?";
            List<Cart> cartList = null;
            List<Object> parameters = new ArrayList<Object>();
            parameters.add(userId);
            try {
                cartList = BaseDao.operQuery(sql, parameters, Cart.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return cartList;
            /********* End *********/
        }
        // 購物車操作接口
        @Override
        public void doCartHandle(String userId, String goodsId, String buyNum, String oper) {
            /********* Begin *********/
            String deletesql = "delete from t_cart where userId=? and goodsId=?";
            String querysql = "select * from t_cart where userId = ? and goodsId = ?";
            String updatesql = "update t_cart set buyNum=? where userId=? and goodsId=?";
            String addsql = "insert into t_cart(userId, goodsId, buyNum, addTime) values(?, ?, ?, ?)";
            List<Object> parameters = new ArrayList<Object>();
            //刪除
            if(buyNum == null) {
                parameters.add(userId);
                parameters.add(goodsId);
                BaseDao.operUpdate(deletesql, parameters);
            }
            else{
                //進(jìn)行修改和添加
                List<Cart> goodsList = null;
                parameters.add(userId);
                parameters.add(goodsId);
                try {
                    goodsList = BaseDao.operQuery(querysql, parameters, Cart.class);
                    parameters.clear();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //進(jìn)行添加
                if(goodsList.isEmpty()) {
                    parameters.add(userId);
                    parameters.add(goodsId);
                    parameters.add(buyNum);
                    parameters.add(new Date());
                    BaseDao.operUpdate(addsql, parameters);
                }
                else {
                    //進(jìn)行修改
                    if(oper != null) {
                        buyNum += goodsList.get(0).getBuyNum();
                        parameters.add(buyNum);
                        parameters.add(userId);
                        parameters.add(goodsId);
                        BaseDao.operUpdate(updatesql, parameters);
                    }
                }
            }
            /********* End *********/
        }
    }

五、購物車操作

本關(guān)任務(wù)

為了能進(jìn)行購物車的修改、添加、刪除操作,本關(guān)需要借助JDBC,對(duì)數(shù)據(jù)庫表t_cart、t_goods表進(jìn)行操作。

為了完成本關(guān)任務(wù),需要了解:

  • JDBC更新方法封裝;

  • 購物車相關(guān)信息介紹。

JDBC查詢方法封裝

為了方便JDBC操作,平臺(tái)進(jìn)行的JDBC更新方法進(jìn)行了封裝,封裝類com.educoder.dao.impl.BaseDao。

public static boolean operUpdate(String sql, List<Object> p) {
        Connection conn = null;
        PreparedStatement pste = null;
        int res = 0;
        conn = getConn();
        try {
            pste = conn.prepareStatement(sql);
            if (p != null) {
                for (int i = 0; i < p.size(); i++) {
                    pste.setObject(i + 1, p.get(i));
                }
            }
            res = pste.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            releaseAll(null, pste, conn);
        }
        return res > 0;//
    }

購物車相關(guān)信息介紹

MYSQL用戶名 MYSQL密碼 驅(qū)動(dòng) URL
root 123123 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

com.educoder.entity.Goods字段及方法;

字段 描述 類型 get方法 set方法
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
goodsName 商品名 String getGoodsName() setGoodsName(String goodsName)
goodsImg 展示于主頁的圖 String getGoodsImg()? setGoodsImg(String goodsImg)
goodsPrice 價(jià)格 BigDecimal getGoodsPrice() setGoodsPrice(BigDecimal goodsPrice)
goodsNum 庫存數(shù)量 Integer getGoodsNum() setGoodsNum(Integer goodsNum)
salesNum 銷售數(shù)量 Integer getSalesNum() setSalesNum(Integer salesNum)
goodsSize 商品規(guī)格 String getGoodsSize() setGoodsSize(String goodsSize)
goodsFrom 商品產(chǎn)地 String getGoodsFrom() setGoodsFrom(String goodsFrom)
goodsTime 保質(zhì)期 String getGoodsTime() setGoodsTime(String goodsTime)
goodsSaveCondition 存儲(chǔ)條件 String getGoodsSaveCondition() setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe 商品描述介紹 String getGoodsDescribe() setGoodsDescribe(String goodsDescribe)
goodsExplain 對(duì)商品簡短說明 String getGoodsExplain() setGoodsExplain(String goodsExplain)
goodsClass 所屬類別 String getGoodsClass() setGoodsClass(String goodsClass)
goodsDiscount 折扣 BigDecimal getGoodsDiscount() setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime 優(yōu)惠起始時(shí)間 Date getDiscountStartTime() setDiscountStartTime(Date discountStartTime)
discountEndTime 優(yōu)惠截止時(shí)間 Date getDiscountEndTime() setDiscountEndTime(Date discountEndTime)

注意:Cart類冗余信息是需要通過和t_goods表關(guān)聯(lián)查詢出來的,不會(huì)存在下面的t_cart表里。

表和類對(duì)應(yīng)表;

庫名 表名 類名
online_shop t_cart Cart

注意:類字段和對(duì)應(yīng)的表字段名稱一致,這里不再重復(fù)列出了。

編程要求

根據(jù)提示,在右側(cè)編輯器補(bǔ)充doCartHandle方法代碼。

接口請(qǐng)求參數(shù)說明:

  • userId 用戶Id;

  • goodsId 商品Id

  • buyNum 添加或修改數(shù)量,當(dāng)為null,表示刪除;

  • oper 如果存在,添加buyNum;如果不存在,修改為buyNum。

測試輸入:123456 list2 1 2

預(yù)期輸出:插入成功 userId:123456 goodsId:list2 buyNum:1 oper:2

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import com.educoder.dao.impl.BaseDao;
    import com.educoder.entity.Cart;
    import com.educoder.entity.User;
    import com.educoder.service.CartService;
    public class CartServiceImpl implements CartService {
        // 查詢購物車列表
        public List<Cart> getGoodsByUserId(HttpServletRequest request) {
            /********* Begin *********/
            User user = (User)request.getSession().getAttribute("user");
            String userId = user.getUserId();
            String sql = "select * from t_cart as a, t_goods as b where a.goodsId = b.goodsId and a.userId = ?";
            List<Cart> cartList = null;
            List<Object> parameters = new ArrayList<Object>();
            parameters.add(userId);
            try {
                cartList = BaseDao.operQuery(sql, parameters, Cart.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return cartList;
            /********* End *********/
        }
        // 購物車操作接口
        @Override
        public void doCartHandle(String userId, String goodsId, String buyNum, String oper) {
            /********* Begin *********/
            String deletesql = "delete from t_cart where userId=? and goodsId=?";
            String querysql = "select * from t_cart where userId = ? and goodsId = ?";
            String updatesql = "update t_cart set buyNum=? where userId=? and goodsId=?";
            String addsql = "insert into t_cart(userId, goodsId, buyNum, addTime) values(?, ?, ?, ?)";
            List<Object> parameters = new ArrayList<Object>();
            //刪除
            if(buyNum == null) {
                parameters.add(userId);
                parameters.add(goodsId);
                BaseDao.operUpdate(deletesql, parameters);
            }
            else{
                //進(jìn)行修改和添加
                List<Cart> goodsList = null;
                parameters.add(userId);
                parameters.add(goodsId);
                try {
                    goodsList = BaseDao.operQuery(querysql, parameters, Cart.class);
                    parameters.clear();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //進(jìn)行添加
                if(goodsList.isEmpty()) {
                    parameters.add(userId);
                    parameters.add(goodsId);
                    parameters.add(buyNum);
                    parameters.add(new Date());
                    BaseDao.operUpdate(addsql, parameters);
                }
                else {
                    //進(jìn)行修改
                    if(oper != null) {
                        buyNum += goodsList.get(0).getBuyNum();
                        parameters.add(buyNum);
                        parameters.add(userId);
                        parameters.add(goodsId);
                        BaseDao.operUpdate(updatesql, parameters);
                    }
                }
            }
            /********* End *********/
        }
    }

六、下單

本關(guān)任務(wù)

上一關(guān)已經(jīng)完成了購物車操作功能開發(fā),現(xiàn)在我們就可以編寫下單接口進(jìn)行購買商品了,本關(guān)需要借助JDBC,在t_order、t_order_child表中存儲(chǔ)用戶訂單信息。

下單相關(guān)信息介紹;

MYSQL用戶名 MYSQL密碼 驅(qū)動(dòng) URL
root 123123 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

com.educoder.entity.Order字段及方法;

字段 描述 類型 get方法 set方法
orderId 訂單編號(hào) String getOrderId() setOrderId(String orderId)
userId 用戶Id String getUserId() setUserId(String userId)
orderTime 訂單時(shí)間 Date getOrderTime() setOrderTime(Date orderTime)
addressId 訂單地址 String getAddressId() setAddressId()(String addressId)

com.educoder.entity.Order冗余信息字段及方法;

字段 描述 類型 get方法 set方法
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
goodsName 商品名稱 String getGoodsName() setGoodsName(String goodsName)
goodsImg 商品圖片 String getGoodsImg() setGoodsImg(String goodsImg)
goodsPrice 下單價(jià)格 BigDecimal getGoodsPrice() setGoodsPrice(BigDecimal goodsPrice)

注意:Order類冗余信息是需要通過關(guān)聯(lián)查詢出來的,不會(huì)存在下面的t_order表里。

com.educoder.entity.OrderChildTable字段及方法;

字段 描述 類型 get方法 set方法
id 訂單商品主鍵 Integer getId() setId(Integer id)
orderId 訂單Id String getOrderId() setOrderId(String orderId)
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
buyNum 購買數(shù)量 Integer getBuyNum() setBuyNum()(Integer buyNum)

表和類對(duì)應(yīng)表;

庫名 表名 類名
online_shop t_order Order
online_shop t_order_child OrderChildTable

注意:類字段和對(duì)應(yīng)的表字段名稱一致,這里不再重復(fù)列出了。

編程要求

在右側(cè)編輯器補(bǔ)充submitOrder方法代碼,并返回Order類。

接口請(qǐng)求參數(shù)說明:

  • userId 用戶Id;

  • addressId 地址Id

  • goodsBuyNum 數(shù)組,購物車選中的商品數(shù)量;

  • chooseGoodId 數(shù)組,購物車選中的商品Id。

邏輯說明:

  1. 下單時(shí)orderId需要唯一,可以使用UUID;

  2. 表分為t_order訂單表和t_order_child訂單子表,因?yàn)橄聠紊唐酚锌赡芏鄠€(gè);

  3. 在下單時(shí),需要調(diào)用上一關(guān)的購物車操作接口,進(jìn)行購物車數(shù)據(jù)清空。

測試輸入:123456 d01e153c-fc1f-4326-9956-cbf9582a9df7 1,1 list3,list6

預(yù)期輸出:

清空購物車成功
訂單存儲(chǔ)信息: userId:123456 addressId:d01e153c-fc1f-4326-9956-cbf9582a9df7
訂單商品存儲(chǔ)信息:[{"buyNum":1,"goodsId":"list3","id":53},{"buyNum":1,"goodsId":"list6","id":54}]

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import com.educoder.dao.impl.BaseDao;
import com.educoder.entity.Order;
import com.educoder.service.OrderService;
public class OrderServiceImpl implements OrderService {
     private CartServiceImpl catService = new CartServiceImpl();
    // 下單
    public Order submitOrder(String userId, String addressId, String[] goodsBuyNum,
            String[] chooseGoodId) {
        /********* Begin *********/
        Order order = new Order();
        String ordersql = "insert into t_order(orderId, userId, orderTime, addressId) values(?, ?, ?, ?)";
        String child_order_sql = "insert into t_order_child (orderId, goodsId, buyNum) values( ?, ?, ?) ";
        String orderId = UUID.randomUUID().toString();
        List<Object> parameters = new ArrayList<Object>();
        parameters.add(orderId);
        parameters.add(userId);
        parameters.add(new Date());
        parameters.add(addressId);
        BaseDao.operUpdate(ordersql, parameters);
        for(int n = 0 ; n < chooseGoodId.length; n++) {
            parameters.clear();
            parameters.add(orderId);
            parameters.add(chooseGoodId[n]);
            parameters.add(goodsBuyNum[n]);
            BaseDao.operUpdate(child_order_sql, parameters);
            //下單后,需要清空購物車
            catService.doCartHandle(userId, chooseGoodId[n], null, null);
        }
        //返回帶有訂單id的訂單
        order.setOrderId(orderId);
        return order;
        /********* End *********/
    }
    // 訂單查詢
    public List<Order> getOrderByUserId(String userId) {
        /********* Begin *********/
        String sql = "select A.orderId, A.userId, B.userName, A.orderTime, C.address, E.goodsId, E.goodsName, D.buyNum, E.goodsPrice from " +
                "t_order as A, t_user as B, t_address as C, t_order_child as D, t_goods as E " +
                "where A.userId=? and A.orderId=D.orderId and A.userId=B.userId and A.addressId=C.addressId and D.goodsId=E.goodsId " +
                "order by orderTime desc";
        List<Object> parameters = new ArrayList<Object>();
        parameters.add(userId);
        List<Order> orderList = null;
        try {
            orderList = BaseDao.operQuery(sql, parameters, Order.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return orderList;
        /********* End *********/
    }
}

七、訂單查詢

本關(guān)任務(wù)

上一關(guān)已經(jīng)完成下單接口,本關(guān)需要完成查詢訂單列表,本關(guān)需要借助JDBCt_order、t_usert_address、t_order_child表中查詢訂單信息。

訂單查詢相關(guān)信息介紹;

MYSQL用戶名 MYSQL密碼 驅(qū)動(dòng) URL
root 123123 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

com.educoder.entity.Order字段及方法;

字段 描述 類型 get方法 set方法
orderId 訂單編號(hào) String getOrderId() setOrderId(String orderId)
userId 用戶Id String getUserId() setUserId(String userId)
orderTime 訂單時(shí)間 Date getOrderTime() setOrderTime(Date orderTime)
addressId 訂單地址 String getAddressId() setAddressId()(String addressId)

com.educoder.entity.Order冗余信息字段及方法;

字段 描述 類型 get方法 set方法
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
goodsName 商品名稱 String getGoodsName() setGoodsName(String goodsName)
goodsImg 商品圖片 String getGoodsImg() setGoodsImg(String goodsImg)
goodsPrice 下單價(jià)格 BigDecimal getGoodsPrice setGoodsPrice(BigDecimal goodsPrice)

注意:Order類冗余信息是需要通過關(guān)聯(lián)查詢出來的,不會(huì)存在下面的t_order表里。

com.educoder.entity.OrderChildTable字段及方法;

字段 描述 類型 get方法 set方法
id 訂單商品主鍵 Integer getId() setId(Integer id)
orderId 訂單Id String getOrderId() setOrderId(String orderId)
goodsId 商品Id String getGoodsId() setGoodsId(String goodsId)
buyNum 購買數(shù)量 Integer getBuyNum() setBuyNum()(Integer buyNum)

com.educoder.entity.Address字段及方法;

字段 描述 類型 get方法 set方法
addressId 地址Id String getAddressId() setAddressId(String addressId)
userId 用戶Id String getUserId() setUserId(String userId)
userName 收貨姓名 String getUserName() setUserName(String userName)
userTel 收貨電話 String getUserTel() setUserTel()(String addressId)
address 收貨地址 String getAddress() setAddress()(String addressId)

表和類對(duì)應(yīng)表;

庫名 表名 類名
online_shop t_order Order
online_shop t_order_child OrderChildTable
online_shop t_address Address

注意:類字段和對(duì)應(yīng)的表字段名稱一致,這里不再重復(fù)列出了。

頁面初始效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

最終頁面效果圖:

Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城

編程要求

在右側(cè)編輯器補(bǔ)充getOrderByUserId方法代碼,并返回Goods列表。

接口請(qǐng)求參數(shù)說明:

  • userId?用戶Id

測試說明

測試輸入:123456

預(yù)期輸出:

[{"address":"測試地址","buyNum":1,"goodsId":"list1","goodsName":"雪域牛乳芝士","goodsPrice":98.00,"orderId":"ab25ca41-2230-4af1-81f7-6cfe8872d6b0","orderTime":1543220250000,"userId":"123456","userName":"test"},{“address":"測試地址","buyNum":1,"goodsId":"list2","goodsName":"哈!蜜瓜蛋糕 Hey Melon","goodsPrice":99.00,"orderId":"ab25ca41-2230-4af1-81f7-6cfe8872d6b0","orderTime":1543220250000,"userId":"123456","userName":"test"}]

實(shí)現(xiàn)代碼

package com.educoder.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import com.educoder.dao.impl.BaseDao;
import com.educoder.entity.Order;
import com.educoder.service.OrderService;
public class OrderServiceImpl implements OrderService {
     private CartServiceImpl catService = new CartServiceImpl();
    // 下單
    public Order submitOrder(String userId, String addressId, String[] goodsBuyNum,
            String[] chooseGoodId) {
        /********* Begin *********/
        Order order = new Order();
        String ordersql = "insert into t_order(orderId, userId, orderTime, addressId) values(?, ?, ?, ?)";
        String child_order_sql = "insert into t_order_child (orderId, goodsId, buyNum) values( ?, ?, ?) ";
        String orderId = UUID.randomUUID().toString();
        List<Object> parameters = new ArrayList<Object>();
        parameters.add(orderId);
        parameters.add(userId);
        parameters.add(new Date());
        parameters.add(addressId);
        BaseDao.operUpdate(ordersql, parameters);
        for(int n = 0 ; n < chooseGoodId.length; n++) {
            parameters.clear();
            parameters.add(orderId);
            parameters.add(chooseGoodId[n]);
            parameters.add(goodsBuyNum[n]);
            BaseDao.operUpdate(child_order_sql, parameters);
            //下單后,需要清空購物車
            catService.doCartHandle(userId, chooseGoodId[n], null, null);
        }
        //返回帶有訂單id的訂單
        order.setOrderId(orderId);
        return order;
        /********* End *********/
    }
    // 訂單查詢
    public List<Order> getOrderByUserId(String userId) {
        /********* Begin *********/
        String sql = "select A.orderId, A.userId, B.userName, A.orderTime, C.address, E.goodsId, E.goodsName, D.buyNum, E.goodsPrice from " +
                "t_order as A, t_user as B, t_address as C, t_order_child as D, t_goods as E " +
                "where A.userId=? and A.orderId=D.orderId and A.userId=B.userId and A.addressId=C.addressId and D.goodsId=E.goodsId " +
                "order by orderTime desc";
        List<Object> parameters = new ArrayList<Object>();
        parameters.add(userId);
        List<Order> orderList = null;
        try {
            orderList = BaseDao.operQuery(sql, parameters, Order.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return orderList;
        /********* End *********/
    }
}

到了這里,關(guān)于Educoder/頭歌JAVA——Java Web:基于JSP的網(wǎng)上商城的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 計(jì)算機(jī)畢設(shè) - java web網(wǎng)上購物商城系統(tǒng)(源碼+論文)

    計(jì)算機(jī)畢設(shè) - java web網(wǎng)上購物商城系統(tǒng)(源碼+論文)

    java web網(wǎng)上購物商城系統(tǒng) 提示:適合用于課程設(shè)計(jì)或畢業(yè)設(shè)計(jì),工作量達(dá)標(biāo),源碼開放 本網(wǎng)上商城系統(tǒng)以MVC分層思想為原則,使用SSH框架進(jìn)行整合開發(fā)。頁面顯示使用JSP和HTML,數(shù)據(jù)庫使用MySQL,這些技術(shù)目前相對(duì)比較成熟,方便系統(tǒng)的維護(hù)與擴(kuò)展。 網(wǎng)上商城系統(tǒng)由前臺(tái)管理

    2024年02月03日
    瀏覽(91)
  • 基于JSP微信小程序網(wǎng)上書店商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于JSP微信小程序網(wǎng)上書店商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    【后臺(tái)管理員功能】 會(huì)員列表:查看所有注冊(cè)會(huì)員信息,支持刪除 錄入資訊:錄入資訊標(biāo)題、內(nèi)容等信息 管理資訊:查看已錄入資訊列表,支持刪除和修改 廣告設(shè)置:上傳圖片和設(shè)置小程序首頁輪播圖廣告地址 留言列表:所有用戶留言信息列表,支持刪除 圖書分類管理:

    2024年02月12日
    瀏覽(31)
  • 基于JAVA的ssm框架網(wǎng)上手機(jī)商城

    基于JAVA的ssm框架網(wǎng)上手機(jī)商城

    博主介紹:java高級(jí)開發(fā),從事互聯(lián)網(wǎng)行業(yè)六年,熟悉各種主流語言,精通java、python、爬蟲、web開發(fā),已經(jīng)做了六年的畢業(yè)設(shè)計(jì)程序開發(fā),開發(fā)過上千套畢業(yè)設(shè)計(jì)程序,可以定制、也可成品項(xiàng)目,博客中有上百套程序可供參考,歡迎共同交流學(xué)習(xí)。 ??文末點(diǎn)擊卡片獲取聯(lián)系??

    2024年04月17日
    瀏覽(23)
  • 基于Java籃球系列網(wǎng)上商城系統(tǒng)詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java籃球系列網(wǎng)上商城系統(tǒng)詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和學(xué)生畢業(yè)項(xiàng)目實(shí)戰(zhàn),高校老師/講師/同行前輩交流 ? 主要內(nèi)容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年01月17日
    瀏覽(23)
  • 基于微信小程序網(wǎng)上商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文大綱參考(JSP后臺(tái))

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,學(xué)習(xí)后應(yīng)對(duì)畢業(yè)設(shè)計(jì)答辯。 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、

    2024年02月19日
    瀏覽(27)
  • 【java畢業(yè)設(shè)計(jì)】基于Spring Boot+mysql的網(wǎng)上商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(程序源碼)-網(wǎng)上商城購物系統(tǒng)

    【java畢業(yè)設(shè)計(jì)】基于Spring Boot+mysql的網(wǎng)上商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(程序源碼)-網(wǎng)上商城購物系統(tǒng)

    大家好,今天給大家介紹基于Spring Boot+mysql的網(wǎng)上商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),本論文只截取部分文章重點(diǎn),文章末尾附有本畢業(yè)設(shè)計(jì)完整源碼及論文的獲取方式。更多畢業(yè)設(shè)計(jì)源碼可訂閱查看上方【畢業(yè)設(shè)計(jì)】專欄獲取哦。 隨著科學(xué)技術(shù)的飛速發(fā)展,社會(huì)的方方面面、各行各

    2024年02月06日
    瀏覽(22)
  • 基于java(Springboot)網(wǎng)上書城圖書購物商城網(wǎng)站系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于java(Springboot)網(wǎng)上書城圖書購物商城網(wǎng)站系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、

    2024年01月24日
    瀏覽(28)
  • 基于Java的網(wǎng)上商城設(shè)計(jì)與實(shí)現(xiàn)(Springboot框架) 研究背景與意義、國內(nèi)外研究現(xiàn)狀

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、

    2024年02月03日
    瀏覽(21)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項(xiàng)目:網(wǎng)上茶葉商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項(xiàng)目:網(wǎng)上茶葉商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,學(xué)習(xí)后應(yīng)對(duì)畢業(yè)設(shè)計(jì)答辯。 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、

    2024年02月22日
    瀏覽(101)
  • 基于Java(SpringBoot框架)畢業(yè)設(shè)計(jì)作品成品(22)網(wǎng)上茶葉商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于Java(SpringBoot框架)畢業(yè)設(shè)計(jì)作品成品(22)網(wǎng)上茶葉商城購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    博主介紹: 《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月07日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包