MyBatis的占位符(day36)

1 学习目标

  1. 重点掌握#{}占位符的使用

2 MyBatis的占位符介绍

  • #{}占位符: 相当于JDBC中的问号(?)占位符,是为SQL语句中的值进行占位,如果参数值是字符串或者日期类型,会进行转义处理

  • 我们使用#{}写的SQL语句:

<update id="deleteJobs">DELETE FROM jobs WHERE job_id = #{jobId}
</update>
  • 实际MyBatis执行的SQL
DELETE FROM jobs 
WHERE job_id = ?
  • #{}占位符用来设置参数,参数的类型能够有3种:基本类型,自定义类型,Map
  • 如果只传递单个参数,只需要使用#{参数名}即可将参数取出,其中参数名可以起任意值
  • 如果传递多个参数,那么#{}的名字需要互不相同,所以一般情况我们都使用传入的字段名

3 XML方式使用#{}

3.1 入门案例

  • 查询指定jobId的信息

以下SQL查询代码仅供参考,可根据你本地的数据库字段进行调整,并未采用我的,如有不懂的问题可以在评论区留言,我会一一解答。 

①**jobsMapper.xml**

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.mapper.JobsMapper"><select id="getJobsAll" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs</select><update id="insertJobs">INSERT INTO jobs VALUE ('6666', 'TEST', 10000, 30000)</update><update id="updateJobs">UPDATE jobs SET job_title='TEST666' WHERE job_id = '6666'</update><update id="deleteJobs">DELETE FROM jobs WHERE job_id = '6666'</update><select id="getJobsById" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_id = #{jobId}</select>
</mapper>

②**JobsMapper接口**

package cn.tedu.mapper;import cn.tedu.pojo.Jobs;import java.util.List;public interface JobsMapper {public Jobs getJobsById(String jobId);public List<Jobs> getJobsAll();public int insertJobs();public int updateJobs();public int deleteJobs();
}

③**TestPlaceHolder**

/*** 用于测试基于MyBatis的占位符的案例*/
@SpringBootTest
public class TestPlaceHolder {@Autowiredprivate JobsMapper jobsMapper;@Testpublic void testGetJobsById() {Jobs jobs = jobsMapper.getJobsById("AC_MGR");System.out.println(jobs);}
}

3.2 基本类型

3.2.1 单个参数

  • 如果只传入单个参数时,#{}占位符的参数名可以起任意名
  • 查询指定jobTitle的信息

①**JobsMapper.xml**

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.mapper.JobsMapper"><select id="getJobsAll" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs</select><update id="insertJobs">INSERT INTO jobs VALUE ('6666', 'TEST', 10000, 30000)</update><update id="updateJobs">UPDATE jobs SET job_title='TEST666' WHERE job_id = '6666'</update><update id="deleteJobs">DELETE FROM jobs WHERE job_id = '6666'</update><select id="getJobsById" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_id = #{jobId}</select><select id="getJobsByTitle" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_title = #{hello}</select>
</mapper>

②**JobsMapper接口**

package cn.tedu.mapper;import cn.tedu.pojo.Jobs;import java.util.List;public interface JobsMapper {public Jobs getJobsByTitle(String jobTitle);public Jobs getJobsById(String jobId);public List<Jobs> getJobsAll();public int insertJobs();public int updateJobs();public int deleteJobs();
}

③**TestPlaceHolder**

@SpringBootTest
public class TestPlaceHolder {@Autowiredprivate JobsMapper jobsMapper;@Testpublic void testGetJobsById() {Jobs jobs = jobsMapper.getJobsById("AC_MGR");System.out.println(jobs);}@Testpublic void testGetJobsByTitle() {Jobs jobs = jobsMapper.getJobsByTitle("Public Accountant");System.out.println(jobs);}
}

3.2.2 多个参数

  • MyBatis如果传入多个参数,会对参数做特殊处理,会自动将多个参数封装成一个map,#{}会根据参数名作为key,去map中取对应的值,而MyBatis在封装时,会自动以对应的属性名来匹配对应的值

  • 查询指定的薪资范围内的记录

①**JobsMapper.xml**

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.mapper.JobsMapper"><select id="getJobsAll" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs</select><update id="insertJobs">INSERT INTO jobs VALUE ('6666', 'TEST', 10000, 30000)</update><update id="updateJobs">UPDATE jobs SET job_title='TEST666' WHERE job_id = '6666'</update><update id="deleteJobs">DELETE FROM jobs WHERE job_id = '6666'</update><select id="getJobsById" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_id = #{jobId}</select><select id="getJobsByTitle" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_title = #{hello}</select><select id="getJobsBySalary" resultType="cn.tedu.pojo.Jobs"><![CDATA[SELECT * FROM jobs WHERE min_salary > #{minSalary} AND max_salary < #{maxSalary}]]></select>
</mapper>

②**JobsMapper接口**

package cn.tedu.mapper;import cn.tedu.pojo.Jobs;import java.util.List;public interface JobsMapper {public List<Jobs> getJobsBySalary(Double minSalary, Double maxSalary);public Jobs getJobsByTitle(String jobTitle);public Jobs getJobsById(String jobId);public List<Jobs> getJobsAll();public int insertJobs();public int updateJobs();public int deleteJobs();
}

③**TestPlaceHolder**

@SpringBootTest
public class TestPlaceHolder {@Autowiredprivate JobsMapper jobsMapper;@Testpublic void testGetJobsById() {Jobs jobs = jobsMapper.getJobsById("AC_MGR");System.out.println(jobs);}@Testpublic void testGetJobsByTitle() {Jobs jobs = jobsMapper.getJobsByTitle("Public Accountant");System.out.println(jobs);}@Testpublic void testGetJobsBySalary() {List<Jobs> jobs = jobsMapper.getJobsBySalary(3000.0, 10000.0);for (Jobs job : jobs) {System.out.println(job);}}
}

3.3 自定义类型

  • 如果在传入多个参数时,正好这些参数都是属于业务中数据模型,比如Jobs这个实体类的内容,那么可以直接把POJO作为参数即可,那此时使用#{}只需要用属性名即可取出参数

  • 向jobs表中插入一条记录

①**JobsMapper.xml**

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.mapper.JobsMapper"><select id="getJobsAll" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs</select><update id="insertJobs">INSERT INTO jobs VALUE ('6666', 'TEST', 10000, 30000)</update><update id="updateJobs">UPDATE jobs SET job_title='TEST666' WHERE job_id = '6666'</update><update id="deleteJobs">DELETE FROM jobs WHERE job_id = '6666'</update><select id="getJobsById" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_id = #{jobId}</select><select id="getJobsByTitle" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_title = #{hello}</select><select id="getJobsBySalary" resultType="cn.tedu.pojo.Jobs"><![CDATA[SELECT * FROM jobs WHERE min_salary > #{minSalary} AND max_salary < #{maxSalary}]]></select><update id="addJobs">INSERT INTO jobs values (#{jobId}, #{jobTitle}, #{minSalary}, #{maxSalary})</update>
</mapper>

②**JobsMapper接口**

package cn.tedu.mapper;import cn.tedu.pojo.Jobs;import java.util.List;public interface JobsMapper {public int addJobs(Jobs jobs);public List<Jobs> getJobsBySalary(Double minSalary, Double maxSalary);public Jobs getJobsByTitle(String jobTitle);public Jobs getJobsById(String jobId);public List<Jobs> getJobsAll();public int insertJobs();public int updateJobs();public int deleteJobs();
}

③**TestPlaceHolder**

/*** 用于测试基于MyBatis的占位符的案例*/
@SpringBootTest
public class TestPlaceHolder {@Autowiredprivate JobsMapper jobsMapper;@Testpublic void testGetJobsById() {Jobs jobs = jobsMapper.getJobsById("AC_MGR");System.out.println(jobs);}@Testpublic void testGetJobsByTitle() {Jobs jobs = jobsMapper.getJobsByTitle("Public Accountant");System.out.println(jobs);}@Testpublic void testGetJobsBySalary() {List<Jobs> jobs = jobsMapper.getJobsBySalary(3000.0, 10000.0);for (Jobs job : jobs) {System.out.println(job);}}@Testpublic void testAddJobs() {Jobs job = new Jobs();job.setJobId("8888");job.setJobTitle("IT");job.setMinSalary(1000.0);job.setMaxSalary(10000.0);int rows = jobsMapper.addJobs(job);System.out.println(rows > 0 ? "新增成功!!" : "新增失败!!");}
}

3.4 Map类型

  • 如果在传入多个参数时,这些参数不属于业务模型中的数据,没有对应的实体类,那么此时为了方便,也可以将这些参数封装到一个Map中

  • 但是这种方式只适合用于这个Map不经常使用,临时需要传入多个数据的情况

  • 修改jobs表中的一条记录

①**JobsMapper.xml**

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.mapper.JobsMapper"><select id="getJobsAll" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs</select><update id="insertJobs">INSERT INTO jobs VALUE ('6666', 'TEST', 10000, 30000)</update><update id="updateJobs">UPDATE jobs SET job_title='TEST666' WHERE job_id = '6666'</update><update id="deleteJobs">DELETE FROM jobs WHERE job_id = '6666'</update><select id="getJobsById" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_id = #{jobId}</select><select id="getJobsByTitle" resultType="cn.tedu.pojo.Jobs">SELECT job_id, job_title, min_salary, max_salary FROM jobs WHERE job_title = #{hello}</select><select id="getJobsBySalary" resultType="cn.tedu.pojo.Jobs"><![CDATA[SELECT * FROM jobs WHERE min_salary > #{minSalary} AND max_salary < #{maxSalary}]]></select><update id="addJobs">INSERT INTO jobs values (#{jobId}, #{jobTitle}, #{minSalary}, #{maxSalary})</update><update id="updateJobsById">UPDATE jobs SET min_salary = #{minSalary}, max_salary = #{maxSalary} WHERE job_id = #{jobId}</update>
</mapper>

②**JobsMapper接口**

package cn.tedu.mapper;import cn.tedu.pojo.Jobs;import java.util.List;
import java.util.Map;public interface JobsMapper {public int updateJobsById(Map<String,Object> map);public int addJobs(Jobs jobs);public List<Jobs> getJobsBySalary(Double minSalary, Double maxSalary);public Jobs getJobsByTitle(String jobTitle);public Jobs getJobsById(String jobId);public List<Jobs> getJobsAll();public int insertJobs();public int updateJobs();public int deleteJobs();
}

③**TestPlaceHolder**

package cn.tedu;import cn.tedu.mapper.JobsMapper;
import cn.tedu.pojo.Jobs;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.HashMap;
import java.util.List;/*** 用于测试基于MyBatis的占位符的案例*/
@SpringBootTest
public class TestPlaceHolder {@Autowiredprivate JobsMapper jobsMapper;@Testpublic void testGetJobsById() {Jobs jobs = jobsMapper.getJobsById("AC_MGR");System.out.println(jobs);}@Testpublic void testGetJobsByTitle() {Jobs jobs = jobsMapper.getJobsByTitle("Public Accountant");System.out.println(jobs);}@Testpublic void testGetJobsBySalary() {List<Jobs> jobs = jobsMapper.getJobsBySalary(3000.0, 10000.0);for (Jobs job : jobs) {System.out.println(job);}}@Testpublic void testAddJobs() {Jobs job = new Jobs();job.setJobId("8888");job.setJobTitle("IT");job.setMinSalary(1000.0);job.setMaxSalary(10000.0);int rows = jobsMapper.addJobs(job);System.out.println(rows > 0 ? "新增成功!!" : "新增失败!!");}@Testpublic void testUpdateJobsById() {HashMap<String, Object> map = new HashMap<>();map.put("jobId", "8888");map.put("minSalary", 3333);map.put("maxSalary", 9999);int rows = jobsMapper.updateJobsById(map);System.out.println(rows > 0 ? "修改成功!!" : "修改失败!!");}
}

4 注解方式使用#{}

4.1 入门案例: 查询指定jobId的信息

①**JobsMapper接口**

package cn.tedu.mapper;import cn.tedu.pojo.Jobs;
import org.apache.ibatis.annotations.Select;import java.util.List;
import java.util.Map;public interface JobsMapper {@Select("SELECT * FROM jobs WHERE job_id = #{jobId}")public Jobs getJobsById02(String jobId);public int updateJobsById(Map<String,Object> map);public int addJobs(Jobs jobs);public List<Jobs> getJobsBySalary(Double minSalary, Double maxSalary);public Jobs getJobsByTitle(String jobTitle);public Jobs getJobsById(String jobId);public List<Jobs> getJobsAll();public int insertJobs();public int updateJobs();public int deleteJobs();
}

②**TestPlaceHolder**

/*** 用于测试基于MyBatis的占位符的案例*/
@SpringBootTest
public class TestPlaceHolder {@Autowiredprivate JobsMapper jobsMapper;@Testpublic void testGetJobsById() {Jobs jobs = jobsMapper.getJobsById("AC_MGR");System.out.println(jobs);}@Testpublic void testGetJobsByTitle() {Jobs jobs = jobsMapper.getJobsByTitle("Public Accountant");System.out.println(jobs);}@Testpublic void testGetJobsBySalary() {List<Jobs> jobs = jobsMapper.getJobsBySalary(3000.0, 10000.0);for (Jobs job : jobs) {System.out.println(job);}}@Testpublic void testAddJobs() {Jobs job = new Jobs();job.setJobId("8888");job.setJobTitle("IT");job.setMinSalary(1000.0);job.setMaxSalary(10000.0);int rows = jobsMapper.addJobs(job);System.out.println(rows > 0 ? "新增成功!!" : "新增失败!!");}@Testpublic void testUpdateJobsById() {HashMap<String, Object> map = new HashMap<>();map.put("jobId", "8888");map.put("minSalary", 3333);map.put("maxSalary", 9999);int rows = jobsMapper.updateJobsById(map);System.out.println(rows > 0 ? "修改成功!!" : "修改失败!!");}@Testpublic void testGetJobsById02() {Jobs jobs = jobsMapper.getJobsById02("AC_MGR");System.out.println(jobs);}
}

5 日志配置

5.1 什么是日志

  • 日志的作用是用来追踪和记录我们的程序运行中的信息,我们可以利用日志很快定位问题,追踪分析。
  • 如果没有日志,程序一旦出现问题,很难一下子就能定位问题。尤其是访问第三方接口、随机或偶尔出现的问题、很难再现的问题。

5.2 日志级别

SpringBoot的日志框架提供了如下几种日志级别(从高到低):

  • ERROR:错误级别,指出发生错误事件,需要立即处理;

  • WARN:警告级别,表明可能发生错误的情况,需要注意和防止;

  • INFO:信息级别,描述应用程序的正常运行信息,但不会打印太多的信息;(SpringBoot默认级别)

  • DEBUG:调试级别,用于调试应用程序,打印详细的调试信息;

  • TRACE:跟踪级别,记录应用程序中每个步骤的详细信息。

5.3 设置日志级别

  • 为了方便查看打印的SQL日志,所以可以为我们项目添加日志配置,只需要在application.yml中添加如下内容:

    注意: cn.tedu为我们项目的根包

#日志设置
logging:level:cn:tedu: debug

上一篇文章:MyBatis的详细大全,结合项目(Day35)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/142969437下一篇文章: 

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

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

相关文章

蓝牙资讯|苹果AirPods Pro 2耳机推送开发者Beta固件

科技媒体 MacRumors 报道&#xff0c;苹果公司邀请开发者&#xff0c;针对 Lightning 和 USB-C 接口的 AirPods Pro 2 耳机&#xff0c;推送了新的 7B5013d 固件版本&#xff0c;较之前的 7B5013c 有所提升。 苹果未来会向所有 AirPods Pro 2 用户推送本次固件更新&#xff0…

react18中实现简易增删改查useReducer搭配useContext的高级用法

useReducer和useContext前面有单独介绍过&#xff0c;上手不难&#xff0c;现在我们把这两个api结合起来使用&#xff0c;该怎么用&#xff1f;还是结合之前的简易增删改查的demo&#xff0c;熟悉vue的应该可以看出&#xff0c;useReducer类似于vuex&#xff0c;useContext类似…

springboot项目通过maven的profile功能实现通过不同文件夹的方式来组织不同环境配置文件

写在前面 本文看下springboot项目如何通过文件夹的方式来组织不同环境配置文件。 1&#xff1a;正文 一般的我们写springboot项目时配置文件是这个样子的&#xff1a; appliction.yaml --> 通过spring.profiles.activexxx来激活某个指定后缀的配置文件 application-evn1…

小程序项目实践(一)--项目的初始化以及前期的准备工作

目录 1.起步 1.1 uni-app 简介 1.2 开发工具 1.2.1 下载 HBuilderX 1.2.2 安装 HBuilderX 1.2.3 安装 scss/sass 编译 1.2.4 快捷键方案切换 1.2.5 修改编辑器的基本设置 1.3 新建 uni-app 项目 1.4 目录结构 1.5 把项目运行到微信开发者工具 1.6 使用 Git 管理项目 …

SpringBoot3响应式编程全套-R2DBC

目录 传送门前言一、R2DBC概念二、Spring Data R2DBC1、整合1.1、导入依赖1.2、编写配置 2、声明式接口&#xff1a;R2dbcRepository2.1、Repository接口2.2、自定义Converter2.3、配置生效 3、编程式组件 三、RBAC-SQL练习1、1-12、1-N 四、最佳实践五、附录 传送门 SpringMV…

python配合yolov11开发分类训练软件

上一篇文件写了用yolo分类模型开发分类软件&#xff0c;这边文章在上个分类软件的基础上加入训练功能环境配置:pycharm&#xff0c;PySide6 6.6.1 &#xff0c;PySide6-Addons 6.6.1&#xff0c;PySide6-Essentials 6.6.1&#xff0c;torch 2.3.1cu121&#xff0c;torchaudio 2…

Spring AI Java程序员的AI之Spring AI(三)RAG实战

Spring AI之RAG实战与原理分析 前言RAGDocumentDocumentReaderDocumentTransformerDocumentWriter VectorStoreSimpleVectorStoreRedisVectorStore元数据搜索组装提示词 前言 检索增强生成&#xff08;RAG&#xff09;是一种结合信息检索和生成模型的技术&#xff0c;用于将相…

C语言——数组

1.数组的概念 数组是一组相同类型元素的集合&#xff1b; 数组中可以存放1个或多个元素&#xff0c;但数组元素个数不能为0。 同时数组可以分为一维数组和多维数组&#xff0c;多维数组一般常见 是二维数组。 2.一维数组的创建和初始化 一维数组的创建的基本语法&#xff1a; …

大数据-168 Elasticsearch 单机云服务器部署运行 详细流程

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【C++】类和对象(类的默认成员函数)

目录 一.构造函数 二.析构函数 三.拷贝构造函数 四.赋值运算符重载 五.取地址运算符重载 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数。 一.构造…

目标检测中的损失函数

损失函数是用来衡量模型与数据的匹配程度的&#xff0c;也是模型权重更新的基础。计算损失产生模型权重的梯度&#xff0c;随后通过反向传播算法&#xff0c;模型权重得以更新进而更好地适应数据。一般情况下&#xff0c;目标损失函数包含两部分损失&#xff0c;一个是目标框分…

Vue3万能初始化

项目创建后第一步 项目创建&#xff1a;Vue3创建-CSDN博客 创建后执行下面 删除默认提供的HelloWorld.vue组件和src/APP.vue中的默认样式和内容。 App.vue&#xff0c;代码&#xff1a; <template></template><script setup></script><style&g…

数控机械制造工厂ERP适用范围有哪些

在当今制造业高速发展的背景下&#xff0c;企业资源计划(ERP)系统已成为提升工厂管理效率、实现生产自动化与信息化的关键工具。特别是对于数控机械制造工厂而言&#xff0c;一个合适的ERP系统能够帮助其优化生产流程、提高产品质量、降低生产成本并增强市场竞争力。 1. 生产计…

IP数据包格式、ICMP封装步骤

IP数据包格式 版本号&#xff1a;占4位&#xff0c;表示IP协议的版本&#xff0c;目前广泛使用的是IPv4&#xff0c;其版本号为4。 首部长度&#xff1a;占4位&#xff0c;表示IP首部的长度&#xff0c;单位为32位字节。首部长度最小为20字节&#xff0c;最大为60字节。 服务…

dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换

一、 为什么要用日期格式化 因为在开发项目过程中&#xff0c;会遇到各种各样的日期格式&#xff0c;有的显示完整的年-月-日 时:分:秒&#xff0c;而有的场景就只显示月-日等格式&#xff0c;还有就是显示当前时间和注册时间的间隔时长等&#xff0c;场景非常多&#xff0c;如…

idea2024年版本

最简单安装2024.2版本idea 内带安装教程 ** 下载链接&#xff1a;https://pan.quark.cn/s/ab24afbaa43f 提取码&#xff1a;KHrq

jmeter发送post请求

在jmeter中&#xff0c;有两种常用的请求方式&#xff0c;get和post.它们两者的区别在于get请求的参数一般是放在路径中&#xff0c;可以使用用户自定义变量和函数助手等方式进行参数化&#xff0c;而post请求的参数不能随url发送&#xff0c;而是作为请求体提交给服务器。而在…

FreeRTOS——中断管理

中断理论剖析 中断简介 中断是一种机制&#xff0c;用于处理高优先级的事件或故障。当一个中断事件发生时&#xff0c;单片机可以立即中断正在执行的程序&#xff0c;转而处理中断事件。这种机制可以提高系统的响应速度和实时性。 中断优先级分组设置 ARM Cortex-M使用了8位宽…

Wed前端入门——HTML、CSS

Wed前端入门——HTML、CSS 一般的页面有HTML、CSS以及JavaScript组成 HTML定义了页面的结构和内容&#xff0c;包括文本、图像、链接等等CSS用于定义页面的布局和样式JS用于添加交互性和动态功能作用 一、HTML 基本格式&#xff1a; <!-- 文档类型为HTML --> <!D…

【C++笔试强训】如何成为算法糕手Day9

学习编程就得循环渐进&#xff0c;扎实基础&#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 添加逗号 思路&#xff1a; 代码实现&#xff1a; 跳台阶 思路&#xff1a; 代码实现&#xff1a; 扑克牌顺子 思路&#xf…