【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! !
本篇会加入个人的所谓鱼式疯言
❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!
引言
Spring MVC 犹如一座桥梁,连接着前端的精彩与后端的强大,它赋予开发者以灵动之笔,在数字化的画布上描绘出绚丽多彩的 Web 世界。在 Spring MVC 的引领下,我们能够驾驭复杂的业务逻辑,实现流畅的用户体验,让技术与创意完美融合,开启无限可能的 Web 开发之旅。
目录
-
Spring MVC
-
Controller 的参数传递
-
Cookie 与 Session 传递
一. Spring MVC
1. Spring MVC 初识
如上图
首先当用户发送一个
HTTP 请求
, 是直接给 Controller 控制器 发送请求
然后当 Controller 控制器 接收到之后, 就会把请求进一步传给
Model
, 让Model
来处理 数据并返回结果给 Controller 。
最后
Controller
接收到Model 响应
的数据之后, **不会直接返回给用户, 而是传给 View **, 让View响应对应的文字和图片等数据的页面展示给用户 。
如上图, 上面的这样模型就称之为 Spring MVC 模型
:
Model
: 负责具体的 数据管理和业务逻辑的处理的一端
Controller
: 负责接收来自 用户的数据 , 并传递给Model 端
进行处理 , 并 传递给View 端
View
: 负责把最终的结果数据 , 通过页面展示的方式 响应给用户。
鱼式疯言
补充讲解
找工作栗子:
上述的流程就好比我们应届生找工作的过程:
好比现在小编有一个内推名额, 有了内推名额的话
小编这边就可以直接进行面试,也就是直接可以找 Controller 端
进行面试,经过几波重重考验, 小编通过了面试。
这时
Controller
就会告诉他的领导Model
来同意是否任用小编, 同意之后 , 领导Model 就会通知给 Controller .
Controller
然后又告诉HR
, 也就是这里的View
, 让View
直接给小编发Offer
2. Spring MVC 的优点
Spring MVC
的优点:
低耦合性 : 使每个模块都 相互独立
, 方便扩展更多的业务逻辑
高效性 : 每个模块都 独立工作
, 调用起来更方便,并且还能相互 配合处理大量的数据
集成性 : 与 Spring 框架集成
,开发效率高, 容易上手, 可以动态的配置文件 , 充分利用 Spring 的各种资源和特性 。
二. Controller 的参数传递
Controller
的参数传递, 主要是 演示代码 , 通过代码的方式来小伙伴初步的了解 Spring 框架 的使用, 下面我们开始吧~
1. 无参数
@RestController
@RequestMapping("/begin")
public class helloController {@RequestMapping("/hello")public String hello() {return "I Love You";}
}
在讲解参数之前, 先带着小伙伴们回顾上一篇的内容:
@RestController
: Controller 入口的标志
@RequestMapping
: 路径的声明, 第一个为 父路径 :/begin
, 第二个为 子路径 :/hello
所以最终的URL 为:
http://127.0.0.1:8080/begin/hello
还不理解的小伙伴可以参考小编的前面一篇文章哦~
Spring 入门操作详解
鱼式疯言
补充说明:
@RequestMapping
: 可以接收post 请求
, 也可以接收get 请求
@RequestMapping
可以设置
get请求
:
@RequestMapping(value = "/hello" ,method = RequestMethod.GET)public String hello() {return "I Love You";}
post 请求
:
@RequestMapping(value = "/hello" ,method = RequestMethod.POST)public String hello() {return "I Love You";}
- 或者可以换其他注解`:
@PostMapping
: 只能接收post请求
@GetMapping
: 只能接收get请求
2. 单参数传递
<1>. 普通演示
@RestController
@RequestMapping("/begin")
public class helloController {/*** 传递时需要同名* @param name 名字* @return 该正文*/// 传递一个请求参数@RequestMapping("/param1")public String param1(String name) {return "name: " + name;}}
这里传递
单个参数
, 是在URL
的查询字符串进行拼接, 小编这里使用postman
进行发送get 请求
, 当Controller
接收到postman
发送的这条 URL 请求 时 , 就会 效应对应的数据 。
需要注意的是, 这里的 URL
的参数名 一定要 方法中的参数名 保持一致 。
鱼式疯言
补充说明 :
其实这里使用
postman
来 发送请求和使用浏览器发送请求的效果是一样的, 没有本质区别。
如果还不熟练使用 postman
的小伙伴,也可以这样发送请求哦~
<2>. 重命名演示
上面的单参数传递是不是要必须保证参数名是统一的, 如果不统一会怎么样呢?
如上图,如果参数不统一我们就无法传入对应参数。
那么我们就 无法换参数传递 吗?
答案: 不是
我们还可以这样使用
@RestController
@RequestMapping("/begin")
public class helloController {// 传递一个请求参数@RequestMapping("/param1")public String param1(@RequestParam("name1") String name) {return "name: " + name;}
如上图:
我们可以使用
@RequestParam("name1")
绑定参数
这里只需要
@RequestParam
中的参数和URL
中的查询字符串中的参数相同 即可
而 方法中的参数我们只需要自己命名自己想要的都可以 。
但是有一点,
@RequestParam("name1")
是 必传参数 ,也就是说name1
如果没传就会出现客户端的错误
。
鱼式疯言
补充说明:
@RequestMapping("/param1")public String param1(@RequestParam(value = "name1", required = false) String name) {return "name: " + name;}
如上面的代码, 如果我们不需要是必传参数, 就可以把 required = false
即可
3. 多参数传递
如果我们不止传一个参数呢? 假如我们需要传
name
,age
,gender
这三个参数
@RestController
@RequestMapping("/begin")
public class helloController {// 传递多个请求参数@RequestMapping("/param2")public String param2(String name , int age , String gender) {return "name: " + name + "age: " + age + "gender: " + gender;}
这里 不需要考虑参数的顺序 , 只要对应着像 单参数一样同名称传递 就可以有效的传达到
Controller 端
。
4. 对象传递
小伙伴们有没有思考过, 如果 参数很多 , 那么我们 岂不是要一个一个传
,那样岂不是很麻烦。
所以我们就不妨就把这些参数都定义为类的一个一个属性 , 通过对象的方式 进行传递。
<1>. head 传递
@RestController
@RequestMapping("/begin")
public class helloController {/*** @RequestBody 表示用来修饰对象传递一个 JSON 格式的对象的注解* 传递一个 JSON 对象* @param student 对象* @return 返回该对象*/@RequestMapping("/param3·· ··")public Student param3 (Student student) {return student;}
}class Student {private String name;private int age;private String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}
如上图, 对于 Head
的传递, 传参时就在 URL 的查询字符串
中进行插入即可。
<2>. Body 传递
@RestController
@RequestMapping("/begin")
public class helloController {/**** @RequestBody 表示用来修饰对象传递一个 JSON 格式的对象的注解* 传递一个 JSON 对象* @param student 对象* @return 返回该对象*/@RequestMapping("/param7")public Student param7 (@RequestBody Student student) {return student;}}
class Student {private String name;private int age;private String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}
如上图
- 我们把
name
,age
,gender
都定义为 对象的属性 , 于是就可以 通过对象来传递 。
- 注意使用这个
@RequestBody
标明是通过body(报文)
来 传递对象 的。
- 对于 对象而言 ,
HTTP
的报文格式是:JSON
格式的。
鱼式疯言
JSON
就是一种有 特定数据的格式 :
相当于 中文有中文的格式 , 英文有英文的格式 ,对象就有JSON 的格式。
故: JSON 格式
是针对 对象 而言的。
- 键值对 的格式:
{
Key1
:Value1
,
Key2
:Value2
,
Key3
:Value3
}
{
}
表示 一个对象 ,[
]
表示 多个对象的集合
- 添加了
@RequestBody
的需要在Body
, 未加就要使用Head
传递。
5. 数组传递
@RestController
@RequestMapping("/begin")
public class helloController {/*** 对数组进行传参*/@RequestMapping("/param6")public List<String> param6(String[] names) {return List.of(names);}}
如上图
如果 参数都是相同类型 的话,我们可以 像上方一样用
数组
传递
数组传递的方式:在查询字符串中使用
数组名赋值
, 中间用 逗号分隔。
6. 集合传递
/*** 传集合 list* 需要用 RequestParam 来绑定将数组转化 list* @param list* @return*/@RestController
@RequestMapping("/begin")
public class helloController {@RequestMapping("/param4")
// 传集合
public List<String> param4(@RequestParam List<Student> list) {return list;
}
}
这里 传参的方式和数组 一样,小编在这里就不赘述了~
三. Cookie 与 Session 传递
1. Cookie 和 Session 的初识
小伙伴可能有所不知的是,对于 HTTP 协议
来说: 是 无状态的协议
无状态协议: 不会记录中间传入的数据, 通信本身不维护和通信本身相关的任何状态信息 , 只是做 传输的作用 。
当有重要的数据传入时, 我们就需要使用一种属性来存储。
那么对于 客户端 来说,
存储数据
的方式:Cookie
存储, 由 服务器来提供 。
对于 服务器 来说,
存储数据
的方式:Session
存储, 服务器自身来生成。
由服务器存储一份, 客户端存储一份, 从而保证
数据的有效性
, 也能 提供校验 。
关于更多 Cookie
和 Session
内容, 小伙伴可以移步小编的下面这篇文章哦~
Cookie 详解文章链接
在 Controller
中, 我们也提供了如何操作 Cookie
和 Session
的多种方式, 下面就让小编来演示一下吧~
2. Cookie
<1>. 获取 Cookie 方式一
@RequestMapping("/entrance")
@RestController
public class header {// 获取多个Cookie/*** 通过 HttpServerletRequest 来获取整个 Http 的请求的 所有信息* 获取到信息后再获取 Cookie* @param quest 请求的信息* @return 返回 Cookie*/@RequestMapping("/getCookie")public String getCookie(HttpServletRequest quest) {Cookie[] cookies = quest.getCookies();for (Cookie cookie: cookies) {System.out.println(cookie.getName() + ":" + cookie.getValue());}return "获取Cookie 成功!";}}
如上图:
首先在
postman
中设置Cookie
, 先在 上方指定IP 和 端口号 , 然后对应Cookie_数字
来设置对应的Cookie 的信息
。
其次,在 Controller 端的代码下, 我们使用
HttpServletRequest
类型来接收所以来自用户发送的请求。
接着,利用这些请求 通过
getCookie()
提取出所以的Cookie
数据, 用一个 Cookie类型的数组 来存储。
最终打印
Cookie 信息
, 并提示用户, 获取 Cookie 成功 。
<2>. 获取 Cookie 方式二
通过 注解获取 :
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;import java.util.Arrays;@RequestMapping("/entrance")
@RestController
public class header {/*** 使用 @CookieValue 绑定 Cookie 的key的注解* @param name1 作为 key* @return 返回 Cookie 的信息*/@RequestMapping("/getCookie1")public String getCookie1(@CookieValue("Cookie_1") Cookie name1) {System.out.println(name1.getName() + " : " + name1.getValue());return name1.getName() + " : " + name1.getValue();}
}
如上图:
-
首先, 在
postman
中设置Cookie
-
其次,
@CookieValue 注解
中标记, 并且在参数中 指定是需要哪个Cookie
这时,就可以获取到对应
Cookie
的 全部信息 : 包括 Cookie 的名字 和 Cookie 的值
- 进行打印 Cookie 的name 和
Cookie 的Value
。
这里唯一需要和小伙伴说明的是:
在 设置的Cookie 中, 必须含有
@CookieValue
标明的那个Cookie
, 否则就会 报错 , 因为这是 必传参数。
3. Session
<1>. 设置Session 方式
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {/*** 要先获取到 session 就需要先设置 session**/@RequestMapping("/setSession")public String setSession(HttpServletRequest servletRequest) {HttpSession session = servletRequest.getSession();// 设置键值对session.setAttribute("hello", 78);session.setAttribute("cake", "bbt");session.setAttribute("jat", "good");return "session 设置完毕!";}
}
如上图 , 在
Controller
中设置一些Session
, 这些Session
就存储在 服务端 这边了, 当需要调用时, 就可以随时调用了 。
首先,通过
HttpServletRequest
这个类型来获取请求的所有信息
其次, 通过
getSession()
方法来获取 Session 对象。
然后, 操作
Session 对象
通过setAttribute
来插入 Session 的 Name 和 Value
<2>. 获取 Session 方式一
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {
// 获取 session 数据方法一: 使用 HttpServletRequest@RequestMapping("getSession1")public String getSession1(HttpServletRequest servletRequest) {HttpSession session = servletRequest.getSession();return session.getAttribute("hello")==null ? "未设置session 值" : String.valueOf(session.getAttribute("hello"));}
}
-
首先还是先 设置
Session
-
其次对应的通过
HttpServletRequest
来获取 Session对象 -
最终 操作
Session 对象
, 通过getAttribute
, 并加入对应的Session 的属性名
来获取对应的 Session 的 Value 值。
<3>. 获取 Session 方式二
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {
// 获取session 数据方法二 : 使用 HttpSession@RequestMapping("getSession2")public String getSession2(HttpSession session) {return session.getAttribute("hello")==null ? "未设置session 值" : String.valueOf(session.getAttribute("cake"));}}
如上图:
首先: 设置 Session 属性
其次: 通过 HttpSession
来直接获取Session 对象
最后: 通过 getAttribute()
并加入对应 Session
的 属性名 来获取 Value
。
鱼式疯言
注意事项:
需要提醒小伙伴一点的是, 获取的 Session 的Value 值是一个Object 的类型 , 所以如果要获取成
String 类型
的话,就需要 强转 。
<4>. 获取 Session 方法三
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {
// 获取session 数据方法三 : 利用 SessionAttribute 绑定 Session 注解@RequestMapping("getSession3")public String getSession3(@SessionAttribute("jat") String jat) {return jat;}}
如上图:
首先: 设置Session 的属性
最后: 通过
@SessionAttribute("jat")
注解来返回,()
内并加上对应的Session name 来获取。 需要注意的是 () 内必须是含有这个Session 名的,否则:
鱼式疯言
上面的 获取Session 和 Cookie 的方式多样 , 小伙伴根据 自己的需求 来获取哦~
总结
-
Spring MVC: 了解了MVC的三种模型: Model, Controller 以及 View 的分工不同: Model 主要处理数据, Controller 主要接管外来请求, View 主要呈现给用户视图信息 , 为了更高效的实现网络的连接 。
-
Controller 的参数传递 : 使用 Controller 来传递对应的参数: 无参数的请求方式, 单参数,多参数, 对象传递, 数组传递, 集合传递等… 小伙伴要注意对应的注解的使用方式哦~
-
Cookie
与Session
传递:理解Cookie
和Session
是对于 Http 无状态协议的一种客户端,服务器的记录数据的方式 ,并且可以通过 Controller的接口 使用 多种方式来设置和访问对应的 Cookie 和Session 。
如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正
希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖
相关文章:
【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! !
本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…...
Redisson看门狗机制
redis分布式锁我们需要手动为锁设置超时过期时间,但是这个时间不好判断,如果太短,持有锁的客户端还在执行业务,锁就超时释放了;如果太长了,持有锁的客户端释放锁失败,则其他客户端一直没法获取锁…...
LeetCode279. 完全平方数(2024冬季每日一题 27)
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 …...
HTML礼物圣诞树
系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心(双心版)1…...
【JVM】JVM基础教程(二)
上一篇:【JVM】JVM基础教程(一)-CSDN博客 类加载器 什么是类加载器(ClassLoader) 是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 从这个定义可以得出结论:Java是允许开发者写点代码…...
Appium 安装问题汇总
好生气好生气,装了几天了, opencv4nodejs 和 mjpeg-consumer 就是装不了,气死我了不管了,等后面会装的时候再来完善,气死了气死了。 目录 前言 1、apkanalyzer.bat 2、opencv4nodejs 3、ffmpeg 4、mjpeg-consume…...
在网安中什么是白帽子
在网络安全领域,白帽子是指那些专门从事网络安全研究,帮助企业或个人发现并修复安全漏洞的专家。以下是对白帽子的详细解释: 一、定义与角色 白帽子是网络安全领域的术语,通常指那些具备专业技能和知识的网络安全专家。他们的工作…...
C++解析URL的方式
一、URL格式为http://192.168.80.166:6666/designResLib/test/test std::vector<CString> ThkCabRMaterialStaDlg::splitAddress(const CString& address) {std::vector<CString> result;CString remaining address;result.push_back(remaining.Left(remaini…...
【软件安全】软件安全设计规范,软件系统安全设计制度(Word原件)
1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件全面文档清单涵盖以下核心内容&a…...
基于ZooKeeper搭建Hadoop高可用集群
ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点,集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件: Active NameNode 和 Standby NameNode: 两台 NameNode…...
华硕主板不能开启
正常流程: [主機板]BIOS如何設置主機板整合圖形(內顯)和獨立顯示卡同時顯示輸出 | 官方支援 | ASUS 台灣 如果开启了CSR兼容性模式,在BIOS里面,就必须关掉,才能支持多显示器,如下图显示的标识才会出现。...
[C++]构造函数和析构函数
一、构造函数 1.构造函数的基本概念 1.对构造函数的理解: 构造函数是类的一种特殊成员函数,其主要功能是在创建对象时进行初始化操作。它的名字与类名相同,并且没有返回值类型(不能是void)。例如,对于一个…...
查询品牌涉及两张表(brand、brand_admin_mapping)
文章目录 1、BrandController2、AdminCommonService3、BrandApiService3、BrandCommonService4、BrandSqlService涉及的表SQL 查询逻辑参数处理执行查询完整 SQL 逻辑参数映射总结 SELECT * FROM brand_admin_mapping WHERE admin_id 252SELECT * FROM brand WHERE id 44SELE…...
CVPR和其他2024顶会论文阅读(资源整理【1】)
CVPR 2024论文阅读(资源整理【1】) 一、3d 重建与建模论文1-Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction论文2- 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering论文3-GaussianDreamer: Fast Generation from Text to …...
数据库表约束完全指南:提升数据完整性和准确性
数据库表约束完全指南:提升数据完整性和准确性 在数据库设计中,表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法,包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约…...
保姆级教程用vite创建vue3项目并初始化添加PrimeVue UI踩坑实录
文章目录 一、什么是PrimeVue二、详细教程1.添加PrimeVue2.配置main.js3.添加自动引入4.配置vite.config.js5.创建测试页面 一、什么是PrimeVue PrimeVue 是一个用于 Vue.js 3.x 开发的一款高质量、广受欢迎的 Web UI 组件库。 官网地址:https://primevue.org/ 二、…...
数据库索引
以下是关于数据库索引的详细介绍,包括其概念、优点和缺点,并附带丰富的例子: 一、什么是数据库索引 数据库索引是一种数据结构,类似于书籍的目录,它能够帮助数据库管理系统(DBMS)迅速定位和访问…...
硬件选型规则
光源选型: 先用型号中带H的,没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型: 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…...
linux 架构详解
Linux 是一种开源的操作系统内核,最初由 Linus Torvalds 于 1991 年创建。它是一个基于 Unix 的操作系统内核,用于构建完整的操作系统。Linux 架构是指 Linux 操作系统的内部结构和组成组件的工作方式。 整体架构 Linux系统通常被看作是一个层次化的结…...
Mybatis 学习 之 XML 手册
目录 单次执行单次新增单次更新单次删除 批量执行批量新增批量更新for 循环执行更新for 循环生成多条 sql,一次执行 批量删除 参数传递预处理方式 (OGNL表达式 #{})数据类型转换 直接替换 (EL表达式 ${}) 安全 单次执行 单次新增 <insert id"insert"…...
平面直角坐标系
图1 平面直角坐标系 横轴为x,竖轴为y,x、y的交点为O。 表示一个点经常表示为( x, y ),如图上的红点( 2, 3 )。 图2 点( 2, 3 )...
K8S对接ceph的RBD块存储
1 PG数量限制问题 1.1 原因分析 1.还是老样子,先创建存储池,在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…...
使用 OpenCV 进行 Android 开发
在本节中,我们将创建一个简单的应用程序,它除了加载 OpenCV 之外什么都不做。在下一节中,我们将扩展它以支持相机。 除了这个说明,你还可以使用一些视频指南,例如这个 打开 Android Studio 并选择Empty Views Activi…...
ubuntu下 grep 如何过滤包括G或者T字符串
在 grep 中,你可以通过使用正则表达式来匹配包含 G 或者 T 的字符串。例如: 1. 过滤包括 G 或 T 的字符串: grep -E G|T filename -E 表示启用扩展正则表达式(也可以用 egrep)。G|T 表示匹配 G 或 T。 2. 不区分大…...
【C语言】整数每一位数字出现次数
提相信你是最棒哒!!! 文章目录 题目描述 题目代码 法一解析版C 法二解析版C 总结 题目描述 给出两个整数 M 和 N,求在序列[M, M 1, M 2,…, N - 1, N]中每一个数码出现了多少次。 输入格式 输入两个整数 M 和 N 。 输出格式…...
opencv Mat To Heif
高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12&#x…...
[GStreamer] gstbasesink 的 chain 函数
chain函数的定位: chain函数是上一个element到当前element的入口,chain函数处理完毕后,上一个函数的push_buffer 就得以返回。因此通常情况下 parent element 的核心逻辑都在 chain 函数里,再通过再 chain 函数里调用虚函数让 ch…...
评估大语言模型(LLM)在分子预测任务能够理解分子几何形状性能
摘要 论文地址:https://arxiv.org/pdf/2403.05075 近年来,机器学习模型在各个领域越来越受欢迎。学术界和工业界都投入了大量精力来提高机器学习的效率,以期实现人工通用智能(AGI)。其中,大规模语言模型&a…...
2024-12-04OpenCV视频处理基础
OpenCV视频处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中,cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频,或者从视频文件中读取帧。以下是如何使用…...
Springboot 2.7+解决跨域问题,到底是在SpringBoot中添加拦截器还是修改Nginx配置
文章目录 1摘要2 核心代码2.1 SpringBoot 全局跨域拦截器2.2 Nginx 配置跨域处理2.3 Nginx 和 SpringBoot 同时添加允许跨域处理会怎么样? 3 推荐参考资料 1摘要 跨域问题报错信息: Referrer Policy:strict-origin-when-cross-origin跨域问题是在前后端分离的情况…...
在Mac上安装多个Java版本
1、获取 Homebrew 的历史版本库 执行下面命令来获取 Homebrew 的历史版本库 brew tap homebrew/cask-versions2、安装java //java8 brew install java8 --cask//java11 brew install java11 --cask//java17 brew install --cask homebrew/cask-versions/microsoft-openjdk17…...
[小白系列]Ubuntu安装教程-安装prometheus和Grafana
Docker安装prometheus 拉取镜像 docker pull prom/prometheus 配置文件prometheus.yml 在/data/prometheus/建立prometheus.yml配置文件。(/data/prometheus/可根据自己需要调整) global:scrape_interval: 15s # By default, scrape targets ev…...
HTTP中GET和POST详细理解
HTTP中GET和POST 简单来说 GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器…...
Vant UI Axure移动端元件库:提升移动端原型设计效率
UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI,作为一款基于Vue.js的轻量、可靠的移动端组件库,自2017年开源以来,凭借其丰富的组件库、良好的性能以及广泛的兼容性,在移动端开发领域崭露头角,赢得了众多开…...
y3编辑器文档3:物体编辑器
文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…...
【ESP32】ESP-IDF开发 | DAC数模转换器+余弦波输出例程
1. 简介 ESP32上的数字模拟转换器 (DAC) 带有 2 个 8 位通道,因此可输出2路模拟信号。在低功耗模式下也可由 ULP 协处理器通过控制寄存器来实现完全控制。内部自带余弦波形生成器,可用于生成余弦波形/正弦波形,用户可调整频率、振幅、相位和直…...
java中的递归
大家好,今天我们来学习一下java中的递归,相信大家应该也对递归有一点了解吧,如果没有也没有关系,我们现在就来了解一下。 五、递归 自身中包含了自己,遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问…...
残差网络连接,使得输入与输出的尺寸一样
def forward(self, x):out self.layer1(x)out self.layer2(out)# 使用插值将输入x上采样至与layer2输出相同的尺寸x F.interpolate(x, size(out.size(2), out.size(3)), modebilinear, align_cornersFalse)# 确保x的通道数与out匹配x x[:, :out.size(1), :, :] # 选择前ou…...
SAP SD学习笔记18 - 投诉处理4 - 请求书订正依赖,投诉处理流程的总结
上一章讲了 Credit/Debit Memo依赖,Credit/Debit Memo。Credit Memo依赖 本质上是一张受注票;Credit Memo 本质上是一张请求票。 SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo-CSDN博客 本章继续讲本图中的内容…...
记录下nginx接口代理配置问题
其中api和api1是前面定义的upstream,ip相同只是端口不同。 一开始/api1/直接 像api一样 proxy_pass http://api1这样是不行的,因为会代理到 后端的 /api1/...接口,而后端实际接口地址是 /api/..... 所以必须像上面写法才能将外网的 /api…...
flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示
flink-connector-mysql-cdc: 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本:3.2.0 flink版本&…...
001-Redis介绍
目录 一、Redis 简介 二、Redis 特性 三、Redis 下载安装 四、Redis 可视化管理界面工具 一、Redis 简介 1.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的 key-value 数据库。 2. 它在内存中存储数据,并提供了持久化功能,可以将数据保存到磁盘中,它是一种 NoS…...
数据结构---单链表
目录 一、概念 二、分类 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 三、接口实现 1.定义结构 2、申请节点 3、尾插 4、头插 5、尾删 6、头删 7.查找,也可以充当修改 8、在pos之前插入x 9、在pos之后插入x 编辑 10、删除pos位置 …...
从一个Bug谈前端响应拦截器的应用
一、问题场景 今天在开发商品管理系统时,遇到了一个有趣的问题:当添加重复的商品编号时,页面同时弹出了两条 "商品编号已存在" 错误提示: 这个问题暴露了前端错误处理机制的混乱,让我们从这个问题出发&…...
在做题中学习(78):数组中第K个最大元素
解法:快速选择算法 说明:堆排序也是经典解决topK问题的算法,但时间复杂度为:O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章,分别学习:数组分三块,随机选择基准…...
药剂学试卷
1【单选题】在倍氯米松气雾剂中加入四氟乙烷是用作 C A、 助悬剂 B、 乳化剂 C、 抛射剂 D、 防腐剂 2【单选题】一步制粒机可完成的工序是 B A、 粉碎→混合→制粒→干燥 B、 混合→制粒→干燥 C、 过筛→制粒→混合→干燥 D、 过筛→制粒→混合 3【单选题】小檗碱片包…...
3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切
3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切 文章目录 0 论文工作1 方法2 实验结果 0 论文工作 最近提出的高斯Splatting方法实现了高质量的实时三维场景新视角合成。然而,它仅仅关注外观和几何建模,缺乏细粒度的物体级场景理解。为了解决…...
力扣143.重排链表
题目描述 题目链接143. 重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值ÿ…...
本文介绍麒麟信安服务器系统(kylinsec)的安装。
本文介绍麒麟信安服务器系统(kylinsec)的安装。 下载 在开源欧拉官方找到商业版本的介绍找到相关产品: https://www.openeuler.org/zh/download/commercial-release/ 麒麟信安kylinsec下载地址: https://mirrors.kylinsec.com…...
单链表---回文结构
判断某一个单链表是否是回文结构,是返回true、不是返回false。 所谓的回文结构,就是类似对称结构: 对于奇数与偶数个结点均是如此。 那么就有思路:①找到链表的中间结点②逆置后半部分或前半部分③比较两者 ①找中间结点&#x…...