基于 java springboot+mybatis二手物品网站系统设计和实现

news2024/11/27 2:39:57

基于 java springboot+mybatis二手物品网站系统设计和实现

博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域
作者主页 超级帅帅吴
Java毕设项目精品实战案例《500套》
欢迎点赞 收藏 ⭐留言
文末获取源码联系方式

文章目录

  • 基于 java springboot+mybatis二手物品网站系统设计和实现
  • 项目背景:
  • 主要技术设计:spring、 springmvc、 springboot、 mybatis 、 jquery 、 md5 、bootstarp.js tomcat、富文本编译器、拦截器等
  • 主要功能设计:登录、注册、二手商品浏览、分类设置、模糊查找、轮播图、热销商品、购物车、订单、订单流程控制、用户管理、修改密码等
    • 用户分类查看二手物品信息 管理员可以在后台进行设置、用户可以登录个注册账号
    • 用户登录模块主要代码设计:
    • 一些热门和推荐的二手商品信息、可以再后台进行配置这些
    • 用户登录模块和注册:
    • 通过手机号和密码以及验证码进行登录注册操作
    • 我的购物车:
    • 我的订单流程以及收获地址信息等
    • 个人信息查看和修改
    • 后台管理:
    • 后台管理员主要对前端客户端一些用户的管理、商品的管理、轮播图管理、商品分类管理以及订单信息和订单流程管理
    • 轮播图配置
    • 商品分类以及排序等操作
    • 商品管理和上下架等具体操作
    • 后台商品信息的维护
    • 商品订单的处理和流程控制
    • 修改密码:
    • 数据库主要表设计:
    • 用户表:
    • 商品信息表:
    • 订单表设计:
  • 获取源码:

项目背景:

随着互联网的爆炸式发展,自中国加入WTO以来,电子商务在中国也得到了迅速的发展,现在互联网上的各种电子商务网站都在迅速增长。开发一个适合自己的二手商品交易网站,希望能为您提供便捷的服务。作为一个网购爱好者,我很同情他们。我穿的衣服,我用的工具,我用的书,生活用品和各种商品都会在一段时间后被淘汰。一些用户干脆把它们扔掉,这不仅是一种浪费,也污染了环境。还有一些用户想要出售自己的产品,但却很难找到买家,最终只能将产品卖给高端商品。因此,这种材料不能得到充分利用。为了解决这种资源的浪费,所以才开发了这个商品交易信息网站,借助互联网的低交易成本。为广大学生提供一个成本低廉、快捷高效的二手物品购买平台。

主要技术设计:spring、 springmvc、 springboot、 mybatis 、 jquery 、 md5 、bootstarp.js tomcat、富文本编译器、拦截器等

主要功能设计:登录、注册、二手商品浏览、分类设置、模糊查找、轮播图、热销商品、购物车、订单、订单流程控制、用户管理、修改密码等

用户分类查看二手物品信息 管理员可以在后台进行设置、用户可以登录个注册账号

用户登录模块主要代码设计:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>OnlineMall-登录</title>
    <link rel="stylesheet" th:href="@{mall/css/common.css}">
    <link rel="stylesheet" th:href="@{mall/styles/login.css}">
    <link rel="stylesheet" th:href="@{mall/styles/header.css}">
    <link rel="stylesheet" th:href="@{/admin/plugins/sweetalert/sweetalert.css}"/>
</head>
<body style="background-image: url("11.jpg")">
<div class="form center">
    <div class="login">
        <div class="login_center">
            <div class="login_top">
                <div class="left fl">用户登录</div>
                <div class="right fr"><a href="register.html" target="_self">立即注册</a></div>
                <div class="clear"></div>
                <div class="under-line center"></div>
            </div>
            <form id="loginForm" onsubmit="return false;" action="##">
                <div class="login_main center">
                    <div class="login-info">手机号:&nbsp;<input class="login-info-input" type="text" name="loginName"
                                                             id="loginName"
                                                             placeholder="请输入你的手机号"/>
                    </div>
                    <div class="login-info">&nbsp;&nbsp;&nbsp;&nbsp;码:&nbsp;<input class="login-info-input"
                                                                                    id="password"
                                                                                    type="password"
                                                                                    name="password"
                                                                                    placeholder="请输入你的密码"/></div>
                    <div class="login-info">
                        验证码:&nbsp;
                        <input class="login-info-input verify-code" type="text" name="verifyCode"
                               placeholder="请输入验证码" id="verifyCode"/>
                        <img alt="单击图片刷新!" style="top: 14px;position: relative;" th:src="@{/common/mall/kaptcha}"
                             onclick="this.src='/common/mall/kaptcha?d='+new Date()*1">
                    </div>
                </div>
                <div class="login_submit">
                    <input class="submit" type="submit" onclick="login()" value="立即登录">
                </div>
            </form>
        </div>
    </div>
</div>
</body>
<!-- jQuery -->
<script th:src="@{/admin/plugins/jquery/jquery.min.js}"></script>
<script th:src="@{/admin/dist/js/public.js}"></script>
<script th:src="@{/admin/plugins/sweetalert/sweetalert.min.js}"></script>
<script type="text/javascript">
    function login() {
        var loginName = $("#loginName").val();
        if (!validPhoneNumber(loginName)) {
            swal('请输入正确的登录名(即手机号)', {
                icon: "error",
            });
            return false;
        }
        var password = $("#password").val();
        if (!validPassword(password)) {
            swal('请输入正确的密码格式(6-20位字符和数字组合)', {
                icon: "error",
            });
            return false;
        }
        var verifyCode = $("#verifyCode").val();
        if (!validLength(verifyCode, 7)) {
            swal('请输入正确的验证码', {
                icon: "error",
            });
            return false;
        }
        //验证
        var params = $("#loginForm").serialize();
        var url = '/login';
        $.ajax({
            type: 'POST',//方法类型
            url: url,
            data: params,
            success: function (result) {
                if (result.resultCode == 200) {
                    window.location.href = '/index';
                } else {
                    swal(result.message, {
                        icon: "error",
                    });
                }
                ;
            },
            error: function () {
                swal("操作失败", {
                    icon: "error",
                });
            }
        });
    }
</script>
</html>

在这里插入图片描述

一些热门和推荐的二手商品信息、可以再后台进行配置这些

在这里插入图片描述

用户登录模块和注册:

通过手机号和密码以及验证码进行登录注册操作

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

我的购物车:

在这里插入图片描述

我的订单流程以及收获地址信息等

在这里插入图片描述

个人信息查看和修改

在这里插入图片描述

后台管理:

后台管理员主要对前端客户端一些用户的管理、商品的管理、轮播图管理、商品分类管理以及订单信息和订单流程管理

在这里插入图片描述

轮播图配置

在这里插入图片描述

商品分类以及排序等操作

在这里插入图片描述

商品管理和上下架等具体操作

在这里插入图片描述

package ltd.newbee.mall.controller.admin;
 
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.controller.vo.NewBeeMallOrderItemVO;
import ltd.newbee.mall.entity.NewBeeMallOrder;
import ltd.newbee.mall.service.NewBeeMallOrderService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Objects;
 
@Controller
@RequestMapping("/admin")
public class NewBeeMallOrderController {
 
    @Resource
    private NewBeeMallOrderService newBeeMallOrderService;
 
    @GetMapping("/orders")
    public String ordersPage(HttpServletRequest request) {
        request.setAttribute("path", "orders");
        return "admin/newbee_mall_order";
    }
 
    /**
     * 列表
     */
    @RequestMapping(value = "/orders/list", method = RequestMethod.GET)
    @ResponseBody
    public Result list(@RequestParam Map<String, Object> params) {
        if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        PageQueryUtil pageUtil = new PageQueryUtil(params);
        return ResultGenerator.genSuccessResult(newBeeMallOrderService.getNewBeeMallOrdersPage(pageUtil));
    }
 
    /**
     * 修改
     */
    @RequestMapping(value = "/orders/update", method = RequestMethod.POST)
    @ResponseBody
    public Result update(@RequestBody NewBeeMallOrder newBeeMallOrder) {
        if (Objects.isNull(newBeeMallOrder.getTotalPrice())
                || Objects.isNull(newBeeMallOrder.getOrderId())
                || newBeeMallOrder.getOrderId() < 1
                || newBeeMallOrder.getTotalPrice() < 1
                || StringUtils.isEmpty(newBeeMallOrder.getUserAddress())) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        String result = newBeeMallOrderService.updateOrderInfo(newBeeMallOrder);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }
 
    /**
     * 详情
     */
    @GetMapping("/order-items/{id}")
    @ResponseBody
    public Result info(@PathVariable("id") Long id) {
        List<NewBeeMallOrderItemVO> orderItems = newBeeMallOrderService.getOrderItems(id);
        if (!CollectionUtils.isEmpty(orderItems)) {
            return ResultGenerator.genSuccessResult(orderItems);
        }
        return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());
    }
 
    /**
     * 配货
     */
    @RequestMapping(value = "/orders/checkDone", method = RequestMethod.POST)
    @ResponseBody
    public Result checkDone(@RequestBody Long[] ids) {
        if (ids.length < 1) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        String result = newBeeMallOrderService.checkDone(ids);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }
 
    /**
     * 出库
     */
    @RequestMapping(value = "/orders/checkOut", method = RequestMethod.POST)
    @ResponseBody
    public Result checkOut(@RequestBody Long[] ids) {
        if (ids.length < 1) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        String result = newBeeMallOrderService.checkOut(ids);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }
 
    /**
     * 关闭订单
     */
    @RequestMapping(value = "/orders/close", method = RequestMethod.POST)
    @ResponseBody
    public Result closeOrder(@RequestBody Long[] ids) {
        if (ids.length < 1) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        String result = newBeeMallOrderService.closeOrder(ids);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }
 
 
}

后台商品信息的维护

在这里插入图片描述

商品订单的处理和流程控制

在这里插入图片描述

修改密码:

在这里插入图片描述

数据库主要表设计:

用户表:

CREATE TABLE `NewTable` (
`user_id`  bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户主键id' ,
`nick_name`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称' ,
`login_name`  varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '登陆名称(默认为手机号)' ,
`password_md5`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'MD5加密后的密码' ,
`introduce_sign`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '个性签名' ,
`address`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '收货地址' ,
`is_deleted`  tinyint(4) NOT NULL DEFAULT 0 COMMENT '注销标识字段(0-正常 1-已注销)' ,
`locked_flag`  tinyint(4) NOT NULL DEFAULT 0 COMMENT '锁定标识字段(0-未锁定 1-已锁定)' ,
`create_time`  datetime NULL DEFAULT NULL COMMENT '注册时间' ,
PRIMARY KEY (`user_id`)
)

商品信息表:

CREATE TABLE `NewTable` (
`goods_id`  bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品表主键id' ,
`goods_name`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '商品名' ,
`goods_intro`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '商品简介' ,
`goods_category_id`  bigint(20) NOT NULL DEFAULT 0 COMMENT '关联分类id' ,
`goods_cover_img`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '/admin/dist/img/no-img.png' COMMENT '商品主图' ,
`goods_carousel`  varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '/admin/dist/img/no-img.png' COMMENT '商品轮播图' ,
`goods_detail_content`  text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品详情' ,
`original_price`  int(11) NOT NULL DEFAULT 1 COMMENT '商品价格' ,
`selling_price`  int(11) NOT NULL DEFAULT 1 COMMENT '商品实际售价' ,
`stock_num`  int(11) NOT NULL DEFAULT 0 COMMENT '商品库存数量' ,
`tag`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '商品标签' ,
`goods_sell_status`  tinyint(4) NOT NULL DEFAULT 0 COMMENT '商品上架状态 0-下架 1-上架' ,
`create_user`  int(11) NOT NULL DEFAULT 0 COMMENT '添加者主键id' ,
`create_time`  datetime NULL DEFAULT NULL COMMENT '商品添加时间' ,
`update_user`  int(11) NOT NULL DEFAULT 0 COMMENT '修改者主键id' ,
`update_time`  datetime NULL DEFAULT NULL COMMENT '商品修改时间' ,
PRIMARY KEY (`goods_id`)
)

订单表设计:

CREATE TABLE `NewTable` (
`order_id`  bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单表主键id' ,
`order_no`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '订单号' ,
`user_id`  bigint(20) NOT NULL DEFAULT 0 COMMENT '用户主键id' ,
`total_price`  int(11) NOT NULL DEFAULT 1 COMMENT '订单总价' ,
`pay_status`  bigint(20) NOT NULL DEFAULT 0 COMMENT '支付状态:0.未支付,1.支付成功,-1:支付失败' ,
`pay_type`  bigint(20) NOT NULL DEFAULT 0 COMMENT '0.无 1.支付宝支付 2.微信支付' ,
`pay_time`  datetime NULL DEFAULT NULL COMMENT '支付时间' ,
`order_status`  bigint(20) NOT NULL DEFAULT 0 COMMENT '订单状态:0.待支付 1.已支付 2.配货完成 3:出库成功 4.交易成功 -1.手动关闭 -2.超时关闭 -3.商家关闭' ,
`extra_info`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '订单body' ,
`user_name`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '收货人姓名' ,
`user_phone`  varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '收货人手机号' ,
`user_address`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '收货人收货地址' ,
`is_deleted`  tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除标识字段(0-未删除 1-已删除)' ,
`create_time`  datetime NULL DEFAULT NULL COMMENT '创建时间' ,
`update_time`  datetime NULL DEFAULT NULL COMMENT '最新修改时间' ,
PRIMARY KEY (`order_id`)
)

获取源码:

大家点赞、收藏、关注、评论啦
🍅查看下方微信号获取联系方式 📝
🚀🚀🚀精彩系列推荐
Java毕设项目精品实战案例《500套》
精彩专栏推荐订阅:在下方专栏

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

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

相关文章

linux系统中QT里面多线程的使用方法

大家好&#xff0c;今天主要和大脚聊一聊&#xff0c;如何使用QT中的多线程的方法。 第一&#xff1a;多线程基本简介 QThread 线程类是实现多线程的核心类。Qt 有两种多线程的方法&#xff0c;其中一种是继承 QThread 的 run()函数&#xff0c;另外一种是把一个继承于 QObject…

Excel教程

目录 1.设置Excel界面以及保存Excel 1.1 自定义快速访问工具栏 1.2 自定义功能区的使用 1.2.1 自定义选项卡 1.3 自定义页面 1.4 保存时设置文件密码 2.常用的高效操作 2.1 快速填充 2.1.1 快速填充实现拆分重组 2.2 快速分析数据 2.2.1 格式化​编辑 2.2.2 图表&#xff0c…

yolov5 引入RepVGG模型结构

&#xff08;一&#xff09;前情 这个工作已经有大佬用在自己的工程里了&#xff0c;他的帖子链接&#xff1a;https://blog.csdn.net/weixin_45829462/article/details/120372921 但他的这个lite主要不是研究repvgg的&#xff0c;是做移动端的&#xff0c;但是里面加了这个re…

【BP靶场portswigger-服务端8】文件上传漏洞-7个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

Linux应用编程---13.网络编程

Linux应用编程—13.网络编程 ​ 网络编程要熟悉一些计算机网络有关的名词&#xff0c;可以先做了解&#xff0c;后续实际开发在深入研究&#xff0c;自上而下学习。与本次Linux应用编程有关的就是TCP与UDP协议。简明概念如下图1所示。 图1 计算机网络体系结构 ​ 前面学习的进…

数控机床各种加工模式以及英文简写

AUTO&#xff08;自动模式&#xff09; 机床自动运行加工程序&#xff0c;对零件进行加工。前提是所编的程序经过试验后是可行的&#xff0c;而且是加工出来的件经过检验后是合格的&#xff0c;才可以使用该程序。 EDIT&#xff08;编辑模式&#xff09; 在此模式下&#xff…

Spring Boot集成第三方登录之微博登录

准备工作 微博开放平台&#xff1a;https://open.weibo.com/ 网站接入 登陆微博开放平台&#xff0c;进入微连接&#xff0c;选择网站接入 点击立即接入 开发者信息认证 填写开发者信息与身份认证信息 创建应用 开发者信息认证通过后即可创建应用。 应用创建成功后会得到app …

哪种台灯质量好又实惠?性价比最高的护眼台灯

l 只要台灯质量过关就是及格的第一步&#xff0c;首先就是有3C质量认证&#xff0c;符合国A或国AA照度标准。l 显色也会是很重要的&#xff0c;光源品质高的产品&#xff0c;显色性不会低于Ra90的&#xff0c;太阳光的显色指数&#xff1d;100&#xff0c;那么意味着显色指数越…

一文详解Paramiko安装与使用

项目要求 定期向特定服务器传输软件运行状况文件&#xff08;基于SFTP&#xff09;&#xff0c;因此计划写一个Python脚本&#xff0c;该脚本首先要定期读取产品运营数据&#xff0c;然后按要求生成数据文件&#xff0c;最后通过 Paramiko 上传到SFTP服务器。 这篇文章是我在实…

【Spring源码】19. 没合适的构造器?找determineCandidateConstructors()!

上篇介绍了instantiateBean()&#xff08;其实这个方法在后面还会再次被调用&#xff09;如果在前两篇的内容结束后都还未获取到构造函数&#xff0c;那么则继续向下执行&#xff0c;调用determineConstructorsFromBeanPostProcessors()方法determineConstructorsFromBeanPostP…

如何确定梯度消失/爆炸和解决梯度消失/爆炸

1、梯度消失的原因和表现1.1、梯度消失的原因&#xff1a;在深层网络中&#xff0c;如果激活函数的导数小于1&#xff0c;根据链式求导法则&#xff0c;靠近输入层的参数的梯度因为乘了很多的小于1的数而越来越小&#xff0c;最终就会趋近于0&#xff0c;例如sigmoid函数&#…

【C++常用算法】STL基础语法学习 | 算数生成算法集合算法

目录 ●accumulate ●fill ●set_intersection ●set_union ●set_difference ●accumulate 1.功能描述&#xff1a; 计算容器内元素累计总和 2.查看accumulate定义下底层代码的函数原型&#xff1a; 3.向vector容器中插入0~100&#xff0c;使用accumulate算法去计算其和…

RabbitMQ的五大常用模型介绍以及SpringAMQP的使用

目录MQ的介绍使用MQ的好处技术对比RabbitMQ的使用Docker启动MQ角色介绍五大常用消息模型使用SpringAMQP模板简单队列模型工作队列模型广播模型 Fanout路由模式 Direct主题模式 TopicMQ的介绍 MQ&#xff0c;MessageQuene即 消息队列&#xff0c;是程序与程序之间的异步通信一种…

spring的IOC与DI小案例

注&#xff1a;本博客用于自学&#xff0c;如有错误&#xff0c;敬请指正。 一、首先要了解的概念 IOC是一种思想&#xff1a;将创建、初始化对象的控制权交给IOC容器 IOC容器&#xff1a;用来装对象的容器 Bean&#xff1a;IOC容器中装的对象 DI&#xff1a;将IOC容器种Bean…

打破光缆资源管理难题

如何打破光缆资源管理难题&#xff0c;将光缆资源价值最大化&#xff0c;相信是每个运维人都关心的焦点问题。 一、背景 全业务发展到今天&#xff0c;我们逐渐意识到&#xff0c;市场竞争的核心已聚焦到传输资源。从拼资源总量到拼资源管理&#xff0c;传统的运维管理模式面临…

【每日一题】【LeetCode】【第九天】存在重复元素

解决之路 题目描述 测试案例&#xff08;部分&#xff09; 第一次 关键就是看是否有重复元素&#xff0c;暴力解法就是双循环&#xff0c;然后有相同元素就返回True&#xff0c;否则就等循环结束&#xff0c;返回False。 但是自己想到了另一个只需要一个循环的解法。用一个…

C++11 简化 “策略模式” 的一种思路

策略模式是一种定义一系列算法的模式&#xff0c;从概念上看&#xff0c;所有这些算法完成的都是相同接口的工作&#xff08;只是实现不同&#xff09;&#xff0c;它可以以相同的方式调用所有的算法&#xff0c;减少了各种算法类与使用算法的类之间的耦合。实践中只要在分析过…

开发者工具中performance面板解析

目录总览设置面板网络性能总览图火焰图&#xff1a;耗费的时间相关信息总览 如图&#xff0c;主要分为以下4个方面 设置面板 1&#xff0c; 不刷新页面进行录制 2&#xff0c;刷新页面进行录制 3&#xff0c;删除性能展示页面 4&#xff0c;上传本地的性能页面 5&#xff0c…

若依mybatis升级mybatis-plus,其他也适用

若依mybatis升级mybatis-plus,其他也适用 本文档记录若依mybatis升级plus,其他也类似 文章目录若依mybatis升级mybatis-plus,其他也适用第一步 修改ruoyi-common的pom.xml第二步 修改ruoyi-admin的application.yml第三步 修改ruoyi-framework的MyBatisConfig.java开始测试1. 修…

一、计算机系统概论

文章目录一、计算机系统简介1.计算机软硬件概念2.计算机系统的层次结构&#xff08;1&#xff09;现代计算机&#xff08;2&#xff09;发展&#xff08;3&#xff09;软硬件分布3.计算机组成和计算机体系结构二、计算机的基本组成1.冯诺依曼计算器2.计算机硬件框图3.计算机工作…