SQL必知必会-读书笔记(四)
SQL必知必会-读书笔记(四)SQL过滤与应用过滤
在实际开发中,我们可以选择SQL过滤,也可以选择应用过滤。但不管如何,都建议使用SQL过滤,
理由如下:
SQL过滤的效率通常高于应用过滤(尤其是SQL优化后)
在应用端处理数据库的工作会极大地影响应用性能,并使应用不具备可伸缩性
使用应用过滤时,服务器不得不通过网络发送大量数据,浪费了带宽
操作符兼容问题
我们知道 != 和 <> 的含义是一样的,但是从不同 DBMS 兼容性的角度考虑,更加推荐使用 <>
空值 NULL
空值 NULL 是一种特殊的值,通常使用 IS NULL 或 IS NOT NULL 来进行条件过滤
NULL 与任何值比较都是 NULL
NULL 在布尔类型中既不是 true 也不是 false
举个例子,假设执行:
1SELECT * FROM your_table WHERE column1 <> 1
该语句不会包括 column1 为 NULL,因为 NULL <> 1 -> NULL,而不是true
SQL必知必会-读书笔记(三)
SQL必知必会-读书笔记(三)何为子句(clause)
子句由关键字+数据组成
例如
12SELECT your_column -- 子句1FROM your_table -- 子句2
ORDER BY细节细节一
ORDER BY 默认只影响前一个列,例如
1SELECT your_column FROM your_table ORDER BY A,B,C,D DESC -- DESC 只影响了 D 字段
在 MySQL 中,ORDER BY 默认是 ASC,例如
123SELECT your_column FROM your_table ORDER BY A,B,C,D DESC -- DESC 只影响了 D 字段# 等价为SELECT your_column FROM your_table ORDER BY A ASC,B ASC,C ASC,D DESC
细节二
ORDER BY 可以用列的序号代替列名(序号从1开始)
1234# 假设字段A,B,C,D分别位于3,4,5,6列,序号从1开始SELECT your_column FROM your_table ORDER ...
SQL必知必会-读书笔记(二)
SQL必知必会-读书笔记(二)
结束SQL语句
多条SQL必须适用 ; 分割
单条SQL是否需要 ; 结束取决于DBMS
事实上,多个 ; 没有坏处
SQL语句大小写
SQL 语句不区分大小写,但是,一个关键字尽量全部大写或者全部小写
许多开发人员喜欢关键字大写,表名、列名小写,我也一样。但在实际开发时,可以选择保护你的右手小指关节,敲敲小写🤦
适当使用空格
SQL 语句在处理时会忽略空格,所以可以把SQL拆成多行,这样更好读
使用通配符
什么时候用通配符 * ?
当我们需要所有列的时候
当我们不知道列名的时候
事实上,应该尽可能减少通配符的使用,因为检索不需要的列会降低检索速度和应用程序的性能
DISTINCT 的使用
DISTINCT 用于去重,一旦使用就会作用于被检索的全部列,DISTINCT 不能仅作用于部分列
限制查询结果
对于 ANSI SQL
1SELECT TOP 5 your_column FROM your_table -- 只检索前 5 行
对于 DB2
1SELECT 5 your_column FROM your_t ...
ApplicationContext详解
ApplicationContext详解ApplicationContext 是 Spring 框架中的核心接口之一,代表了 Spring 容器的上下文。
ApplicationContext 提供了对应用程序的所有 Beans 的访问,并支持许多功能,包括依赖注入、事件发布和 AOP(面向切面编程)。
定义与功能ApplicationContext 是 Spring 的一种配置容器,它能够:
加载 Bean 的定义
创建 Bean 实例
管理 Bean 的生命周期
提供了配置、服务和其他功能的支持。
主要功能
Bean 的管理:负责 Bean 的创建、初始化和销毁。
依赖注入:自动将 Bean 的依赖注入到其他 Bean 中。
事件发布:发布应用程序事件,例如上下文刷新事件、Bean 创建事件等。
国际化支持:支持消息的国际化。
资源加载:可以加载资源文件,例如属性文件和 XML 文件。
常见实现Spring 提供了多种 ApplicationContext 的实现,以下是几个常见的实现:
**ClassPathXmlApplicationContext**:从类路径下 ...
Spring框架注解读取配置文件
Spring框架注解读取配置文件
Spring提供了多种方式来读取配置文件,包括使用@Value注解和@ConfigurationProperties注解。
使用 @Value 注解@Value 注解用于将配置文件中的单个属性值注入到Bean的字段、构造函数或方法参数中。
@Value 注解可以从application.properties 或 application.yml 文件中读取值。
1. application.properties 示例12app.name=MyAppapp.version=1.0.0
2. 读取 application.properties 中的值12345678910111213141516171819202122232425262728293031import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;@Componentpublic class AppConfig { @Va ...
Spring注解式依赖注入
Spring注解式依赖注入在Spring框架中,依赖注入(Dependency Injection, DI)是核心功能之一,通过DI可以使得组件之间的依赖关系解耦,方便管理和维护。
依赖注入(DI)是一种软件设计模式,用于实现对象之间的松耦合。这种模式通过将对象的依赖(即被依赖的对象)注入到对象中,而不是在对象内部直接创建依赖,从而实现对象之间的解耦。DI是控制反转(Inversion of Control, IoC)的一种实现方式。
本文将详细介绍常用的注解:@Autowired、@Resource、@Qualifier、@Inject、@Lookup,并说明它们的使用场景和区别。
@Autowired概述@Autowired是Spring框架中用于自动注入依赖的注解。它可以标注在字段、构造方法、Setter方法上。
使用方式
字段注入:
字段式注入是项目中最常见的DI方式
1234567@Componentpublic class MyService { @Autowired private MyRepository myRepository; ...
MyBatis一词的由来
MyBatis一词的由来Batis的含义:
MyBatis中的“Batis”实际上是“iBATIS”的一部分。
iBATIS最早是由Clinton Begin开发的一个数据持久化框架。
iBATIS这个名字中的“i”代表Internet,“BATIS”是一个英文单词“Baptist”的变形,原意是指“浸礼会的”,引申为“浸入、洗礼”的意思,寓意该框架可以帮助开发者浸入数据访问的世界。
MyBatis的来历:后来,iBATIS项目被Apache Software Foundation接管,并且继续开发和维护。2010年,iBATIS团队决定将项目迁移到Google Code,并且重新命名为MyBatis。这个名字有两个含义:
“My”表示个性化,强调开发者可以根据自己的需求对框架进行配置和使用。
“Batis”则延续了iBATIS的传统,保留了其浸入数据访问的含义。
MyBatis insert 的同时返回对应的行id
MyBatis insert 的同时返回对应的行id如何使用?123<insert id-"xx" paramType="xx.xx.xx" resultType="yy.yy.yy" useGeneratedKeys="true" keyProperty="id"> -- SQL --</insert>
useGeneratedKeys=”true” keyProperty=”id” : 添加这部分代码(属性),即可令MyBatis insert 返回id而不是插入的数量
注意点:
useGeneratedKeys="true"和keyProperty="id"这两个属性通常在MyBatis或类似的ORM框架中用于插入(INSERT)操作,当执行插入操作时,这些属性用于获取数据库自动生成的主键并将其赋值回对象的id属性。
在执行删除(DELETE)操作时,这些属性不适用。删除操作通常返回的是 ...
SQL必知必会-读书笔记(一)
SQL必知必会 - 读书笔记(一)何为数据库(DataBase)
保存有组织的数据的容器(通常是一个文件或者一组文件)
何为表(Table)
某种特定类型数据的结构化清单
使表成为唯一的,实际上是数据库名和表名的组合
何为行(Row)
表中的一个记录
有时人们提到行(Row)时也将其称为数据库记录(Record),这两个术语是互通的,但从技术上来讲,行才是正确术语
何为列(Column)
表中的一个字段。所有的表都是由一个或多个列组成的
Q:何为数据类型 ?
A:描述该列允许什么类型的数据
问题延申 - 数据类型兼容问题:
数据类型及名称是SQL不兼容的一个主要原因
虽然多数SQL都支持基本的数据类型,但是高级的数据类型却不互通
更糟的是,偶尔会有相同数据类型,但在DBMS里具有不同的名称
重要的是,我们要在创建表结构时记住这些差异
何为主键(primary key)
一列(或几列),其值能够唯一标识表中的每一行
关于主键:
任意两行都不具有相同的主键值
每一行都必须有主键值(Not NULL)
主键列不允许修改或更新
主键不能重用(如果某行从表中删除,它的主键 ...
上游市场与下沉市场
上游市场与下沉市场上游市场与下沉市场的概念、区别与联系一、概念
上游市场:
定义:上游市场指的是企业生产和供应链的前端,包括原材料供应、基础设施、设备制造等环节。它是产品从自然资源到成品的初始阶段。
特点:
资源密集型:上游市场主要涉及自然资源的开采和初加工,如矿产、石油、天然气、农产品等。
技术要求高:需要高度专业化的技术和设备,如石油钻探设备、矿山机械等。
资金密集型:上游行业通常需要大量的资本投入,进行资源勘探、开发和初加工。
典型行业:石油和天然气开采、矿产开采、农业、原材料加工等。
下沉市场:
定义:下沉市场指的是消费市场的更广泛的地区,尤其是那些在城市化进程中被忽视的二三线城市、乡镇和农村地区。它关注的是产品和服务的终端消费。
特点:
市场潜力大:随着经济的发展和消费升级,下沉市场的消费能力不断提升,具有巨大的增长潜力。
分布广泛:下沉市场分布在全国各地,地域广阔且人口基数大。
渠道多样化:下沉市场需要灵活的渠道策略,包括线上线下结合、电商平台、乡镇零售店等。
典型行业:快速消费品、家电、电子产品、服装、食品饮料等。
二、区别
产业链位置:
上游市场 ...
