Educoder/头歌JAVA——Java Web:基于JSP的网上商城

news2024/11/23 11:23:10

目录

一、商品列表

本关任务

具体要求

结果输出

实现代码

二、商品详情

本关任务

JDBC查询方法封装

商品相关信息介绍

具体要求

结果输出

实现代码

三、商品搜索

编程要求

测试说明

实现代码

四、购物车列表

本关任务

JDBC查询方法封装

购物车相关信息介绍

编程要求

测试说明

实现代码

五、购物车操作

本关任务

JDBC查询方法封装

购物车相关信息介绍

编程要求

实现代码

六、下单

本关任务

编程要求

实现代码

七、订单查询

本关任务

编程要求

测试说明

实现代码


一、商品列表

本关任务

一个商场不能缺少商品,本关需要借助JDBC,从 t_goods表中获取销量前四的商品信息,并展示到页面。

JDBC信息;

MYSQL用户名MYSQL密码驱动URL
root123123com.mysql.jdbc.Driverjdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

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

字段描述类型get方法set方法
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
goodsName商品名StringgetGoodsName()setGoodsName(String goodsName)
goodsImg展示于主页的图StringgetGoodsImg() setGoodsImg(String goodsImg)
goodsPrice价格BigDecimalgetGoodsPrice()setGoodsPrice(BigDecimal goodsPrice)
goodsNum库存数量IntegergetGoodsNum()setGoodsNum(Integer goodsNum)
salesNum销售数量IntegergetSalesNum()setSalesNum(Integer salesNum)
goodsSize商品规格StringgetGoodsSize()setGoodsSize(String goodsSize)
goodsFrom商品产地StringgetGoodsFrom()setGoodsFrom(String goodsFrom)
goodsTime保质期StringgetGoodsTime()setGoodsTime(String goodsTime)
goodsSaveCondition存储条件StringgetGoodsSaveCondition()setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe商品描述介绍StringgetGoodsDescribe()setGoodsDescribe(String goodsDescribe)
goodsExplain对商品简短说明StringgetGoodsExplain()setGoodsExplain(String goodsExplain)
goodsClass所属类别StringgetGoodsClass()setGoodsClass(String goodsClass)
goodsDiscount折扣BigDecimalgetGoodsDiscount()setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime优惠起始时间DategetDiscountStartTime()setDiscountStartTime(Date discountStartTime)
discountEndTime优惠截止时间DategetDiscountEndTime()setDiscountEndTime(Date discountEndTime)

表和类对应表;

库名表名类名
online_shopt_goodsGoods
  1. 注意:类字段和对应的表字段名称一致,这里不再重复列出了。

页面初始效果图:

最终页面效果图:

具体要求

  • 补全 getGoodsList()方法,返回List<Goods>(商品列表)。

结果输出

[{"goodsClass":"甜品","goodsDescribe":"口感绵密,精致细腻\r\n这份雪白让你有如获至宝的幸福感","goodsExplain":"手工打发而成的进口鲜奶油","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将巧克力的香醇甜蜜发挥到极致\r\n每一口都倍感甜蜜","goodsExplain":"进口的黑巧克力","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还有丝丝香草戚风蛋糕的香气","goodsExplain":"手工打发而成的进口鲜奶油","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}]

实现代码

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 *********/
        }
    }

二、商品详情

本关任务

有了商品还需要看商品的详细信息,本关需要借助JDBC,通过参数商品Id从数据库中获取商品详情,展示到页面。为了完成本关任务,需要了解:

  • JDBC 查询方法封装;
  • 商品相关信息介绍

JDBC查询方法封装

为了方便JDBC操作,平台对JDBC查询方法进行了封装,封装类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;
    }

例如,第一关可以使用如下方法,获取商品列表:

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();
        }

商品相关信息介绍

MYSQL用户名MYSQL密码驱动URL
root123123com.mysql.jdbc.Driverjdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

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

字段描述类型get方法set方法
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
goodsName商品名StringgetGoodsName()setGoodsName(String goodsName)
goodsImg展示于主页的图StringgetGoodsImg() setGoodsImg(String goodsImg)
goodsPrice价格BigDecimalgetGoodsPrice()setGoodsPrice(BigDecimal goodsPrice)
goodsNum库存数量IntegergetGoodsNum()setGoodsNum(Integer goodsNum)
salesNum销售数量IntegergetSalesNum()setSalesNum(Integer salesNum)
goodsSize商品规格StringgetGoodsSize()setGoodsSize(String goodsSize)
goodsFrom商品产地StringgetGoodsFrom()setGoodsFrom(String goodsFrom)
goodsTime保质期StringgetGoodsTime()setGoodsTime(String goodsTime)
goodsSaveCondition存储条件StringgetGoodsSaveCondition()setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe商品描述介绍StringgetGoodsDescribe()setGoodsDescribe(String goodsDescribe)
goodsExplain对商品简短说明StringgetGoodsExplain()setGoodsExplain(String goodsExplain)
goodsClass所属类别StringgetGoodsClass()setGoodsClass(String goodsClass)
goodsDiscount折扣BigDecimalgetGoodsDiscount()setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime优惠起始时间DategetDiscountStartTime()setDiscountStartTime(Date discountStartTime)
discountEndTime优惠截止时间DategetDiscountEndTime()setDiscountEndTime(Date discountEndTime)

表和类对应表;

库名表名类名
online_shopt_goodsGoods
  1. 注意:类字段和对应的表字段名称一致,这里不再重复列出了。

页面初始效果图:

最终页面效果图:

具体要求

  • 补全getGoodsByGoodsId()方法,完成查询商品详情的任务,最后返回Goods(商品)。

结果输出

{"goodsClass":"甜品","goodsDescribe":"口感绵密,精致细腻\r\n这份雪白让你有如获至宝的幸福感","goodsExplain":"手工打发而成的进口鲜奶油","goodsFrom":"上海","goodsId":"list1","goodsImg":"list_1-1.jpg","goodsName":"雪域牛乳芝士","goodsNum":996,"goodsPrice":98.00,"goodsSaveCondition":"冷藏0~4摄氏度","goodsSize":"约450g","goodsTime":"3天","salesNum":44}

实现代码

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 *********/
        }
    }

三、商品搜索

编程要求

请仔细阅读右侧代码,在Begin-End区域内进行代码补充,实现商品搜索的功能,具体需求如下:

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

测试说明

平台会对你编写的代码进行测试:

测试输入:雪域牛

预期输出:

[{"goodsClass":"甜品","goodsDescribe":"口感绵密,精致细腻\r\n这份雪白让你有如获至宝的幸福感","goodsExplain":"手工打发而成的进口鲜奶油","goodsFrom":"上海","goodsId":"list1","goodsImg":"list_1-1.jpg","goodsName":"雪域牛乳芝士","goodsNum":996,"goodsPrice":98.00,"goodsSaveCondition":"冷藏0~4摄氏度","goodsSize":"约450g","goodsTime":"3天","salesNum":44}]

实现代码

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 *********/
        }
    }

四、购物车列表

本关任务

网上看中的商品,暂时不买,还需要保存起来,这个需要通过购物车来实现。本关需要从session里获取属性名为userUser对象,并借助JDBC,通过表t_cartt_goods获取用户购物车的商品内容,并展示到页面。

为了完成本关任务,需要了解:

  • JDBC查询方法封装;

  • 购物车相关信息介绍。

JDBC查询方法封装

为了方便JDBC操作,平台对JDBC查询方法进行了封装,封装类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;
    }

例如,第一关可以使用如下方法,获取商品列表:

  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. }

购物车相关信息介绍

MYSQL用户名MYSQL密码驱动URL
root123123com.mysql.jdbc.Driverjdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

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

字段描述类型get方法set方法
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
goodsName商品名StringgetGoodsName()setGoodsName(String goodsName)
goodsImg展示于主页的图StringgetGoodsImg() setGoodsImg(String goodsImg)
goodsPrice价格BigDecimalgetGoodsPrice()setGoodsPrice(BigDecimal goodsPrice)
goodsNum库存数量IntegergetGoodsNum()setGoodsNum(Integer goodsNum)
salesNum销售数量IntegergetSalesNum()setSalesNum(Integer salesNum)
goodsSize商品规格StringgetGoodsSize()setGoodsSize(String goodsSize)
goodsFrom商品产地StringgetGoodsFrom()setGoodsFrom(String goodsFrom)
goodsTime保质期StringgetGoodsTime()setGoodsTime(String goodsTime)
goodsSaveCondition存储条件StringgetGoodsSaveCondition()setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe商品描述介绍StringgetGoodsDescribe()setGoodsDescribe(String goodsDescribe)
goodsExplain对商品简短说明StringgetGoodsExplain()setGoodsExplain(String goodsExplain)
goodsClass所属类别StringgetGoodsClass()setGoodsClass(String goodsClass)
goodsDiscount折扣BigDecimalgetGoodsDiscount()setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime优惠起始时间DategetDiscountStartTime()setDiscountStartTime(Date discountStartTime)
discountEndTime优惠截止时间DategetDiscountEndTime()setDiscountEndTime(Date discountEndTime)

注意:Cart类冗余信息是通过和t_goods表关联查询出来的,不是存在下面的t_cart表里。

表和类对应表;

库名表名类名
online_shopt_cartCart

注意:类字段和对应的表字段名称一致,这里不再重复列出了。

页面初始效果图:

最终页面效果图:

编程要求

根据提示,在右侧编辑器补充getGoodsByUserId方法代码,并返回Cart列表。

注意:后续关卡都是需要从request获取用户信息,从而获得userId。在本关卡获取成功后,后续关卡默认已经获取到userId,并当成接口参数传入,不再需要重复获取。

测试说明

平台会对你编写的代码进行测试:

预期输出:

[{"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":"芝士与香草戚风被雪域奶油的浪漫笼罩\r\n每一口都充满快乐的滋味","goodsDiscount":0.75,"goodsExplain":"选用进口白巧克力","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"}]

实现代码

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{
                //进行修改和添加
                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();
                }
                //进行添加
                if(goodsList.isEmpty()) {
                    parameters.add(userId);
                    parameters.add(goodsId);
                    parameters.add(buyNum);
                    parameters.add(new Date());
                    BaseDao.operUpdate(addsql, parameters);
                }
                else {
                    //进行修改
                    if(oper != null) {
                        buyNum += goodsList.get(0).getBuyNum();
                        parameters.add(buyNum);
                        parameters.add(userId);
                        parameters.add(goodsId);
                        BaseDao.operUpdate(updatesql, parameters);
                    }
                }
            }
            /********* End *********/
        }
    }

五、购物车操作

本关任务

为了能进行购物车的修改、添加、删除操作,本关需要借助JDBC,对数据库表t_cartt_goods表进行操作。

为了完成本关任务,需要了解:

  • JDBC更新方法封装;

  • 购物车相关信息介绍。

JDBC查询方法封装

为了方便JDBC操作,平台进行的JDBC更新方法进行了封装,封装类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;//
    }

购物车相关信息介绍

MYSQL用户名MYSQL密码驱动URL
root123123com.mysql.jdbc.Driverjdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

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

字段描述类型get方法set方法
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
goodsName商品名StringgetGoodsName()setGoodsName(String goodsName)
goodsImg展示于主页的图StringgetGoodsImg() setGoodsImg(String goodsImg)
goodsPrice价格BigDecimalgetGoodsPrice()setGoodsPrice(BigDecimal goodsPrice)
goodsNum库存数量IntegergetGoodsNum()setGoodsNum(Integer goodsNum)
salesNum销售数量IntegergetSalesNum()setSalesNum(Integer salesNum)
goodsSize商品规格StringgetGoodsSize()setGoodsSize(String goodsSize)
goodsFrom商品产地StringgetGoodsFrom()setGoodsFrom(String goodsFrom)
goodsTime保质期StringgetGoodsTime()setGoodsTime(String goodsTime)
goodsSaveCondition存储条件StringgetGoodsSaveCondition()setGoodsSaveCondition(String goodsSaveCondition)
goodsDescribe商品描述介绍StringgetGoodsDescribe()setGoodsDescribe(String goodsDescribe)
goodsExplain对商品简短说明StringgetGoodsExplain()setGoodsExplain(String goodsExplain)
goodsClass所属类别StringgetGoodsClass()setGoodsClass(String goodsClass)
goodsDiscount折扣BigDecimalgetGoodsDiscount()setGoodsDiscount(BigDecimal goodsDiscount)
discountStartTime优惠起始时间DategetDiscountStartTime()setDiscountStartTime(Date discountStartTime)
discountEndTime优惠截止时间DategetDiscountEndTime()setDiscountEndTime(Date discountEndTime)

注意:Cart类冗余信息是需要通过和t_goods表关联查询出来的,不会存在下面的t_cart表里。

表和类对应表;

库名表名类名
online_shopt_cartCart

注意:类字段和对应的表字段名称一致,这里不再重复列出了。

编程要求

根据提示,在右侧编辑器补充doCartHandle方法代码。

接口请求参数说明:

  • userId 用户Id

  • goodsId 商品Id

  • buyNum 添加或修改数量,当为null,表示删除;

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

测试输入:123456 list2 1 2

预期输出:插入成功 userId:123456 goodsId:list2 buyNum:1 oper:2

实现代码

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{
                //进行修改和添加
                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();
                }
                //进行添加
                if(goodsList.isEmpty()) {
                    parameters.add(userId);
                    parameters.add(goodsId);
                    parameters.add(buyNum);
                    parameters.add(new Date());
                    BaseDao.operUpdate(addsql, parameters);
                }
                else {
                    //进行修改
                    if(oper != null) {
                        buyNum += goodsList.get(0).getBuyNum();
                        parameters.add(buyNum);
                        parameters.add(userId);
                        parameters.add(goodsId);
                        BaseDao.operUpdate(updatesql, parameters);
                    }
                }
            }
            /********* End *********/
        }
    }

六、下单

本关任务

上一关已经完成了购物车操作功能开发,现在我们就可以编写下单接口进行购买商品了,本关需要借助JDBC,在t_ordert_order_child表中存储用户订单信息。

下单相关信息介绍;

MYSQL用户名MYSQL密码驱动URL
root123123com.mysql.jdbc.Driverjdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

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

字段描述类型get方法set方法
orderId订单编号StringgetOrderId()setOrderId(String orderId)
userId用户IdStringgetUserId()setUserId(String userId)
orderTime订单时间DategetOrderTime()setOrderTime(Date orderTime)
addressId订单地址StringgetAddressId()setAddressId()(String addressId)

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

字段描述类型get方法set方法
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
goodsName商品名称StringgetGoodsName()setGoodsName(String goodsName)
goodsImg商品图片StringgetGoodsImg()setGoodsImg(String goodsImg)
goodsPrice下单价格BigDecimalgetGoodsPrice()setGoodsPrice(BigDecimal goodsPrice)

注意:Order类冗余信息是需要通过关联查询出来的,不会存在下面的t_order表里。

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

字段描述类型get方法set方法
id订单商品主键IntegergetId()setId(Integer id)
orderId订单IdStringgetOrderId()setOrderId(String orderId)
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
buyNum购买数量IntegergetBuyNum()setBuyNum()(Integer buyNum)

表和类对应表;

库名表名类名
online_shopt_orderOrder
online_shopt_order_childOrderChildTable

注意:类字段和对应的表字段名称一致,这里不再重复列出了。

编程要求

在右侧编辑器补充submitOrder方法代码,并返回Order类。

接口请求参数说明:

  • userId 用户Id

  • addressId 地址Id

  • goodsBuyNum 数组,购物车选中的商品数量;

  • chooseGoodId 数组,购物车选中的商品Id

逻辑说明:

  1. 下单时orderId需要唯一,可以使用UUID

  2. 表分为t_order订单表和t_order_child订单子表,因为下单商品有可能多个;

  3. 在下单时,需要调用上一关的购物车操作接口,进行购物车数据清空。

测试输入:123456 d01e153c-fc1f-4326-9956-cbf9582a9df7 1,1 list3,list6

预期输出:

清空购物车成功
订单存储信息: userId:123456 addressId:d01e153c-fc1f-4326-9956-cbf9582a9df7
订单商品存储信息:[{"buyNum":1,"goodsId":"list3","id":53},{"buyNum":1,"goodsId":"list6","id":54}]

实现代码

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 *********/
    }
}

七、订单查询

本关任务

上一关已经完成下单接口,本关需要完成查询订单列表,本关需要借助JDBCt_ordert_usert_addresst_order_child表中查询订单信息。

订单查询相关信息介绍;

MYSQL用户名MYSQL密码驱动URL
root123123com.mysql.jdbc.Driverjdbc:mysql://127.0.0.1:3306/online_shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

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

字段描述类型get方法set方法
orderId订单编号StringgetOrderId()setOrderId(String orderId)
userId用户IdStringgetUserId()setUserId(String userId)
orderTime订单时间DategetOrderTime()setOrderTime(Date orderTime)
addressId订单地址StringgetAddressId()setAddressId()(String addressId)

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

字段描述类型get方法set方法
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
goodsName商品名称StringgetGoodsName()setGoodsName(String goodsName)
goodsImg商品图片StringgetGoodsImg()setGoodsImg(String goodsImg)
goodsPrice下单价格BigDecimalgetGoodsPricesetGoodsPrice(BigDecimal goodsPrice)

注意:Order类冗余信息是需要通过关联查询出来的,不会存在下面的t_order表里。

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

字段描述类型get方法set方法
id订单商品主键IntegergetId()setId(Integer id)
orderId订单IdStringgetOrderId()setOrderId(String orderId)
goodsId商品IdStringgetGoodsId()setGoodsId(String goodsId)
buyNum购买数量IntegergetBuyNum()setBuyNum()(Integer buyNum)

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

字段描述类型get方法set方法
addressId地址IdStringgetAddressId()setAddressId(String addressId)
userId用户IdStringgetUserId()setUserId(String userId)
userName收货姓名StringgetUserName()setUserName(String userName)
userTel收货电话StringgetUserTel()setUserTel()(String addressId)
address收货地址StringgetAddress()setAddress()(String addressId)

表和类对应表;

库名表名类名
online_shopt_orderOrder
online_shopt_order_childOrderChildTable
online_shopt_addressAddress

注意:类字段和对应的表字段名称一致,这里不再重复列出了。

页面初始效果图:

最终页面效果图:

编程要求

在右侧编辑器补充getOrderByUserId方法代码,并返回Goods列表。

接口请求参数说明:

  • userId 用户Id

测试说明

测试输入:123456

预期输出:

[{"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"}]

实现代码

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 *********/
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IPsec中IKE与ISAKMP过程分析(主模式-消息4)

IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息1&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息2&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息3&#xff09;_搞搞搞高傲的博客…

Jenkins+Docker+gitee 持续部署spring boot 应用教程

目录 参考安装jenkinsci拉取镜像创建目录安装maven启动镜像配置输入密码安装推荐的插件 创建用户密码配置环境变量安装gitee和dingtalk插件创建SpringBoot并创建Dockfile配置gitee的webhook配置构建shell脚本配置监听gitee webhook触发构建 配置dingtalk钉钉通知 参考 Jenkins…

归纳截图小结

文章目录 web服务器、缓存和PHP加速对比没有做软连接http状态码cookie是什么图形管理界面nginx的访问路径LANM架构redisd服务整体框架免密连接kubeletk8s架构图kubeadm、kubectl、kubelet作用k8s集群token失效时&#xff0c;重新创建tokenk8s网络通信OSI总结pod的理解k8s核心知…

springboot+vue高校实验室预约管理系统

开发环境 开发语言&#xff1a;Java 后端框架&#xff1a;springbootweb 前端框架&#xff1a;vue.js 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 校实验…

K8S集群原理(IT枫斗者)

K8S集群原理&#xff08;IT枫斗者&#xff09; 看图说K8S 先从一张大图来观看一下K8S是如何运作的&#xff0c;再具体去细化K8S的概念、组件以及网络模型。从上图&#xff0c;我们可以看到K8S组件和逻辑及其复杂&#xff0c;但是这并不可怕&#xff0c;我们从宏观上先了解K8S…

【设计模式】责任链模式的设计与示例

前言 责任链模式是一种行为设计模式&#xff0c;执行上它允许请求沿着一条处理链路依次向下传递&#xff0c;每个处理节点都能对当前状态的请求进行处理&#xff0c;满足一定条件后传递给下一个处理节点&#xff0c;亦或者直接结束这一次处理流程。 在现实生产环境中&#xf…

工作流框架研究

工作流框架研究 主流开源框架介绍OsWorkFlowJBPMActivitiFlowableCamundaCamunda 和Flowable对比功能上对比性能上对比 总结 主流开源框架介绍 OsWorkFlow 对于比较简单的流程&#xff0c;OsWorkFlow会是一个比较好的选择&#xff0c;对于复杂的流程就不推荐了&#xff0c;Os…

小 C 的数学(math)

祝大家劳动节快乐&#xff01;&#xff01;小手动起来 言归正传┏ (゜ω゜)☞ 题目描述 小 C 想要成为一名 OIer&#xff0c;于是他提前学习数学&#xff0c;为 OI 做好铺垫。这一天&#xff0c;他的数学老师给了一道题&#xff1a;给定正整数 a&#xff0c;以及给定一个区间 …

Python基础之列表元组

1.列表 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 去锁定它的位置&#xff0c;或索引&#xff0c;第一个索引是0&#xff0c;第二个索引是1&#xff0c;依此类推。Python有6个序列的内置类型&#xff0c;但最常见的是列表和元组。序列都可以进行的操作…

HTB-Forge

HTB-Forge 信息收集80端口 立足user -> root 信息收集 80端口 试试上传图片看看有什么限制。 jpg上传成功&#xff0c;并且会给一个随机的文件名存储图片&#xff0c;过了一阵子图片就会被清除。 上传phpinfo后访问界面出现报错。 看来没有执行上传的PHP代码&#xff0…

第43天-DP-第九章 ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

文章目录 1. 单词拆分2.多重背包3. 背包总结 1. 单词拆分 s class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());// 1. dp[i] 为true代表 可以拆分为一个或者多…

PySyft框架

openmined社区开源的pysyft框架可以提供安全的联邦学习&#xff0c;有助于解决基于“不可见数据”的统计分析与建模开发。在PySyft中&#xff0c;syft是重要的张量&#xff0c;通过建立SyftTensor抽象类来表现张量链的运算或数据状态转换。如图5-7所示&#xff0c;张量链的结构…

3.3 泰勒公式例题分析

例1 写出函数f(x)带有拉格朗日余项的n阶麦克劳林公式 我的答案&#xff1a; 一、信息 1.f(x)的表达式 2.目标求这个f(x)的n阶麦克劳林公式 二、分析 条件1&#xff1a;告诉我f(x)的表达式为我后续带入公式做准备 条件2&#xff1a;告诉我用什么公式和此次求解的方向 三…

【ONE·C++ || 二叉搜索树】

总言 二叉树进阶&#xff1a;主要介绍二叉搜索树相关内容。 文章目录 总言1、基本介绍1.1、什么是二叉搜索树 2、相关实现2.1、基本框架2.1.1、如何构建二叉树单节点2.1.2、如何定义一个二叉搜索树 2.2、非递归实现&#xff1a;插入、查找、删除2.2.1、二叉搜索树插入&#xf…

系统集成项目管理工程师 笔记(第16章:变更管理)

文章目录 16.1.2 项目变更的分类 50416.1.3 项目变更产生的原因 50516.2 变更管理的基本原则 50516.3 变更管理角色职责与工作程序 50616.3.1 角色职责 50716.3.2 工作程序 50716.4.1 变更管理操作要点 511 第16章 变更管理 504 16.1 项目变更的基本概念 504 项目变更是指在信息…

05 KVM虚拟化Linux Bridge环境部署

文章目录 05 KVM虚拟化Linux Bridge环境部署5.1 安装Linux Bridge5.1.1 安装bridge-utils软件包5.1.2 确认安装是否成功 5.2 配置Linux Bridge5.2.1 创建网桥br05.2.2 将物理网卡ens33绑定到Linux Bridge5.2.3 配置ens33的ip5.2.4 为Linux Bridge网桥br0分配ip5.2.4.1 DHCP设置…

JavaWeb04(登录绑值模糊查询功能实现连接数据库)

目录 一.实现登录功能 2.2 制作简易验证码 2.3 完成登录验证 2.4 登录实现 ①连接字符串 private static final String URL"jdbc:oracle:thin:localhost:1521:orcl"; ②加载驱动 OracleDriver private static final String URL"jdbc:oracle:thin:localh…

更好地提问ChatGPT_常用prompt表

对常见的用途&#xff0c;记录该表以便获得ChatGPT更高质量的回复。 类别目的提问方式要点文案写作周报、日报、年终总结本周我做了以下几件事情&#xff1a;出差客户办事处、交流演示、初步数据分析。请帮我写一份周报要点形式列举工作内容。可以说明职位&#xff0c;以便工作…

【五一创作】web小游戏开发:华容道(一)

web小游戏开发:华容道(一) 华容道htmlcss素材原图素材验证游戏关卡华容道 老顾儿时的记忆啊,也是一个经典的益智游戏。 游戏规则就不用再介绍了吧,就是让曹操移动到曹营就算胜利。 CSDN 文盲老顾的博客,https://blog.csdn.net/superrwfei html 经过上次的扫雷,大家应…

JavaScript 内存泄漏

内存的释放流程&#xff1a; 分配内存内存中的读写垃圾回收 对于内存的使用&#xff0c;所有语言基本都是一样的&#xff0c;只是更底层的语言在对于 ”分配内存“ 和 ”使用内存“ 是明确的&#xff0c;但是在高级语言中&#xff08;比如本文的 JS&#xff09;是隐藏了。 JS …