【Spring注解驱动开发】后篇
声明式事务环境搭建
导入相关依赖
数据源
数据库驱动
spring-jdbc模块
配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)
123456789101112131415161718192021222324@EnableTransactionManagement //开启基于注解的事务管理功能@ComponentScan("com.wxs.tx")@Configurationpublic class TxConfig { //配置数据源 @Bean public DataSource dataSource() throws PropertyVetoException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setUser("root"); dataSource.setPassword("abc123aa ...
【Spring注解驱动开发】中篇
AOP面向切面编程在程序运行过程中将某段代码切入到指定方法/指定位置运行的编程方式
==底层:动态代理==
功能测试
导入aop模块:spring-aspects
定义一个业务逻辑类(MathCalculator),要求在业务逻辑种进行日志打印(方法运行之前、方法运行之后、出现异常……)
定义一个日志切面类(LogAspect),里面的方法需要动态感知 MathCalculator.div 运行到哪里并打印相关信息
通知方法:
前置通知( @Before ):LogStart
后置通知( @After ):LogEnd
返回通知( @AfterReturning ):LogReturn
异常通知( @AfterThrowing ):LogException
环绕通知( @Around ):动态代理,手动推进目标方法运行( joinPoint.proceed() )
给日志切面类标注通知注解
将 业务逻辑类 和 日志切面类 都加入到容器中
告诉Spring哪个类是切面类:给切面类上加注解@Aspect
在配置类上加注解: ...
【SpringBoot整合】缓存篇
基本环境搭建
导入数据库文件
创建JavaBean封装数据
整合Mybatis操作数据库
配置数据源
1234567spring.datasource.url=jdbc:mysql://localhost:3306/spring_cachespring.datasource.username=rootspring.datasource.password=abc123aaspring.datasource.data-username=com.mysql.jdbc.Driver#开启驼峰命名匹配规则mybatis.configuration.map-underscore-to-camel-case=true
使用注解版的Mybatis
123456789101112131415@Mapperpublic interface EmployeeMapper { @Select("SELECT * FROM employee WHERE id = #{id}") public Employee getEmpById ...
【MySQL回顾】索引篇
索引简介什么是索引索引是一种用于快速查询和检索数据的数据结构。
常见的索引结构有:
B+树
Hash
索引就相当于是我们所使用字典的目录,我们可以通过目录轻松找到想要查找的字词的位置。
索引的优缺点
优点:
可以通过减少检索的数据量来大大加快检索速度
可以通过创建唯一性索引保证数据库中每一行数据的唯一性
缺点:
创建索引和维护索引需要耗费许多时间
占用物理内存
B+树索引和Hash索引B树、B+树扫盲
B树
基本原理:
二叉查找树的升级版,改二叉为多叉,每个节点存储更多的指针信息,以降低I/O操作数(解决了当数据量十分庞大时平衡二叉树深度过深的问题)
在搜索B树时,很明显,访问节点(即读取磁盘)的次数与树的高度呈正比
B+树
B+树是B树的一种变形,它更适合实际应用中操作系统的文件索引和数据库索引
B+树的叶子节点有一条引用链指向与它相邻的叶子节点
B树和B+树的比较:
B树
B+树
子树的个数总比关键字个数多1个
关键字的个数与其子树的个数相同
所有节点既存放 键(key) 也存放 数据(data)
只有叶 ...
【MySQL回顾】基础操作篇
快速回顾
语句
语法
AND / OR
SELECT column_name(s) FROM table_name WHERE condition AND|OR condition
ALTER TABLE (add column)
ALTER TABLE table_name ADD column_name datatype
ALTER TABLE (drop column)
ALTER TABLE table_name DROP COLUMN column_name
AS (alias for column)
SELECT column_name AS column_alias FROM table_name
AS (alias for table)
SELECT column_name FROM table_name AS table_alias
BETWEEN
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
CREATE ...
【MySQL回顾】事务篇
什么是事务事务是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
事务是逻辑上的一组操作,要么都执行,要么都不执行。
事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。
MySQL 事务主要用于处理操作量大,复杂度高的数据。
比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
事务的特性一般来说,事务是必须满足4个条件(ACID):
原子性(Atomicity):
事务是最小的执行单位,不允许分割
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没 ...
【MyBatisPlus】
概述为什么学学习每门新技术之前我们都需要先问自己一个问题: 学它干嘛?!
MyBatisPlus是在MyBatis基础上进行了一系列的简化操作,可以节省我们大量的工作时间,自动化完成所有的CRUD操作(可以偷懒不写SQL语句)。
同类型框架:JPA、th-mapper
在了解了为什么要学习它之后我们开始正式的学习之旅~~~
先去官网康一康(好习惯!):https://mp.baomidou.com/
简介
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 Ac ...
【JUC并发编程】
什么是JUC线程是 Java 中浓墨重彩的一笔。
JUC 就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。
这里列举两个之前学习 Java基础 用到过的两个接口:
基础概念线程和进程
进程:一个程序的一次动态执行过程,.exe
线程:进程可细分的最小单位,一个进程往往可以包含多个线程
Java 默认有几个线程?
2 个 !
main线程
GC线程
对于Java有哪几种开启线程的方式?
Thread
Runnable
Callable
Java真的可以开启线程嘛?
并不行,需要使用 public native void start0() 方法来调用本地方法使用其他语言开启线程
12345678910111213141516171819202122public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.a ...
【JavaScript快速入门】
1.什么是JavaScript2.快速入门2.1 引入JavaScript2.2 基本语法2.3 数据类型变量==依旧不能用数字开头==
1234var A;var $a;var _a;var 英雄联盟 = "不屈黑铁";
number与Java基本一致,不区分整型浮点型
若要判断两个浮点型是否相等:Math.abs(a - b) < 0.00001
字符串123//单双引号都可'abc'"abc"
布尔值
true
false
逻辑运算符
&&
||
!
比较运算符(重要!)1234567a > b;a < b;a >= b;a <= b;a = b; //赋值a == b; //等于(数值相同,类型不同,也是true)a === b; //绝对等于(数值相同,类型不同,结果是false)
数组用中括号表示
1var num = [1,2,3,4,5,6];
对象用大括号表示
123456//Person person = ...
【Docker】
Dock概述常用地址
官网地址:https://www.docker.com/
文档地址:https://docs.docker.com/ 炒鸡详细!!
仓库地址:https://hub.docker.com/ 类似于Github
为什么会出现Docker一款产品要经过开发、测试、上线等过程,在不同的阶段可能会使用不同的环境、不同的应用配置。
故经常会有人发出这样的疑问:我这电脑上运行都整挺好的,怎么到你这就拉跨了呢?!
这就关系到环境配置问题了,环境配置十分麻烦,得一个机器一个机器配置、部署,费时费力。
一般一个项目成型后要打成一个 jar包 ,环境得自己配,这时候docker就出现了
docker 把 [ jar包、Redis、Mysql、jdk、ES、……] (项目 + 环境)打包在一起,就可以解决这样的问题了。
docker核心思想:隔离!
docker通过隔离机制,可以将服务器利用到极致!
Docker能干嘛
传统的虚拟机技术
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
缺点:
资源占 ...