SQL必知必会-读书笔记(六)
SQL必知必会-读书笔记(六)LIKE 操作符
LIKE 只能用于搜索字符串
LIKE 可以使用通配符
LIKE 支持的通配符有:
‘%’ :任意数量任意字符
‘_’ :单一的任意字符
‘[JD]’ : ‘[…]’用于指定字符集
REGEXP 操作符REGEXP(也可以使用 RLIKE)用于更复杂的模式匹配,它支持正则表达式语法中的通配符:
**.**:表示任意单个字符。
1SELECT * FROM employees WHERE name REGEXP '^J.n$';
上述查询将返回名字是 “Jan”、”Jen”、”Jon” 等员工,但要求匹配的是完整的字符串。
**[ ]**:表示匹配括号内的任意字符。可以定义一个字符集或字符范围。
1SELECT * FROM employees WHERE name REGEXP '^[JH]en$';
上述查询将返回名字是 “Jen” 或 “Hen” 的员工。
**[^ ]**:表示匹配不在括号内的任意字符。
1SELECT * FROM employees WHERE nam ...
SQL必知必会-读书笔记(五)
SQL必知必会-读书笔记(五)AND 与 OR 执行顺序
和C语言等一众编程语言没有什么不同,在没有 ‘(‘ 和 ‘)‘ 时,SQL执行时也是先执行 AND 后执行 OR
IN 操作符为什么使用 IN 操作符
合法选项较多时,IN操作符更加清楚直观
IN 一般比 OR 执行得更快
IN 最大的优点是 IN 内部可以是一个子查询
NOT 操作符
NOT 操作符用于否定(取反)某一个查询条件
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)操作时,这些属性不适用。删除操作通常返回的是 ...
