基于Spring Boot的幼儿园管理系统

源码获取:https://mbd.pub/o/bread/YZWXlZtsbQ==

引言

在数字化转型的浪潮中,教育行业的信息化建设显得尤为重要。幼儿园作为基础教育的重要环节,其管理系统的现代化水平直接关系到教育质量和运营效率。本文将深入剖析一个基于Spring Boot的幼儿园管理系统BSKMS,从技术架构、功能实现到部署运维,为开发者提供一份完整的企业级项目实战指南。

项目概述

蓝天幼儿园管理系统(BSKMS)是一个采用前后端分离架构的综合管理平台,专为幼儿园日常运营管理而设计。系统涵盖了学生管理、教师管理、课程安排、饮食管理、物资管理等核心功能模块,为幼儿园提供全方位的数字化解决方案。

系统特色

  • 多角色权限管理:支持家长、教师、管理员等多角色协同工作
  • 移动端适配:提供家长移动端访问支持
  • 实时数据统计:完善的报表和数据可视化功能
  • 安全可靠:基于Shiro的细粒度权限控制

技术架构深度解析

后端技术栈

1. Spring Boot 2.1.3.RELEASE

Spring Boot作为项目的核心框架,提供了快速开发能力和丰富的starter依赖。通过自动配置机制,大大简化了Spring应用的初始搭建和开发过程。

@SpringBootApplication
public class BskmsApplication {public static void main(String[] args) {SpringApplication.run(BskmsApplication.class, args);}
}
2. Apache Shiro 1.3.2安全框架

Shiro作为项目的安全框架,提供了身份认证、授权、密码加密和会话管理等功能。

Shiro配置类关键代码:

@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);// 自定义拦截器Map<String, Filter> filtersMap = new LinkedHashMap<>();filtersMap.put("roleOrFilter", new CustomRolesAuthorizationFilter());shiroFilterFactoryBean.setFilters(filtersMap);// 权限配置Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();filterChainDefinitionMap.put("/sa/**", "roles[超级管理员]");filterChainDefinitionMap.put("/jz/**", "roleOrFilter[家长|教师|超级管理员]");filterChainDefinitionMap.put("/ls/**", "roleOrFilter[教师|超级管理员]");return shiroFilterFactoryBean;
}
3. MyBatis + PageHelper分页插件

MyBatis作为ORM框架,配合PageHelper实现高效的数据分页查询。

分页查询示例:

@Override
public Object getAllMaterialByLimit(Material materialParameter) {int size = 0;Integer begin = (materialParameter.getPage() - 1) * materialParameter.getLimit();materialParameter.setPage(begin);List<Material> rows = new ArrayList<>();try {rows = materialMapper.getAllMaterialByLimit(materialParameter);size = materialMapper.countAllMaterialByLimit(materialParameter);} catch (Exception e) {logger.error("根据查询班级 异常", e);}MMGridPageVoBean<Material> vo = new MMGridPageVoBean<>();vo.setTotal(size);vo.setRows(rows);return vo;
}
4. 数据库连接池配置

采用Alibaba Druid作为数据源,提供监控和统计功能。

@Configuration
public class DruidConfiguration {@Beanpublic ServletRegistrationBean druidServlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");// 添加初始化参数servletRegistrationBean.addInitParameter("loginUsername", "admin");servletRegistrationBean.addInitParameter("loginPassword", "admin");return servletRegistrationBean;}
}

前端技术栈

1. LayUI 2.4.5

LayUI作为前端UI框架,提供了丰富的组件和模块化开发支持。

2. 辅助技术
  • jQuery:简化DOM操作和Ajax请求
  • Layer:弹层组件,提供友好的用户交互
  • zTree:树形组件,支持权限树等复杂结构展示

核心功能模块实现

1. 系统管理模块

用户管理

用户管理功能实现了基于RBAC(基于角色的访问控制)模型的权限管理系统。

用户实体类:

public class User extends BaseBean {private Integer id;private String userId;private String password;private String name;private String phone;private Date birthday;private Integer status;// getter和setter方法
}
权限控制实现

通过自定义Realm实现Shiro的认证和授权逻辑:

public class CustomRealm extends AuthorizingRealm {@Autowiredprivate UserService userService;@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 授权逻辑实现String username = (String) principals.getPrimaryPrincipal();SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();// 查询用户角色和权限Set<String> roles = userService.findRoles(username);Set<String> permissions = userService.findPermissions(username);authorizationInfo.setRoles(roles);authorizationInfo.setStringPermissions(permissions);return authorizationInfo;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 认证逻辑实现String username = (String) token.getPrincipal();User user = userService.findByUsername(username);if (user == null) {throw new UnknownAccountException(); //账号不存在}if (user.getStatus() == 0) {throw new LockedAccountException(); //账号被锁定}SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUserId(),user.getPassword(),getName());return authenticationInfo;}
}

2. 班级管理模块

班级管理实现了班级信息的CRUD操作,包括班主任分配、班级位置管理等功能。

班级实体类:

public class Classes extends BaseBean {private Integer id;private String name;private Integer teacherId;private String describe;private Integer count;private String position;private Date createTime;// getter和setter方法
}

3. 学生管理模块

学生管理模块详细记录了学生的基本信息、兴趣爱好、饮食禁忌等。

学生实体类:

public class Children extends BaseBean {private Integer id;private String name;private Integer sex;private Date birthday;private Integer classId;private String hobby;private String foodTaboo;private Date enterTime;// getter和setter方法
}

4. 物资管理模块

物资管理是系统的核心功能之一,实现了物资信息的完整生命周期管理。

物资实体设计
public class Material extends BaseBean {private Integer id;private String name;private Integer count;private BigDecimal price;private String from;private String describe;private Date createTime;// getter和setter方法
}
控制器实现

物资管理的控制器提供了完整的RESTful接口:

@Controller
@RequestMapping(value = "/sa")
public class SaController {@Autowiredprivate MaterialService materialService;// 物资管理页面@RequestMapping(value = "/materialMG")public String materialMG() {return "sa/material";}// 分页查询物资@RequestMapping("/getAllMaterialByLimit")@ResponseBodypublic Object getAllMaterialByLimit(Material materialParameter) {return materialService.getAllMaterialByLimit(materialParameter);}// 添加物资页面@RequestMapping(value = "/addMaterialPage")public String addMaterialPage(Integer id, Model model) {if (null != id) {Material material = materialService.selectByPrimaryKey(id);model.addAttribute("manageMaterial", material);}return "sa/materialAdd";}// 添加物资@ResponseBody@RequestMapping("/addMaterial")public String addMaterial(Material material) {try {material.setCreateTime(new Date());materialService.addMaterial(material);return "SUCCESS";} catch (Exception e) {return "ERR";}}// 更新物资@ResponseBody@RequestMapping("/updateMaterial")public String updateMaterial(Material material) {return materialService.updateMaterial(material);}// 批量删除物资@RequestMapping(value = "delMaterial")@ResponseBody@Transactionalpublic String delMaterial(String[] ids) {try {for (String id : ids) {materialService.delMaterialById(Integer.parseInt(id));}return "SUCCESS";} catch (Exception e) {logger.error("根据班级id删除异常", e);TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return "ERROR";}}
}
服务层实现

服务层处理业务逻辑和事务管理:

@Service
public class MaterialServiceImpl implements MaterialService {@Autowiredprivate MaterialMapper materialMapper;@Overridepublic Object getAllMaterialByLimit(Material materialParameter) {int size = 0;Integer begin = (materialParameter.getPage() - 1) * materialParameter.getLimit();materialParameter.setPage(begin);List<Material> rows = new ArrayList<>();try {rows = materialMapper.getAllMaterialByLimit(materialParameter);size = materialMapper.countAllMaterialByLimit(materialParameter);} catch (Exception e) {logger.error("根据查询班级 异常", e);}MMGridPageVoBean<Material> vo = new MMGridPageVoBean<>();vo.setTotal(size);vo.setRows(rows);return vo;}@Overridepublic Material selectByPrimaryKey(Integer id) {return materialMapper.selectByPrimaryKey(id);}@Overridepublic void addMaterial(Material material) {try {materialMapper.insert(material);} catch (Exception e) {e.printStackTrace();}}@Overridepublic String updateMaterial(Material material) {try {materialMapper.updateByPrimaryKeySelective(material);return "SUCCESS";} catch (Exception e) {logger.error("根据用户id更新用户异常", e);TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return "ERR";}}@Overridepublic void delMaterialById(Integer id) {try {materialMapper.deleteByPrimaryKey(id);} catch (Exception e) {logger.error("删除用户出现异常", e);TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();}}
}

5. 饮食管理模块

饮食管理模块负责幼儿园每日食谱的配置和营养分析。

饮食实体类:

public class Foot extends BaseBean {private Integer id;private String breakfast;private String lunch;private String dinner;private String burden;private String nutrition;private String remark;private Date createTime;// getter和setter方法
}

6. 通知公告模块

通知公告模块实现了学校通知的发布和管理功能。

通知实体类:

public class Notice extends BaseBean {private Integer id;private String title;private String content;private Date createTime;// getter和setter方法
}

数据库设计与优化

数据库表结构设计

系统采用MySQL 5.7+数据库,设计了9个核心数据表:

1. 用户表 (user)
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` varchar(50) NOT NULL COMMENT '用户ID',`password` varchar(100) NOT NULL COMMENT '密码',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`phone` varchar(20) DEFAULT NULL COMMENT '电话',`birthday` date DEFAULT NULL COMMENT '生日',`status` int(1) DEFAULT '1' COMMENT '状态',`create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`),UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 物资表 (material)
CREATE TABLE `material` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) NOT NULL COMMENT '物资名称',`count` int(11) DEFAULT '0' COMMENT '数量',`price` decimal(10,2) DEFAULT '0.00' COMMENT '单价',`from` varchar(200) DEFAULT NULL COMMENT '来源',`describe` text COMMENT '描述',`create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

数据库优化策略

  1. 索引优化:为常用查询字段添加合适的索引
  2. 分表分库:大数据量时采用分表策略
  3. 查询优化:使用PageHelper进行分页查询
  4. 连接池优化:配置Druid连接池参数

安全设计与实现

1. 密码加密

采用MD5加密算法对用户密码进行加密存储:

public class MD5 {public static String encrypt(String source) {if (source == null) {source = "";}try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] bytes = md.digest(source.getBytes("UTF-8"));return byte2hex(bytes);} catch (Exception e) {throw new RuntimeException(e);}}private static String byte2hex(byte[] bytes) {StringBuilder sign = new StringBuilder();for (byte aByte : bytes) {String hex = Integer.toHexString(aByte & 0xFF);if (hex.length() == 1) {sign.append("0");}sign.append(hex.toUpperCase());}return sign.toString();}
}

2. SQL注入防护

通过MyBatis的参数绑定机制防止SQL注入:

<select id="getAllMaterialByLimit" parameterType="com.bskms.bean.Material" resultType="com.bskms.bean.Material">SELECT * FROM materialWHERE 1=1<if test="name != null and name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if>ORDER BY create_time DESCLIMIT #{page}, #{limit}
</select>

3. XSS攻击防护

在前端使用LayUI的表单验证,后端对用户输入进行过滤:

public String filterXSS(String value) {if (value == null) {return null;}value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("'", "&#39;").replaceAll("\"", "&quot;");return value;
}

性能优化策略

1. 缓存策略

使用Shiro的内存缓存管理会话信息:

@Bean
public SecurityManager securityManager(CustomRealm customRealm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(customRealm);securityManager.setSessionManager(sessionManager());securityManager.setCacheManager(new MemoryConstrainedCacheManager());return securityManager;
}

2. 数据库连接池优化

配置Druid连接池参数:

# 初始化连接数
spring.datasource.initialSize=5
# 最小空闲连接数
spring.datasource.minIdle=5
# 最大活跃连接数
spring.datasource.maxActive=20
# 获取连接等待超时时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 连接在池中最小生存的时间
spring.datasource.minEvictableIdleTimeMillis=300000

3. 前端性能优化

  • 使用CDN加速静态资源加载
  • 压缩CSS和JavaScript文件
  • 图片懒加载和缓存策略

部署与运维

1. 环境要求

  • JDK 1.8或更高版本
  • MySQL 5.7或更高版本
  • Maven 3.5或更高版本

2. 数据库部署

# 创建数据库
mysql -uroot -p -e "CREATE DATABASE bskms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"# 执行初始化脚本
mysql -uroot -p bskms < bskms-2019-06-22.sql

3. 项目部署

方式一:使用Maven打包部署
# 清理并打包
mvn clean package# 运行项目
java -jar target/bskms.jar
方式二:使用Spring Boot Maven插件
mvn spring-boot:run

4. 多环境配置

系统支持多环境配置,通过不同的配置文件实现:

  • 开发环境:application-dev.properties
  • 生产环境:application-prod.properties
  • 测试环境:application-test.properties

系统界面展示

登录界面

系统采用简洁的登录界面设计,支持多角色登录:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系统首页

Dashboard设计,展示关键数据统计和快捷操作:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

班级管理

完整的班级信息维护界面:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学生管理

学生信息管理,支持导入导出功能:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

物资管理

物资信息的增删改查和统计功能:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

开发经验总结

1. 架构设计经验

  • 采用分层架构,明确各层职责
  • 前后端分离,提高开发效率
  • 模块化设计,便于维护和扩展

2. 技术选型考量

  • Spring Boot提供快速开发能力
  • Shiro满足复杂权限控制需求
  • MyBatis提供灵活的SQL控制
  • LayUI降低前端开发难度

3. 性能优化建议

  • 数据库查询优化是关键
  • 合理使用缓存提升性能
  • 前端资源压缩和CDN加速

4. 安全防护措施

  • 密码加密存储
  • SQL注入防护
  • XSS攻击过滤
  • 权限细粒度控制

结语

BSKMS幼儿园管理系统作为一个完整的企业级应用,不仅在功能上满足了幼儿园日常管理的需求,在技术实现上也体现了现代Java开发的最佳实践。通过本文的详细解析,希望能为开发者提供有价值的参考,特别是在Spring Boot项目开发、权限管理系统设计、数据库优化等方面。

项目的成功离不开良好的架构设计、严谨的编码规范和持续的优化改进。希望这个项目能够为教育行业的信息化建设贡献一份力量,也为Java开发者提供一个优秀的学习案例。

源码获取:https://mbd.pub/o/bread/YZWXlZtsbQ==
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NVIDIA-B200】 ‘CUDA driver version is insufficient for CUDA runtime version‘

目录 一、错误核心原因 二、排查步骤 1. 检查当前驱动版本 2. 检查 CUDA 运行时版本 3. 验证驱动与 CUDA 的兼容性 三、解决方法 1. 确保驱动正确加载 2. 重新安装匹配的驱动与 CUDA 3. 验证环境正确性 四、关键注意事项 报错日志: bash nccl.sh ------------5.安…

Android中如何实现自动化测试

目录 前言: 一、方法介绍 1、UI Automator 3、shell脚本 二、shell脚本实现自动化测试原理和步骤 1、 原理 2、步骤 三、shell自动化测试实例 前言: 在开发项目的过程中&#xff0c;我们将某个阶段的需求完成并且提测&#xff0c;通常&#xff0c;在测试工程师更细致的测…

绿联科技全球化突围:业财一体化如何打通全球电商全链路数字化

绿联科技专注数码配件20年&#xff0c;产品覆盖全球100多个国家&#xff0c;年销售额突破30亿。作为"连接"领域的专家&#xff0c;绿联深知连接的真谛不仅在于硬件产品&#xff0c;更在于数据的全球化连接。在全球电商竞争日益激烈的今天&#xff0c;绿联率先探索业财…

uv教程 虚拟环境

什么是uv 可以创建虚拟环境 安装依赖 安装uv 参见官方文档 安装 | uv-zh-cn 自定义安装目录,winr 输入powershell&#xff0c;输入如下命令 $env:UV_INSTALL_DIR "C:\Custom\Path";powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/inst…

绕过codex在vscode中登录403的问题

codex安装&#xff1a; npm i -g openai/codex codex升级&#xff1a; npm install -g openai/codexlatest 绕过codex在vscode中登录403的问题&#xff1a; https://linux.do/t/topic/924206/4 1.在windows端powelshell登陆好codex&#xff1b; $env:HTTP_PROXY"http://…

软件研发如何选对方法论?传统计划驱动与敏捷价值驱动的全面对比

软件项目研发中的方法论是一个核心话题,它决定了团队如何规划、执行和交付软件。下面我将对这些方法论进行一个全面的概述,从传统的到现代的,并说明它们的核心思想、适用场景和趋势。 一、 方法论的核心分类 软件研发方法论主要分为两大阵营:传统计划驱动(Plan-Driven)…

【服务器】将本地项目部署到服务器

当我们已经有了一个服务器后 如何将本地项目部署到服务器呢第一步&#xff0c;找到云服务器实例&#xff0c;查看公网IP地址第二步&#xff0c;推荐使用 Windows 自带的 PowerShell ssh root你的公网IP # 例如&#xff1a; ssh root47.98.123.45如果超时&#xff0c;首先检查服…

Flink中的 BinaryRowData 以及大小端

背景 本文基于 Flink 1.17.0 写此文章的目的是为了说明 Flink 堆内和堆外内存以及 内部 BinaryRowData 行处理的优化。 分析 堆内和堆外内存 跟Spark的内存管理不一样&#xff0c;Flink 中的堆内和堆外一直都是存在的。 堆内内存&#xff08;JVM Heap&#xff09;存储用户对象和…

HTTP/3.0:网络通信的技术革新与性能飞跃

&#x1f310; HTTP/3.0&#xff1a;网络通信的技术革新与性能飞跃 Refer&#xff1a;PPP PRIVATE NETWORK™ 2 企业级虚拟以太网接入综合解决方案介绍 &#x1f680; 引言&#xff1a;悄然来临的网络革命 你是否曾期待视频加载卡顿成为过去&#xff1f;YouTube 已经迈出了重…

【golang学习笔记 gin 】1.1 路由封装和mysql 的使用封装

安装gin go get -u github.com/gin-gonic/gin go get -u github.com/go-sql-driver/mysql创建相关目录 gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 创建用户模型 package model imp…

SQL 层面行转列

背景&#xff1a;如果对一些评论、点赞、收藏等互动数据&#xff0c;使用了按照 type 分类存储&#xff0c;num 也是对应的。这样如果创建一个帖子&#xff0c;那么就会出现 3 行数据&#xff08;type 不同&#xff0c;num 不同&#xff0c;对应评论点赞和收藏&#xff09;&…

langchain4j笔记篇(阳哥)

一 概述1.1 概述langchain4j&#xff1a;langchain for java1.2 作用langchain4j的目标是简化将LLM集成到java应用程序中的过程。二 案例简单helloworld2.1 大模型调用三件套1.阿里百炼平台的通义模型&#xff1a; https://bailian.console.aliyun.com/2获取api-key&#x…

有鹿机器人的365天奇幻日记:我在景区当扫地僧

第一章 古建守护者&#xff1a;2cm的极致艺术琉璃瓦下的秘密记得那是个晨雾缭绕的清晨&#xff0c;我接到首个重要任务&#xff1a;清扫明代琉璃碑亭。这里的每块地砖都是文物&#xff0c;传统清洁工具根本不敢靠近。每天以2cm的精准贴边沿碑座作业&#xff0c;如今我每周都要为…

Objective-C方法参数标签怎么设置

在Objective-C中&#xff0c;方法名称可以通过几个标签名称组成&#xff0c;这是跟C/C中完全不一样的地方。每个标签都是字段冒号的写法&#xff0c;冒号后面是方法的参数&#xff0c;参数包括参数类型和参数变量&#xff0c;其中参数类型要用括号括起。方法参数的标签是通过在…

20250910_《SQL Server 数据库事务日志定期清理方案(精简优化版)》以10.1.1.31服务器的gtp-default数据库为例

《SQL Server 数据库事务日志定期清理方案(精简优化版)》 一、前提条件 数据库 gtp-default 已设置为完整恢复模式 (FULL)。 每天凌晨02:00执行完整备份,保证日志备份可用。 SQL Server Agent 已启用。 作业所有者为 sa,具有 sysadmin 权限。 Agent 服务账号 NT Service\S…

实习项目包装--HTTP 协议和 Web API

好的&#xff0c;完全没问题&#xff01;你问到了一个非常核心且基础的知识领域&#xff0c;这是现代Web开发和几乎所有网络应用的基石。我们暂别嵌入式系统&#xff0c;专门来上一堂关于 HTTP 协议和 Web API 的详细课程。 我会从最根本的概念讲起&#xff0c;逐步深入到你所…

ICCV-2025 | 中科院自动化所世界模型助力具身导航!NavMorph:连续环境中的视觉语言导航自演化世界模型

作者&#xff1a;Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3单位&#xff1a;1^{1}1中科院自动化所多模态人工智能系统国家重点实验室&#xff0c;2^{2}2中国科学院大学人工智能学院&#xff0c;3^{3}3鹏城实验室论文标题&#xff1a;NavM…

【ARDUINO】ESP8266的AT指令返回内容集合

一、基础测试指令(确认模块通信) 1. AT(测试模块是否响应) 功能:检测ESP8266与控制器(如Arduino)的串口通信是否正常。 返回内容: 成功:OK(无额外数据,仅确认通信正常) 失败:无返回(可能是波特率不匹配、接线错误) 示例:发送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:开源免费的本地Mock服务工具,提升前后端联调效率

你有没有过这种经历&#xff1f;做前端开发时&#xff0c;后端同事的接口还没写完&#xff0c;你这边要调页面数据&#xff0c;只能对着空控制台发呆&#xff1f;要么手动写个 JSON 文件当假数据&#xff0c;改一次数据就得重新保存文件、刷新页面&#xff1b;要么用在线 Mock …

【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用

一、Mysql的安装与卸载&#xff1a; 1、查看是否安装过mysql&#xff1a; &#xff08;1&#xff09;cmd中输入mysql看是否有显式提醒 &#xff08;2&#xff09;右击此电脑&#xff0c;选择管理&#xff0c;在左侧栏中找到服务&#xff0c;查看是否有与mysql相关的 2、卸载的…