SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第三天)动态SQL
动态SQL—SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第三天)Mybatis的动态SQL操作
昨天我们深入学习了Mybatis的核心对象SqlSessionFactoryBuilder,掌握MyBatis核心配置文件以及元素的使用,也掌握MyBatis映射文件及其元素的使用。那么今天我们需要掌握的是更加复杂的查询操作。
- 学会编写MyBatis中动态SQL
- 学会MyBatis的条件查询操作
- 学会MyBatis的更新操作
- 学会MyBatis的复杂查询操作
一、什么是动态SQL?
MyBatis 中的动态 SQL 是一种在 SQL 查询语句中根据不同的条件来动态生成不同的 SQL 片段的技术。它允许你根据不同的情况来构建查询条件,避免写大量重复的 SQL 语句。
动态SQL常用元素
元素 | 说明 |
---|---|
< if > | 判断语句,用于单条件判断 |
< choose >(< when >、< otherwise >) | 相当于Java中的switch…case…default语句,用于多条件判断 |
< where > | 简化SQL语句中where的条件判断 |
< trim > | 可以灵活地去除多余的关键字 |
< set > | 用于SQL语句的动态更新 |
< foreach > | 循环语句,常用于in语句等列举条件中 |
动态 SQL 通常用于构建复杂的查询条件,例如:
- 根据不同的条件组合进行查询,比如根据姓名、性别、年龄等多个条件进行筛选。
- 根据不同的条件来动态排序查询结果。
- 在更新操作中,根据传入的参数来选择性地更新某些字段。
- 在插入操作中,根据不同的参数情况来选择性地插入某些字段。
MyBatis 提供了以下方式来实现动态 SQL:
-
使用
<if>
元素: 可以根据条件来动态生成 SQL 片段。例如:<select id="findByCondition" parameterType="map" resultType="User">SELECT * FROM users<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where> </select>
代码解释如下:
<select>
标签定义了一个查询语句,并指定了它的唯一标识符(id)、输入参数类型(parameterType)和结果类型(resultType)。SELECT * FROM users
是实际的 SQL 查询语句,表示从名为 “users” 的表中选取所有列的数据。<where>
标签是 MyBatis 提供的一个用于构建动态 SQL 的元素,它会在生成的 SQL 语句中添加 “WHERE” 关键字,并且只会在至少有一个条件满足时添加。<if>
标签是<where>
标签中的子元素,用于判断某个条件是否成立。它的 “test” 属性用于指定一个条件表达式。如果
test="name != null"
成立,那么会在生成的 SQL 语句中添加一个 “AND name = #{name}” 的条件。如果
test="age != null"
成立,那么会在生成的 SQL 语句中添加一个 “AND age = #{age}” 的条件。这样,在实际执行查询时,如果传入的参数中有 “name”,那么会根据 “name” 的值添加相应的查询条件;同样地,如果传入的参数中有 “age”,那么会根据 “age” 的值添加相应的查询条件。
-
使用
<choose>
元素: 类似于 switch 语句,根据条件选择一个分支进行处理。<select id="findByCondition" parameterType="map" resultType="User">SELECT * FROM users<where><choose><when test="name != null">AND name = #{name}</when><when test="age != null">AND age = #{age}</when><otherwise>AND 1=1</otherwise></choose></where> </select>
代码解释:
这段代码使用了 MyBatis 中的动态 SQL 元素
<choose>
元素,也称为<choose>/<when>/<otherwise>
构造。这样的构造允许你在 SQL 查询中根据条件动态地生成不同的部分。<choose>
包含了多个<when>
元素,每个<when>
元素对应一个条件判断,如果条件满足,就会生成相应的 SQL 查询条件。如果所有条件都不满足,就会执行<otherwise>
部分。简单来说,这个查询语句的意思是:
- 如果传入的参数
name
不为null
,则添加条件AND name = #{name}
到查询语句中。 - 如果传入的参数
age
不为null
,则添加条件AND age = #{age}
到查询语句中。 - 如果以上条件都不满足(即都为
null
),则添加条件AND 1=1
到查询语句中。这个条件相当于一个恒为真的条件,因此不会影响查询结果。
- 如果传入的参数
-
使用
<trim>
元素: 可以根据条件来剪切 SQL 片段的开始或结尾,以防止出现多余的关键字。<select id="findByCondition" parameterType="map" resultType="User">SELECT * FROM users<where><trim prefix="AND (" suffix=")" prefixOverrides="OR"><if test="name != null">OR name = #{name}</if><if test="age != null">OR age = #{age}</if></trim></where> </select>
上述代码使用了 MyBatis 的动态 SQL 元素中的
<trim>
元素,用于构建更复杂的条件语句。<trim>
元素用于构建一个以AND
为前缀和)
为后缀的条件片段,同时在生成条件语句时去除可能多余的OR
。简单来说,这个查询语句的意思是:
- 如果传入的参数
name
不为null
,则将OR name = #{name}
添加到条件片段中。 - 如果传入的参数
age
不为null
,则将OR age = #{age}
添加到条件片段中。
<trim>
元素的prefix
属性指定前缀,suffix
属性指定后缀,prefixOverrides
属性指定需要去除的前缀。在这个例子中,prefix
是AND (
,suffix
是)
,prefixOverrides
是OR
。这样,如果有至少一个条件满足,就会生成类似AND ( condition1 OR condition2 )
的查询语句。如果没有条件满足,就会生成AND ()
,这不会影响查询结果。 - 如果传入的参数
-
使用
<foreach>
元素: 可以用来遍历集合或数组参数,生成多个相同的 SQL 片段。<select id="findByIds" parameterType="list" resultType="User">SELECT * FROM usersWHERE id IN<foreach item="id" collection="list" open="(" separator="," close=")">#{id}</foreach> </select>
这段代码是一个 MyBatis 的动态 SQL 查询语句,用于根据传入的一组 id 值查询对应的用户信息。这个查询语句利用了 <foreach>
元素,允许在 SQL 查询中动态地生成 IN
子句。
具体来说,这个查询语句的意思是:
- 查询
users
表中的所有列(SELECT *
)。 - 使用
WHERE
子句进行过滤,条件是id
值在传入的list
参数中。 <foreach>
元素用于循环遍历传入的list
参数,将每个id
值包装在(
和)
之间,并使用,
作为分隔符。
在这个查询语句中,<foreach>
元素的属性含义如下:
item
:指定在每次循环中使用的变量名,这里是id
。collection
:指定要遍历的集合参数的名字,这里是list
。open
:指定循环的开始字符,这里是(
。separator
:指定循环每个元素之间的分隔符,这里是,
。close
:指定循环的结束字符,这里是)
。
这样,如果传入一个列表参数 list
,比如 [1, 2, 3]
,就会生成类似 SELECT * FROM users WHERE id IN (1, 2, 3)
的查询语句,从而查询对应的用户信息。
这些动态 SQL 的特性使得 MyBatis 在构建灵活和动态的查询条件时非常方便,避免了硬编码大量重复的 SQL 语句。
二、MyBatis的条件查询操作
在学习了上面的几个动态SQL的常用元素,现在我们来尝试一下编写一下我们自己项目的动态SQL。
1.编写一个使用<if>
的动态SQl查询语句,若有账号名称Account则按账号名称Account查询,若有网站名WebsiteName则用WebsiteName查询,若俩个都有则俩个都匹配的才查询。
PasswordMSMapper.xml中编写动态sql语句:
①首先进行单条件查询测试,若Account不为空:
②也是单条件查询测试,若WebsiteName不为空:
③若是俩个条件都满足呢?Account和WebsiteName都不为空:
④若是俩个条件都不满足呢?Account和WebsiteName都为空:
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL。
2.那么我们继续尝试编写<choose>
的动态sql语句,情景时:若有账号名Account,则优先使用账号名进行查询。若无账户名,有网站名WebsiteName,那么就按网站名搜索。若账号名,网站名都无,那么就采用默认查询passwordms表中的所有信息。
在使用<if>
元素时,只要test属性中的表达式为true,就会执行元素中的条件语句,但是在实际应用中,有时只需要从多个选项中选择一个去执行。这时候使用<choose>
就是非常合适的,如果使用<if>
则是不合适的。
PasswordMSMapper.xml中编写动态sql语句:
那么去编写我们的测试类,根据不同的输入情况,查看是否满足我们的需求?
①Account不为空,WebsiteName为空的情况:
②Account不为空,WebsiteName不为空的情况(结果和上面的一样):
③Account为空,WebsiteName不为空的情况:
④Account为空,WebsiteName也为空的情况:
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL。
3.那么我们继续尝试编写<where>
、<trim>
的动态sql语句,情景时:在sql中where 后面直接跟and 或者 or之类的关键字都是错误的,会导致我们的SQL语句运行不成功
在这个示例中我们写了个
<trim> prefix="AND (" suffix=")" prefixOverride="AND"
,
在<if>
条件中Account满足时,程序会自动在AND Account=#{Account}前面、后面,添加上前后缀生成新的语句:
AND (AND Account=#{Account}),
若是WebsiteName也满足的话,新的sql语句为:
AND (AND Account=#{Account} AND WebsiteName = #{WebsiteName} )
我们写的prefixOverrides=“AND”,会自动将()里面的多余的前缀AND去除,即生成:
AND ( Account=#{Account} AND WebsiteName = #{WebsiteName} )
看到这里是不是觉得那外面还有一个where呢?where AND (Account=#{Account} AND WebsiteName = #{WebsiteName})
也是错的对不?实际上<where>
会自动帮我们去除()外多余的AND和OR防止SQL语句出错。
因此这个流程下来我们的语句就变成了:
where ( Account=#{Account} AND WebsiteName = #{WebsiteName} )
我们去输入测试类看看就知道是不是了
①Account不为空,WebsiteName也不为空:
②Account为空,WebsiteName不为空:
根据我们上面讲的流程:那么推测生成的动态sql语句应该是:
where ( WebsiteName=#{WebsiteName} )
③Account、WebsiteName都为空:
根据我们上面讲的流程:那么推测生成的动态sql语句应该是:
Select * from passwordms,因为if里面的条件每一个成立,所以where也不会添加进去,但是会自动删除语句中多余的AND或OR
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL,并且正确无误。
三、Mybatis的更新操作
4.那么我们继续尝试编写<set>
、<trim>
的动态sql语句,情景时:如果想要更新某一个对象,就需要发送所有的字段给持久化对象,然而在实际应用中,大多数情况下都是更新某一个或几个字段。如果更新的每一条数据都要将其所有的属性都更新一遍,那么执行效率是非常差的。为了解决更新数据的效率问题,MyBatis提供了<set>
元素。
除了可以用<trim>
元素来进行更新操作外,也使用<set>
元素来进行更新操作, 在映射文件中使用<set>
元素和<if>
元素组合进行update语句动态SQL组装时,如果<set>
元素内包含的内容都为空,则会出现SQL语法错误。因此,在使用<set>
元素进行字段信息更新时,要确保传入的更新字段不能都为空。
除此以外还可以跟前面的<trim>
元素联合起来一起使用。其中, <trim>
元素,suffixOverrides属性指定去除的<trim>
元素所包含内容的后缀为逗号 。
好那么我们来编写我们的Mapper文件:
接下来进行测试类测试:
①:更新多个字段的情况:
可以看到嗷,正常数据更新了,但是呢,其实是有问题的,不管数据是不是更原来的一样,都会对数据库进行一次更新的操作。
因此我们还需要再改改,还需要加一个数据库对比的判断,详细代码如下:
isDataEqual()方法如下:
// 判断两个对象的数据是否相等private boolean isDataEqual(PasswordMS oldData, PasswordMS newData) {return Objects.equals(oldData.getAccount(), newData.getAccount())&& Objects.equals(oldData.getWebsiteName(), newData.getWebsiteName());}
那么保持参数条件不变的情况下继续进行测试:
可以看到测试成功,正确提示!
②尝试看看单参数字段修改的情况:
③若是无参数那么就会报错,所以一定要确保更新的参数必须要有,不能全为空。
好的那么更新操作就学到这里了。
四、使用Mybatis的动态SQL进行复杂操作
使用 <foreach>
元素可以在 MyBatis 中对集合进行迭代操作,通常用于构建 IN 条件的查询语句。
<foreach>
元素的属性
属性 | 说明 |
---|---|
item | 表示集合中每一个元素进行迭代时的别名。该属性为必选。 |
index | 在List和数组中,index是元素的序号,在Map中,index是元素的key。该属性可选。 |
open | 表示foreach语句代码的开始符号,一般和close=“)”合用。常用在in条件语句中。该属性可选。 |
separator | 表示元素之间的分隔符,例如,在条件语句中,separator=“,”会自动在元素中间用“,”隔开,避免手动输入逗号导致SQL错误,错误示例如in(1,2,)。该属性可选。 |
close | 表示foreach语句代码的关闭符号,一般和open="("合用。常用在in条件语句中。该属性可选。 |
collection | 用于指定遍历参数的类型。注意,该属性必须指定,不同情况下,该属性的值是不一样的。 |
<collection>
属性的取值
在遍历参数时,<collection>
属性的值是必须指定的。不同情况下,该属性的取值也是不一样的,主要有以下三种情况:List类型、数值类型、Map类型。
- 若入参为单参数且参数类型是一个List,collection属性值为list。
- 若入参为单参数且参数类型是一个数组,collection属性值为array。
- 若传入参数为多参数,就需要把参数封装为一个Map进行处理,collection属性值为Map。若传入参数为多参数,就需要把参数封装为一个Map进行处理,collection属性值为Map。
5.那么我们继续尝试编写<foreach>
的动态sql语句,情景时:要从数据表passwordms中查询出id为1、2、3的账号信息,就可以利用数组作为参数,存储id的属性值1、2、3,并通过<foreach>
元素迭代数组完成账号信息的批量查询操作。
好那么我们来编写我们的Mapper文件:
<select id="findByIds" parameterType="list" resultType="PasswordMS">SELECT * FROM passwordmsWHERE id IN<foreach item="id" collection="list" open="(" separator="," close=")">#{id}</foreach></select>
在我们的代码中,findByIds
是查询的 ID,parameterType
设置为 list
表示传入的参数是一个 List,resultType
设置为 PasswordMS
表示返回结果是 PasswordMS
类型的对象。
编写测试类:
输入的参数类型为同一种,查询1-3的账号信息
@Test
void findByIds() {SqlSession session = MyBatisUtil.createSqlSession();List<Integer> idList = Arrays.asList(1, 2, 3); // 要查询的 id 列表// 传入参数查询,返回结果List<PasswordMS> passwordMSList = session.selectList("findByIds", idList);for (PasswordMS s : passwordMSList) {logger.info("id:" + s.getId() + ",账号:" + s.getAccount() + ",密码:" + s.getPassword() + ",网站名:" + s.getWebsiteName() + ",网站网址:" + s.getWebsiteURL() + ",网站缩略图:" + s.getWebsiteImage() + ",账号描述:" + s.getAccountDescription());}// 关闭 sessionsession.close();
}
可以看出,通过使用 <foreach>
元素就能够方便地在 MyBatis 中对集合进行迭代操作,构建需要的查询条件。
总结
这是第三天对SSM框架的学习,深入学习了MyBatis的动态SQL,它允许我们根据不同的条件在 SQL 查询中动态地构建、拼接和执行 SQL 语句。动态 SQL 可以帮助你编写更加灵活、可复用和动态的数据库查询语句,适用于各种复杂的业务场景。
想要跟着学习的可以去我的资源里面找对应的文件下载,我的md文件也会发上去,项目文件会上传可以自己跟着学习一下。
PS:sql语句自己编写┗|`O′|┛ 嗷~~
作者:Stevedash
发表于:2023年8月23日 16点28分
注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。
相关文章:
![](https://img-blog.csdnimg.cn/a3f8ef6a2e734c338aa5169ec410994a.png#pic_center)
SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第三天)动态SQL
动态SQL—SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第三天)Mybatis的动态SQL操作 昨天我们深入学习了Mybatis的核心对象SqlSessionFactoryBuilder,掌握MyBatis核心配置文件以及元素的使用,也掌握My…...
![](https://img-blog.csdnimg.cn/5f3484eaa651469382cdab80bc7b1c75.png)
Kaggle(3):Predict CO2 Emissions in Rwanda
Kaggle(3):Predict CO2 Emissions in Rwanda 1. Introduction 在本次竞赛中,我们的任务是预测非洲 497 个不同地点 2022 年的二氧化碳排放量。 在训练数据中,我们有 2019-2021 年的二氧化碳排放量 本笔记本的内容&am…...
![](https://img-blog.csdnimg.cn/img_convert/bf7240ea5171d74e007ebdf6ed324144.png)
【技巧分享】如何获取子窗体选择了多少记录数?一招搞定!
Hi,大家好久不见。 我这个更新速度是不是太慢了呀,因为,最近又又又在忙,请大家谅解啦。 现在更新文章、视频都要花好久去考虑,好不容易有个灵感了,一搜索,结果发现之前都已经分享过了(委屈脸&…...
![](https://www.ngui.cc/images/no-images.jpg)
Kotlin AQ
如何学习kotlin? 学习Kotlin的步骤如下: 1. 理解Kotlin的基础:首先,你需要理解Kotlin的基础知识,包括变量、数据类型、运算符、控制流等。你可以通过阅读Kotlin的官方文档或者其他在线教程来学习。 2. 实践编程:理论…...
![](https://img-blog.csdnimg.cn/b9718cc5e6f444ad8ac607c2ab523343.png)
SpringBoot入门篇2 - 配置文件格式、多环境开发、配置文件分类
目录 1.配置文件格式(3种) 例:修改服务器端口。(3种) src/main/resources/application.properties server.port80 src/main/resources/application.yml(主要用这种) server:port: 80 src/m…...
![](https://www.ngui.cc/images/no-images.jpg)
UOS安装6.1.11内核或4.19内核
6.1.11内核 sudo sh -c echo "deb https://proposed-packages.deepin.com/beige-testing unstable main dde community commercial " > /etc/apt/sources.list.d/deepin-testing.list sudo apt update && sudo apt install linux-image-6.1.11-amd64-de…...
![](https://www.ngui.cc/images/no-images.jpg)
HiveSQL刷题
41、同时在线人数问题 现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为,一个用户何时进入了一个直播间,又在何时离开了该直播间。 user_id (用户id)live_id (直播间id)in_datetime (进入直…...
![](https://www.ngui.cc/images/no-images.jpg)
path路径模块
path模块是Node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。 path.join( )用来将多个路径片段拼接成一个完整的路径字符串 ../会抵消前面的路径 const path require(path) const pathStr path.join(/a,/b,../,/d) conso…...
![](https://img-blog.csdnimg.cn/b70e5147a07a48f4a96fd1fcce55ed2b.png)
1.文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(附matlab程序)
0.代码链接 文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(matlab程序)-Matlab文档类资源-CSDN文库 1.简述 本文采用遗传算法的方式进行了下述文章的复现并采用电-热节点的方式进行了潮流计算以降低电网的网络损耗 分析了电网的基本数…...
![](https://img-blog.csdnimg.cn/815f71d62c4943e7bd540c80376317ef.png)
【Terraform学习】使用 Terraform 托管 S3 静态网站(Terraform-AWS最佳实战学习)
使用 Terraform 托管 S3 静态网站 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_s3 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_secret_key和区域变量…...
![](https://www.ngui.cc/images/no-images.jpg)
触发JVM fatal error并配置相关JVM参数
1. 絮絮叨叨 工作中,Java服务因为fatal error(致命错误,笔者称其为jvm crash),在服务运行日志中出现了致命错误的概要信息: # # A fatal error has been detected by the Java Runtime Environment: # # S…...
![](https://img-blog.csdnimg.cn/5baaae0d3cc343e1bc071caa066cd1d6.jpeg)
爬虫(bilibili热门课程记录)
什么是爬虫?程序蜘蛛,沿着互联网获取相关信息,收集目标信息。 一、python环境安装 1、先从Download Python | Python.org中下载最新版本的python解释器 2、再从Download PyCharm: Python IDE for Professional Developers by JetBrains中下…...
![](https://img-blog.csdnimg.cn/5897c33909d3452b9691cbfd88a577a6.png)
14-模型 - 增删改查
增: # 1. 找到模型类并创建对象 user User() # 2. 给对象的属性赋值 user.username username user.password password user.phone phone # 3. 将user对象添加到session中 (类似缓存) db.session.add(user) # 4. 提交数据 db.session.commit() 删: # 两种删除:# 1. 逻辑删…...
![](https://img-blog.csdnimg.cn/img_convert/83e3dea22f262a53022c44bea1313676.png)
C#与西门子PLC1500的ModbusTcp服务器通信3--搭建ModbusTcp服务器
1、打开仿真工具,创建PLC,注意创建完成后不要关闭 注意,这个IP地址必须与西门子虚拟网卡的IP地址及虚拟机的网卡IP地址同一网段 2、打开博途V15,创建项目,命名为Lan项目 3、添加1500系列CPU1513 4、设置设置IP地址及属…...
![](https://img-blog.csdnimg.cn/289dcdbb1a944324b1d667f1e05aec2f.png)
Linux系统编程:线程控制
目录 一. 线程的创建 1.1 pthread_create函数 1.2 线程id的本质 二. 多线程中的异常和程序替换 2.1 多线程程序异常 2.2 多线程中的程序替换 三. 线程等待 四. 线程的终止和分离 4.1 线程函数return 4.2 线程取消 pthread_cancel 4.3 线程退出 pthread_exit 4.4 线程…...
![](https://img-blog.csdnimg.cn/1f908c2049d24f0b99fb2a207e55cb1e.png)
基于Java+SpringBoot+Vue前后端分离纺织品企业财务管理系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
![](https://www.ngui.cc/images/no-images.jpg)
搭建开发环境-Windows
写C# 的请出去。 然后,Windows 是最好的Linux发行版。搭建开发环境-WSLUbuntu...
![](https://img-blog.csdnimg.cn/94d116f7e3c641ccab451b9cdfdf9364.png)
【 Python 全栈开发 - 人工智能篇 - 45 】集成算法与聚类算法
文章目录 一、集成算法1.1 概念1.2 常用集成算法1.2.1 Bagging1.2.2 Boosting1.2.2.1 AdaBoost1.2.2.2 GBDT1.2.2.3 XgBoost 1.2.3 Stacking 二、聚类算法2.1 概念2.2 常用聚类算法2.2.1 K-means2.2.2 层次聚类2.2.3 DBSCAN算法2.2.4 AP聚类算法2.2.5 高斯混合模型聚类算法 一、…...
![](https://www.ngui.cc/images/no-images.jpg)
SSM商城项目实战:账户充值功能实现
SSM商城项目实战:账户充值功能实现 在一个电商平台中,用户账户充值是一个非常重要的功能。本文将介绍如何在SSM(SpringSpringMVCMyBatis)商城项目中实现账户充值功能。通过本文的指导,你将学会如何在项目中添加账户充…...
![](https://www.ngui.cc/images/no-images.jpg)
wireshark工具pcap文件转换
pcap详解_pcap_loop_小虎随笔的博客-CSDN博客 分析802.11无线报文hexdump内容:利用wireshark自带二进制工具text2pcap将hexdump内容转换为pcap文件..._weixin_30835933的博客-CSDN博客 text2pcap: 将hex转储文本转换为Wireshark可打开的pcap文件(wireshark,数据) …...
![](https://img-blog.csdnimg.cn/a2e1d38159d04acfa0ccdfb1eedd91b9.png#pic_center)
Python+TinyPNG熊猫网站自动化的压缩图片
前言 本篇在讲什么 PythonTinyPNG自动化处理图片 本篇需要什么 对Python语法有简单认知 依赖Python2.7环境 依赖TinyPNG工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉…...
![](https://img-blog.csdnimg.cn/6af88c25a61341c6b01f257b931670d6.png)
【Linux】socket 编程基础
文章目录 📕 网络间的通信📕 socket 是什么1. socket 套接字2. 套接字描述符3. 基本的 socket 接口函数3.1 头文件3.2 socket() 函数3.3 bind() 函数struct sockaddr主机序列与网络序列 3.4 listen() 函数3.5 connect() 函数3.6 accept() 函数IP 地址风格…...
![](https://img-blog.csdnimg.cn/img_convert/8dfe738dcb63176bd275dc4ea5298ea1.jpeg)
openGauss学习笔记-51 openGauss 高级特性-列存储
文章目录 openGauss学习笔记-51 openGauss 高级特性-列存储51.1 语法格式51.2 参数说明51.3 示例 openGauss学习笔记-51 openGauss 高级特性-列存储 openGauss支持行列混合存储。行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。 行、列…...
![](https://img-blog.csdnimg.cn/f54755ad1b7b448cab91050592060665.png#pic_center)
ReactNative 密码生成器实战
效果展示图 使用插件 Formik 负责表单校验、监听表单提交、数据校验错误信息展示 Yup 负责表单校验规则 分析页面 从上述的展示图我们可以看到的主要元素有:输入框、单选按钮和按钮。其中生成的密码长度不可能很大也不可能为负数和 0,所以我们可以限…...
![](https://img-blog.csdnimg.cn/16a0584fd8084efb9095bb02387cf934.png)
开始MySQL之路——外键关联和多表联合查询详细概述
多表查询和外键关联 实际开发中,一个项目通常需要很多张表才能完成。例如,一个商城项目就需要分类表,商品表,订单表等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表…...
![](https://www.learnfk.com/guide/images/wuya.png)
无涯教程-PHP - intval() 函数
PHP 7引入了一个新函数 intdiv(),该函数对其操作数执行整数除法并将该除法返回为int。 <?php$valueintdiv(10,3);var_dump($value);print(" ");print($value); ?> 它产生以下浏览器输出- int(3) 3 PHP - intval() 函数 - 无涯教程网无涯教程网…...
![](https://img-blog.csdnimg.cn/560e1e21002943d28d3375e2c034f49d.png)
2023年国赛数学建模思路 - 案例:粒子群算法
文章目录 1 什么是粒子群算法?2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…...
![](https://img-blog.csdnimg.cn/83e3de42d04c462eb81bca1fa7e319df.png)
【1++的数据结构】之map与set(一)
👍作者主页:进击的1 🤩 专栏链接:【1的数据结构】 文章目录 一,关联式容器与键值对二,setset的使用 三,mapmap的使用 四,multiset与multimap 一,关联式容器与键值对 像l…...
![](https://img-blog.csdnimg.cn/cb869868ff2847a7a716d70bd00a3527.png)
Ubuntu断电重启后黑屏左上角光标闪烁,分辨率低解决办法,ubuntu系统display只有4:3 怎么办?太卡
这个问题主要是显卡驱动问题,按照步骤更新显卡驱动 1,选择metapackage 并且选择proprietary版本,选择版本号选择最新的版本。 2,具体步骤参考 前言 笔者在安装显卡驱动时并未遇到问题,主要是后续屏幕亮度无法调节&…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 微服务当中POST form 、url、json的区别
在Java微服务的Controller中,你可以处理来自客户端的不同类型的POST请求,包括POST form、POST URL参数和POST JSON数据。以下是它们的区别以及在微服务Controller中的示例说明: POST Form 表单数据: 当客户端以表单方式提交数据…...
![](https://img-blog.csdnimg.cn/20210506233256461.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NTk4NTA5Nw==,size_16,color_FFFFFF,t_70)
上海微网站/职业技能培训网
Nginx负载均衡 Nginx负载均衡的作用 如1台Nginx服务器给2台web服务器做代理,负载均衡算法采用轮询方式,当一台web服务器出现故障造成不能访问,Nginx服务器分发请求依然会发送到故障服务器;若响应时间过长,会导致客户端…...
![](https://img0.pconline.com.cn/pconline/1707/28/9673325_20160622_698398fa7ce559ac91aeNjGmtUcNjTVD_thumb.jpg)
建设职业技术学院网站/seo学校
电脑在我们的生活中被使用的是越来越广泛了。当我们使用电脑的时候,都是需要连接网络的。连上了网络之后,我们才可以获取到更多的消息。在联网的时候,都是需要一个ip的。Ip就是互联网相连的协议。这个ip除了可以自动生成之外,我们…...
![](https://img-blog.csdnimg.cn/2021030414460055.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXpoZW5oZTE5ODg=,size_16,color_FFFFFF,t_70)
东莞做网站首选企业铭/小说搜索风云榜
前言 很多时候我们需要在页面中引用外部的css文件,下面将介绍一下如何通过Jquery动态加载css文件 方式一(Jquery) var cssFileUrl../css/home.css; if (cssFileUrl) {$("<link>").attr({rel: "stylesheet",type: …...
![](/images/no-images.jpg)
网页截图快捷键可拉动/资源优化网站排名
在2011年,中国的通信运营领域将会发生巨大的变化,也许会是本质上的格局变动,会给下一个十年的中国社会造成深远的影响: 1、中国移动会否和苹果达成合作? 就中国移动而言,与苹果手机结缘的迫切心情不言而喻&…...
abcd设计公司/北京网站seo费用
最近因为工作需要申请了3台Linux虚拟机,因为需要多人多地协作,所以开通了互联网访问权限,即给每天服务器配置了公网IP,有一天突然发现服务器运行速度巨慢,就上服务器进行查看,下面把整个过程如实记录&#…...
![](http://blog.51cto.com/attachment/201209/212757633.png)
宝鸡免费做网站/海南网站建设
围绕纯真数据库的一系列小工具 qqwry.c,qqwry.h。一个c实现的lib,用来从纯真数据库里获取ip地址信息。下载,文档 nali,一组ip查询工具,包括可以让dig,traceroute显示ip地理信息。下载,文档 pecl::qqwry&…...