mysql-基础
SQLMysql Sql通用语法
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释:
单行注释: –注释内容 或 # 注释内容(MySQL特有)
多行注释: /*注释内容 */
Sql语句分类
DDLDDL主要用来操作数据库,表,字段。
DDL-数据库操作
查询
查询所有数据库
12345-- 查询所有数据库show databases;-- 查询当前数据库select database();
创建数据库
123CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则];-- 创建案例create database if not exists db default char set 'utf8mb4' COLLATE 'utf8mb4_general_ci'
删除数据库
1drop database ...
RabbitMq文档
安装rabbit mq可以参考
docker安装RabbitMq | 小云
从Hello World开始导入相关依赖1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>
创建生产者
RabbitMq中的channel指的是什么?信道是生产消费者与rabbit通信的渠道,生产者publish或者消费者消费一个队列都是需要通过信道来通信的。信道是建立在TCP上面的虚拟链接,也就是RabbitMq在一个TCP上面建立成百上千的信道来达到多个线程处理。为什么RabbitMQ 需要信道,如果直接进行TCP通信呢?
TCP的创建开销很大,创建需要三次握手,销毁需要四次握手。如果不使用信道,那么引用程序就会使用TCP方式进行连接到RabbitMQ,因为MQ可能每秒会进行成千上万的链接。总之就是TCP消耗资源,TCP链接可以 ...
GIT回退代码
GIT回退代码内容概要:介绍git restore; git reset; git revert 的用法以及常见场景下回退代码的方式。也会简单介绍一些git的基础知识。
正文:1、git restore
git restore file1: 针对暂存区的文件file1,将它回退到工作区,且撤销其修改。就是把你git add之后的文件变成add之前,同时你的修改会丢失
git restore --staged file1:针对暂存区的文件 file1,回退到工作区,但是保留修改。把你git add之后的文件变成add之前,但是你的修改会保留
备注:工作区:就是你本地的代码,未使用git add操作的文件所在位置。
暂存区:你使用git add添加之后的文件所在位置
2、git reset
git reset commitId --soft:回退当前代码仓库到指定提交commitId,当前HEAD和commitId之间的修改会保留,这些修改会在暂存区。就是保留了add的状态
git reset commitId --hard:回退当前代码仓库的代码到指定commitId,这之间的代码会 ...
docker安装RabbitMq
执行命令1234# 拉取docker镜像docker pull rabbitmq:management# 创建文件夹mkdir -p /home/rabbitmq
创建容器1docker run -id --name=rabbitmq -v /home/rabbitmq:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:management
查看启动日志,确保容器正常启动1docker logs -f rabbitmq
访问RabbitMQ管理页面在浏览器中访问 http://<你的服务器地址>:15672,使用之前设置的用户名和密码(admin 和 admin)登录,即可访问 RabbitMQ 的管理界面。
配置说明
15672端口:RabbitMQ 的管理页面端口。
5672端口:RabbitMQ 的消息接收端口。
RABBITMQ_DEFAULT_USER 环境变量:指定 Rab ...
Java日期API
JDK8之前的日期、时间Date代表日期和时间
代码案例12345678910111213141516171819public static void main(String[] args) { // 创建一个Date对象,代表当前时间 Date date = new Date(); System.out.println(date); // 获取当前时间的毫秒值 long time = date.getTime(); System.out.println(time); // 创建一个Date对象,指定该对象代表的时间 time += 3 * 1000; Date date2 = new Date(time); System.out.println(date2); // 通过setTime指定Date对象的时间 Date date3 = new Date(); date3.setTime(time); System.out.println(date3);}
代码运行的结果如下
...
BigDecimal类-解决浮点数计算精度问题
BigDecimal在开发过程中,我们会遇到一些需要严格要求浮点数计算精度的场景。此时,使用float,double等类型是满足不了需求的。案例如下:
1234567public static void main(String[] args) { double a = 0.1; double b = 0.2; double c = a + b; System.out.println(c);}
这段代码会返回0.3吗?
我们可以看到运算的结果并不精确。
此时我们就需要使用BigDecimal来解决这种问题。
构造器
我们可以看到有些构造器,接收的是一个double类型的参数。这个地方需要特别注意,我们不应该使用这些构造器。使用这些构造器仍然会有可能造成精度问题。
JDK的描述:参数类型为double的构造方法的结果具有一定的不可预知性。有人可能会认为在Java中写入new BigDecimal(0.1),所创建的BigDecimal正好等于0.1,但是它实际上等于0.10000000000000000555111512312578270 ...
Java Runtime类
Runtime类
代表程序运行环境
Runtime是一个单例类
查看源码可以看到,Runtime的构造器是私有的。并且有一个Runtime类型的静态成员变量currentRuntime,提供了一个getRuntime的静态函数返回了这个对象。
Runtime的常用方法12345678910111213141516171819202122232425public static void main(String[] args) throws IOException, InterruptedException { // 获取Runtime对象 Runtime rt = Runtime.getRuntime(); // 终止当前的虚拟机 // rt.exit(0); // 获取虚拟机能够使用的CPU数 int count = rt.availableProcessors(); System.out.println(count); // 获取java虚拟机中的总内存数量 long total = rt.totalMemory( ...
合并pdf生成书签
合并多个pdf为一个总的pdf,并生成书签最近做了一个需求,需要将用户上传的多个pdf文件,合并成成一个pdf文件,生成书签。
采用了开源的pdfbox库,写了一个demo如下
1.引入pom依赖12345678910111213<!-- pdf box --><dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.27</version></dependency><!-- 使用该依赖处理json --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version></ ...
mybatis-plus
大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。
因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是MybatisPlus.
官方网站如下:
当然,MybatisPlus不仅仅可以简化单表操作,而且还对Mybatis的功能有很多的增强。可以让我们的开发更加的简单,高效。
通过今天的学习,我们要达成下面的目标:
能利用MybatisPlus实现基本的CRUD
会使用条件构建造器构建查询和更新语句
会使用MybatisPlus中的常用注解
会使用MybatisPlus处理枚举、JSON类型字段
会使用MybatisPlus实现分页
1.快速入门为了方便测试,我们先创建一个新的项目,并准备一些基础数据。
1.1.环境准备复制课前资料提供好的一个项目到你的工作空间(不要包含空格和特殊字符):
然后用你的IDEA工具打开,项目结构如下:
注意配置一下项目的JDK版本为JDK11。首先点击项目结构设置:
在弹窗中配置JDK:
接下来,要导入两张表,在课 ...
微服务保护与分布式事务
在微服务远程调用的过程中,还存在几个问题需要解决。
首先是业务健壮性问题:
例如在之前的查询购物车列表业务中,购物车服务需要查询最新的商品信息,与购物车数据做对比,提醒用户。大家设想一下,如果商品服务查询时发生故障,查询购物车列表在调用商品服 务时,是不是也会异常?从而导致购物车查询失败。但从业务角度来说,为了提升用户体验,即便是商品查询失败,购物车列表也应该正确展示出来,哪怕是不包含最新的商品信息。
还有级联失败问题:
还是查询购物车的业务,假如商品服务业务并发较高,占用过多Tomcat连接。可能会导致商品服务的所有接口响应时间增加,延迟变高,甚至是长时间阻塞直至查询失败。
此时查询购物车业务需要查询并等待商品查询结果,从而导致查询购物车列表业务的响应时间也变长,甚至也阻塞直至无法访问。而此时如果查询购物车的请求较多,可能导致购物车服务的Tomcat连接占用较多,所有接口的响应时间都会增加,整个服务性能很差, 甚至不可用。
依次类推,整个微服务群中与购物车服务、商品服务等有调用关系的服务可能都会出现问题,最终导致整个集群不可用。
这就是级联失败问题,或者叫雪崩问题。
1.微服务保 ...