SpringBoot基础原理
优先级(低→高)
application.yaml (忽略)
application.yml
application.properties
java系统属性(-Dxxx=xxx)
命令行参数(- -xxx=xxx)
获取Bean
默认情况下,Spring项目启动时,会把bean都创建好放在IOC容器中,如果想要主动获取这些bean,可以通过如下方式:
根据name获取bean:object getBean (String name)
根据类型获取bean: T getBean(ClasscrequiredType)
根据name获取bean(带类型转换): T getBean(String name,Class requiredType)
上述所说的【Spring项目启动时,会把其中的bean都创建好】还会受到作用域及延迟初始化影响,这里主要针对于默认的单例非延迟加载的bean而言。
Bean的作用域
作用域
说明
singleton
容器内同名称的bean只有一个实例(单例)(默认)
prototype
每次使用该 bean时会创建新的实例(非单例)
...
Mybatis基础入门
MybatisMyBatis是一款优秀的持久层框架,==用于简化JDBC的开发。==
JDBCJDBC:(Java DataBase Connectivity),就是使用ava语言操作关系型数据库的一套API。
sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
各个数据库厂商去实现这套接口,提供数据库驱动jar包。
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
import java.sql.*;import java.util.ArrayList;import java.util.List;@SpringBootTest //springboot整合单元测试的注解class SpringbootMybatisQuickstartApplicationTests { @Autowired private UserMapper userMapper; @Test public void testListUser(){ List<User> userList = user ...
VIM基础教程
1、vim 三种基本的工作模式vim有三种基本的工作模式,分别为:命令模式、末行模式、编辑模式。关于这三种工作模式的介绍,请见下文。
1.1、命令模式使用vim打开文件之后,首先进入命令模式,它是vim编辑器的入口模式。在命令模式下,通过使用命令对文件进行常规的编辑操作,例如:复制、粘贴、删除、定位、翻页等等。
1.2、末行模式末行模式是vim编辑器的出口,要退出vim,必须要在末行模式下。在末行模式下,执行退出文件、保存并退出文件等操作。
1.3、编辑模式正常的编辑文字模式。
2、三种模式的切换操作(1)vim打开一个文件进入的就是命令模式,另外两种模式需要回到命令模式才能进入彼此。
(2)在命令模式中按下i,I,o,O,a,A,r,R任何一个字母后进入编辑模式,进入编辑模式后,下方会出现INSERT或者REPLACE字样,按Esc键退出编辑模式,回到命令模式。
(3)在命令模式中按下:,/,?中任意一个即可进入末行模式,末行模式可以对文档或者vim环境进行操作,例如查找、读取、存盘、替换、离开、显示行号等。
3、各种模式切换普通模式 - - NORMAL - - ———> ...
MySQL11-InnoDB引擎02-事务原理
详细的描述了MySQL中的InnoDB引擎的事务原理。
事务回顾事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
特性
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态。
隔离性(lsolation)∶数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务原理
redolog(一致性)
重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log file) ,前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。
undolog(原子性)
回滚日志,用 ...
MySQL10-锁
详细的描述了MySQL中的锁。
概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
全局锁全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。==其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性==
flush tables with read lock; -- 加全局锁
mysqldump [-h192.168.xxx.xxx] -uroot -p123456 databasename > D:/xxx.sql //数据备份 访问远程加 -h
unlock table; -- 释放锁
==数据库中加全局锁,是一个比较重的操作,存在以下问题:==
如果在主库上备份,那么在备份 ...
MySQL11-InnoDB引擎01-架构
详细的描述了MySQL中的InnoDB引擎的架构。
逻辑存储结构
架构总架构
内存结构缓冲池
更改缓冲区
自适应哈希
日志缓冲区
磁盘结构系统表空间与单个表文件空间
通用表空间与撤销表空间与临时表空间
双写缓冲区与重做日志
后台线程
MySQL09-视图
详细的描述了MySQL中的视图。
视图的简介视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作在创建这条SQL查询语句上。
视图的语法创建CREATE [OR REPLACE] VIEW 视图名称 [(列名列表)] AS SELECT 语句[WITH[CASCADED|LOCAL] CHECK OPTION ]
查询SHOW CREATE VIEW 视图名称; --查看创建视图语句SELECT * FROM 视图名称.......; --查看视图数据
修改-- 方式一CREATE [OR REPLACE] VIEW 视图名称(列名列表)] AS SELECT语句 [WITH[CASCADED|LOCAL] CHECK OPTION]-- 方式二ALTER VIEW 视图名称(列名列表)] AS SELECT语句 [WITH[CASCADED|LOCAL] CHECK OPTION]
删除DROP VI ...
MySQL07-存储函数
详细的描述了MySQL中的存储函数。
存储函数存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。
语法CREATE FUNCTION 存储函数名称([参数列表])RETURNS type [characteristic ...]BEGIN --SQL语句 RETURN ...;END;characteristic说明: + DETERMINISTIC:相同的输入参数总是产生相同的结果 + NO SQL:不包含SQL语句。 + READS SQL DATA:包含读取数据的语句,但不包含写入数据的语句。
样例-- 存储函数-- 计算从1到n的累加create function fun1(n int)returns int deterministic begin declare total int default 0; while n > 0 do set total := total + n; set n := n - 1; end while; return total;end;select fun1(100);
注 ...
MySQL08-触发器
详细的描述了MySQL中的触发器。
触发器简介简介触发器是与表有关的数据库对象,指在 insert / update / delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。
现在触发器还只支持行级触发(影响几行触发几次)
现在触发器不支持语句级触发(执行一条语句触发一次)
触发器类型
NEW 和 OLD
INSERT触发器
NEW表示将要或者已经新增的数据
UPDATE型触发器
OLD表示修改之前的数据,NEW表示将要或已经修改后的数据
DELETE型触发器
OLD表示将要或者已经删除的数据
语法创建CREATE TRIGGER trigger_nameBEFORE/AFTER INSERT/UPDATE/DELETEON tbl_name FOR EACH ROW --行级触发器BEGIN trigger_stmt;END;
查看SHOW TRI ...
MySQL06-存储过程
详细的描述了MySQL中的存储过程。
存储过程介绍简介
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。
特点
封装,复用
可以接收参数,也可以返回数据
减少网络交互,效率提升
存储过程语法创建CREATE PROCEDURE 存储过程名称([参数列表])BEGIN ...SQL语句END;
调用CALL 名称([参数]);
查看SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUINE_SQHEMA = 'xxx'; --查询指定数据库的存储过程及状态信息
SHOW CREATE PROCEDURE 存储过程名称; --查询某个存储过程的定义
删除DROP PROCEDURE [IF EXISTS] 存储过程名称;
注意注意:在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语 ...