<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[CodeReaper的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/war_233</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; war_233]]></copyright><item><title><![CDATA[SQL语句（六）分页查询和联合查询]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119350439</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119350439</guid><author>war_233</author><pubDate>Tue, 03 Aug 2021 15:19:15 +0800</pubDate><description><![CDATA[文章目录一、分页查询语法格式应用二、联合查询语法和作用特点应用UNION和UNION ALL的区别
一、分页查询
语法格式
SELECT 	查询列表
FROM 	表
WHERE	...
GROUP BY 
HAVING	...
ORDER BY
LIMIT 	偏移, 记录数;	&lt;--

特点：

limit语句放在查询语句的最后
公式

select 查询列表
from 表
limit (page-1)*size, size;

应用
取前面5条记录：
SELECT * FROM employees ]]></description><category></category></item><item><title><![CDATA[SQL语句（五）子查询]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119344207</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119344207</guid><author>war_233</author><pubDate>Tue, 03 Aug 2021 14:32:29 +0800</pubDate><description><![CDATA[文章目录一、子查询含义二、子查询分类按子查询的位置分按结果集的行列数不同分三、WHERE后面的子查询1. 标量子查询2. 列子查询（多行子查询）3. 行子查询（结果为一行多列或多行多列）四 、SELECT后面的子查询五、FROM后面的子查询六、EXISTS后面的子查询EXISTS语句的作用简单应用
一、子查询含义
出现在其他语句中的select语句，称为子查询或内查询。
二、子查询分类
按子查询的位置分




位置
支持的查询




SELECT后面
支持标量子查询


FROM后面
支持表子查询


]]></description><category></category></item><item><title><![CDATA[SQL语句（四）联表查询]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119329769</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119329769</guid><author>war_233</author><pubDate>Tue, 03 Aug 2021 10:03:34 +0800</pubDate><description><![CDATA[文章目录一、关联查询的分类按年代分按功能分二、sql92语法的链接语法1. 简单应用2. 为表起别名3. 加入筛选4. 加入分组5. 三表连接6. 非等值连接7. 自连接
一、关联查询的分类
按年代分
sql92:仅仅支持内连接
sql99【推荐】:支持内连接+外连接（左外，右外）+交叉连接
按功能分

内连接

等值连接
非等值连接
自连接


外连接

左外连接
右外连接
全外连接


交叉连接

二、sql92语法的链接
语法
SELECT	查询列表
FROM 	待链接的多个表
WHERE 	连接条件]]></description><category></category></item><item><title><![CDATA[SQL语句（三）分组函数和分组查询]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119325777</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119325777</guid><author>war_233</author><pubDate>Mon, 02 Aug 2021 16:49:33 +0800</pubDate><description><![CDATA[文章目录分组函数特点1. 各函数的简单使用2. 搭配distinct的使用3. COUNT 统计行数4. 和分组函数一同查询的字段要求是group by后的字段二、分组查询1. 简单应用2. 添加筛选条件① 分组前的筛选② 分组后的筛选3. 按表达式或函数分组4. 按多个字段分组
分组函数
功能：统计信息
分类：

sum求和
avg平均值
max最大值
min最小值
count计算个数

特点

参数支持类型





函数
参数支持类型




sum avg
具有可加性的数据


max min
具有]]></description><category></category></item><item><title><![CDATA[SQL语句（二）数据排序和单行函数]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119323364</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119323364</guid><author>war_233</author><pubDate>Mon, 02 Aug 2021 14:56:33 +0800</pubDate><description><![CDATA[文章目录一、排序查询1. 基本排序2. 多条件排序二、单行函数调用方法字符函数①LENGTH函数②CONCAT函数③upper 和 lower④substr⑤instr⑥trim⑦lpad 和 rpad⑧replace替换数学函数①round，ceil 和 floor②truncate截断③mod取模流程控制函数①IF函数②CASE函数
一、排序查询
SELECT 查询列表
FROM 表
WHERE 条件
ORDER BY 排序列表 [ASC|DESC]

注意：

① ASC升序|DESC降序	默认升序
]]></description><category></category></item><item><title><![CDATA[SQL语句（一）基础查询与过滤数据]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119320046</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119320046</guid><author>war_233</author><pubDate>Mon, 02 Aug 2021 11:54:14 +0800</pubDate><description><![CDATA[文章目录一、数据库测试表二、基础查询1. 获得需要的记录的特定字段2. 查询常量值3. 查询表达式4. 查询函数5. 起别名6. 去重7. CONCAT函数的简单使用三、过滤数据大纲1. 按条件表达式筛选2. 使用逻辑表达式3. 模糊查询LIKEBETWEEN ANDINIS NULL安全等于  &lt;=&gt;
一、数据库测试表
首先这里给出需要使用到的数据库表：
链接：https://pan.baidu.com/s/17woahG6lupK9FYb3vFNJAg 
提取码：gbb4
里面是一个.sql]]></description><category></category></item><item><title><![CDATA[Java 反射（二）运行时获取类的信息]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119244116</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119244116</guid><author>war_233</author><pubDate>Fri, 30 Jul 2021 15:21:36 +0800</pubDate><description><![CDATA[文章目录一、获得类的运行时结构1. 获得类的名字2. 获得类的属性获取属性列表
一、获得类的运行时结构
1. 获得类的名字
getName()：包名+类名
getSimpleName()：类名
Class c1 = Class.forName("reflection.User");
// 获得类的名字
System.out.println(c1.getName());       //包名+类名
System.out.println(c1.getSimpleName()); //获得类名
=========]]></description><category></category></item><item><title><![CDATA[Java 反射（一）反射简介、原理和应用场景]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119238066</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119238066</guid><author>war_233</author><pubDate>Fri, 30 Jul 2021 11:48:05 +0800</pubDate><description><![CDATA[文章目录一、动态语言和动态语言的比较动态语言静态语言二、反射简介反射的常见使用1. 代码编辑器2. Spring等框架的IoC容器3. 和注解的配合使用原理反射优缺点调试查看Class类获取Class实例的方式1. 通过对象获得2. 通过Class.forname获得3. 通过类名.class获得4.基本内置类型的包装类用Type属性获得5. 一个Class实例通过.getSuperclass()获得父类的Class实例哪些类型可以有Class对象java内存分析
一、动态语言和动态语言的比较
动态语言
➢]]></description><category></category></item><item><title><![CDATA[Java 注解]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119213930</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119213930</guid><author>war_233</author><pubDate>Fri, 30 Jul 2021 09:45:20 +0800</pubDate><description><![CDATA[文章目录注解简介JDK内置注解元注解1. @Target2.@Retention
注解简介
◆	Annotation是从JDK5.0开始引入的新技术.
◆	Annotation的作用:
&nbsp;&nbsp;➢不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别)
&nbsp;&nbsp;➢可以被其他程序(比如:编译器等)读取.
◆Annotation的格式:
&nbsp;&nbsp;➢注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如:
&nbsp;&nbsp;&nb]]></description><category></category></item><item><title><![CDATA[Java8 Stream API的使用]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119155681</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119155681</guid><author>war_233</author><pubDate>Tue, 27 Jul 2021 23:42:23 +0800</pubDate><description><![CDATA[文章目录Stream的特点Stream的三个操作步骤1. 创建 Stream2. Stream的中间操作筛选与切片映射排序3.终止操作查找与匹配归约收集统计最大（小）、平均值分组多级分组分区字符串连接
Stream的特点
①Stream自己不会存储元素。
②Stream不会改变源对象。相反，他们会返回一个持有结果的新Stream。
③Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
Stream的三个操作步骤

创建Stream
中间步骤
终止操作（终端操作）

1. 创建 Strea]]></description><category></category></item><item><title><![CDATA[Java8 Lambda表达式（二）]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119155162</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119155162</guid><author>war_233</author><pubDate>Tue, 27 Jul 2021 23:04:49 +0800</pubDate><description><![CDATA[文章目录一、Java8 内置的四大核心函数式接口1. 消费型接口 Consumer2. 供给型接口 Supplier3. 函数型接口 Function4.断言型接口 Predicate二、方法引用语法格式对象::实例方法名类::静态方法名类::实例方法名三、构造器引用
一、Java8 内置的四大核心函数式接口
之前我们使用Lambda表达式之前都需要手动地去创建函数式的接口，但其实我们不必这样做，因为JDK8已经为我们提供好了四大核心函数式接口，即：
Consumer&lt;T&gt;: 消费型接口
voi]]></description><category></category></item><item><title><![CDATA[Java8 Lambda表达式（一）]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/119114617</link><guid>https://blog.youkuaiyun.com/war_233/article/details/119114617</guid><author>war_233</author><pubDate>Tue, 27 Jul 2021 10:32:04 +0800</pubDate><description><![CDATA[文章目录一、应用场景引入优化一：使用策略模式优化二：使用匿名内部类优化三：使用Lambda表达式优化四：使用Stream API二、Lambda运算符和对应语法
一、应用场景引入
首先编写对应的实体类模拟实际业务：
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Employee {
    private String name;
    private Integer age;
    private double ]]></description><category></category></item><item><title><![CDATA[Mybatis-Plus的配置和基本使用]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118936114</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118936114</guid><author>war_233</author><pubDate>Tue, 20 Jul 2021 16:20:27 +0800</pubDate><description><![CDATA[文章目录基本配置简单使用代码生成器
基本配置
首先新建一个springboot项目，然后导入数据库驱动，lombok和mybatis-plus依赖：
&lt;!-- 数据库驱动 --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;mysql&lt;/groupId&gt;
    &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
&lt;/dependency&gt;
&lt;!-- lombok --&]]></description><category></category></item><item><title><![CDATA[单片机学习（五）LCD1602和矩阵键盘的使用]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118698134</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118698134</guid><author>war_233</author><pubDate>Tue, 13 Jul 2021 14:12:23 +0800</pubDate><description><![CDATA[文章目录LCD1602的使用矩阵键盘的使用矩阵键盘相关电路图按键检测扫描制作密码输入器
LCD1602的使用
首先LCD1602是外接在开发板上的液晶屏外设，如图所示：

我们主要使用它来代替动态数码管进行显示，因此使用的原理我们可以先略过，而控制它可以使用b站up主提供的驱动程序，即我们只需调用第三方库即可实现对LCD1602的控制了。
（b站对应视频链接：https://www.bilibili.com/video/BV1Mb411e7re，可以在视频下方找到对应的驱动程序资源）
up主提供的驱动程序包]]></description><category></category></item><item><title><![CDATA[单片机学习（四）蜂鸣器和独立按键的使用]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118657399</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118657399</guid><author>war_233</author><pubDate>Sun, 11 Jul 2021 22:42:02 +0800</pubDate><description><![CDATA[蜂鸣器
两种蜂鸣器的介绍
有源蜂鸣器一般是输入一个电流或电压即可直接驱动工作，而无源蜂鸣器则需要输入脉冲信号才可以进行工作。在51单片机开发板上的即为无源蜂鸣器。
蜂鸣器相关电路图


可以看出，信号是通过P15传递到ULN2003D芯片后进而传递到芯片的OUT5（即BEEP端口）再传递到蜂鸣器中的，其中ULN2003D芯片起着电流放大的作用。
控制代码
首先我们先获得控制蜂鸣器的引脚，从电路图可以看出是P15，所以：
sbit BEEP= P1^5;

因为这是无源蜂鸣器，所以我们需要给它提供脉冲信号输入]]></description><category></category></item><item><title><![CDATA[单片机学习（三）开发板动态数码管的控制]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118652948</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118652948</guid><author>war_233</author><pubDate>Sun, 11 Jul 2021 15:41:16 +0800</pubDate><description><![CDATA[文章目录分析动态数码管控制的原理编码实现效果数码管计数器数码管流水灯显示0~65535的数字计数器升级版模拟时钟
分析动态数码管控制的原理

可以看出来，P0寄存器的每一个bit分别与输入a~dp联系起来，当对应的引脚为高电平时，对应的LED则点亮。
但是我们也可以发现每个8位数码管都是由输入a~dp进行控制的，那岂不是我们输入一个值，每个LED都呈现相同的内容了？但其实除了P0寄存器之外，P2的第2-4位作为了动态数码管的使能位，例如当这三位为1,1,1时，此时编号为0的寄存器处于使能状态，它可以输出发光]]></description><category></category></item><item><title><![CDATA[单片机学习（二）开发板LED灯的控制]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118639900</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118639900</guid><author>war_233</author><pubDate>Sun, 11 Jul 2021 00:35:44 +0800</pubDate><description><![CDATA[文章目录开发板上LED灯相关的电路图点灯LED闪烁LED流水灯其他效果灯光二进制计数器进阶版流水灯
开发板上LED灯相关的电路图

这是P2相关7个引脚的电路图，在默认情况下它是直接接着VCC的，即默认为高电平。

可以看到，8个LED灯分别是和单片机上P20~P27这8个引脚联系起来的，即一端是VCC，另一端是单片机上的端口，这样我们只需要将引脚端电平置为低电平即可将对应的LED点亮。
点灯
这里我们尝试先点亮从左到右数第一个LED灯，从电路图上看我们只需要将P20引脚的输出置为0（即设为低电平）即可，代]]></description><category></category></item><item><title><![CDATA[单片机学习（一）项目的建立和vscode代码编辑环境的设置]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118637850</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118637850</guid><author>war_233</author><pubDate>Sat, 10 Jul 2021 19:07:07 +0800</pubDate><description><![CDATA[文章目录Keil项目的建立使用vscode进行开发
工欲善其事必先利其器，因此我们先搭建一个比较舒服的开发环境。
Keil项目的建立

打开Keil软件点击Project/New uVision Project

设置项目名

选择芯片类型


这样新建项目完成

使用vscode进行开发
使用vscode来替代Keil自然是因为Keil中没有代码补全和错误提示，开发太难受了。
一下是设置开发环境和使用的过程

下载几个插件
需要的插件有：C/C++，EmbededIDE，Keil Assistant，如下]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（五）变换]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118567911</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118567911</guid><author>war_233</author><pubDate>Fri, 09 Jul 2021 21:38:46 +0800</pubDate><description><![CDATA[文章目录变换向量向量的运算向量与标量运算向量取反向量加减求向量长度向量的单位化向量相乘点乘(Dot Product)叉乘
参考资料：OpenGL中文翻译
变换
尽管我们现在已经知道了如何创建一个物体、着色、加入纹理，给它们一些细节的表现，但因为它们都还是静态的物体，仍是不够有趣。我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动，但这太繁琐了，而且会消耗很多的处理时间。我们现在有一个更好的解决方案，使用 （多个）矩阵(Matrix)对象可以更好的变换(Transform)一个物体。
为了深入]]></description><category></category></item><item><title><![CDATA[OpenGL学习笔记（四）纹理]]></title><link>https://blog.youkuaiyun.com/war_233/article/details/118557708</link><guid>https://blog.youkuaiyun.com/war_233/article/details/118557708</guid><author>war_233</author><pubDate>Thu, 08 Jul 2021 00:42:39 +0800</pubDate><description><![CDATA[文章目录要完成的纹理效果纹理环绕方式纹理过滤多级渐远纹理加载与创建纹理stb_image库的使用方法生成纹理对象应用纹理纹理单元
参考资料：OpenGL中文翻译
要完成的纹理效果

纹理是一个2D图片（甚至也有1D和3D的纹理），它可以用来添加物体的细节；你可以想象纹理是一张绘有砖块的纸，无缝折叠贴合到你的3D的房子上，这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节，这样就可以让物体非常精细而不用指定额外的顶点。
为了能够把纹理映射(Map)到三角形上，我们需要指定三角形的每个]]></description><category></category></item></channel></rss>