SpringBoot整合Liquibase对数据库管理和迁移 Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。本文主要介绍SpringBoot与Liquibase的集成。
Mybatis一级缓存,二级缓存探讨上篇 从输出中可以看出2次查询都访问了db,并且两次查询的结果是不一样的,两个集合也不相等,插入数据让缓存失效是可以理解的,插入操作可能会改变数据库中的数据,所以如果再从缓存中去获取,可能获取到的数据和db中的数据不一致的情况,mybatis为了避免这种情况,在执行插入操作的时候,会将SqlSession中的一级缓存清空。同一个SqlSession中查询同样的数据,mybatis默认会从一级缓存中获取,如果缓存中没有,才会访问db,那么我们如何去情况一级缓存呢,强制让查询去访问db呢?
Mybatis延迟加载、鉴别器、继承 4张表:t_user(用户表)t_goods(商品表)t_order(订单表)t_order_detail(订单明细表)表之间的关系:t_order和t_user是一对一的关系,一条订单关联一个用户记录t_order和t_order_detail是一对多关系,每个订单中可能包含多个子订单,每个子订单对应一个商品。
Mybatis入门篇,带你感受一下mybatis独特的魅力! 准备数据库mysql中运行下面脚本:我们的需求:对t_user表,我们有以下这些需求:实现一个通用的插入操作:支持动态插入,可以根据传入的字段的值,动态生成所需要的各种insert语句批量插入功能实现一个通用的更新操作:支持动态更新操作,可以根据传入的字段,动态生成所需要的各种update语句实现一个通用的查询操作:支持各种组合条件查询、支撑排序、分页、支持返回列的控制等各种复杂的查询需求引入mybatis依赖:子项目为:创建mybatis相关文件user.xmlchat01/src/mai
Mybatis类型处理器,这个你得会玩! id int AUTO_INCREMENT PRIMARY KEY COMMENT '用户id',name VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用户名',age SMALLINT NOT NULL DEFAULT 1 COMMENT '年龄',sex SMALLINT DEFAULT 0 COMMENT '性别,0:未知,1:男,2:女') COMMENT '用户表';
JVM调优(jdk8)与垃圾回收器详解 负载屏障的目标是在指针加载时插入一个处理逻辑。在压缩阶段,如果指针指向将要被移动的对象的区域,指针指向的对象将被移动,然后纠正指针。如果你要创建一个大于这个大小的对象,比如一个超大的数组,或者是别的啥东西,此时就直接把这个大对象放到老年代里去,压根不会经过年轻代,有一个JVM参数,就是“-XX:PretenureSizeThreshold”,可以把它的值设置为字节数,比如“1048576”字节,就是1MB。在这个阶段,ZGC会遍历堆中的所有活动对象,并将它们移动到新的位置,以便将未使用的内存空间紧凑起来。
JVM出现OOM错误排查 对应线程出现的OOM错误,其实分好几类:堆内存溢出、栈溢出、方法区溢出,下面我们要区分两个概念内存泄漏是指GC垃圾回收的速度跟不上内存消耗的速度,造成OOM的情况内存溢出是指程序员在申请内存时,没有足够的内存空间供其用,OutOfMemoryError。
Forest入门和使用 ForestForest是一个开源的Java HTTP客户端框架,它能够将 HTTP 的所有请求信息(包括URL、Header以及Body等信息)绑定到您自定义的Interface方法上,能够通过调用本地接口方法的方式发送HTTP请求,类似于的openFeign框架。创建一个interface,比如命名为MyClient,并创建一个接口方法名为,用@Get注解修饰之。
java设计模式之监听者模式 继承了 AbstractEvent 类/*** @description: 用户注册事件*/@Getter发送优惠券/*** @description: 注册成功后发优惠券*/@OverrideSystem.out.println(event.getUsername() + "注册成功,赠送优惠券。。。。。");发短信/*** @description: 注册成功后发短信*/@Override。
Java内存模型和Java内存区域的区别和联系 Java作为—种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构Java内存模型和Java对象模型这三者的概念及其间的区别。甚至我见过有些面试官自己也搞的不是太清楚。不信的话,你去网上搜索Java内存模型,还会有很多文章的内容其实介绍的是JVM内存结构。
三方接口调用设计方案 API密钥生成:为每个三方应用生成唯一的API密钥对(AK/SK),其中AK用于标识应用SK用于进行签名和加密。AK:Access Key Id,用于标示用户。SK:Secret Access Key,是用户用于加密认证字符串和用来验证认证字符串的密钥,其中SK必须保密。通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。接口鉴权:在进行接口调用时,客户端需要使用AK和请求参数生成签名,并将其放入请求头或参数中以进行身份验证。
AQS-源码解析实现原理 AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent 包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 AQS 的实现原理至关重要,AQS 也是面试中区分侯选人的常见考点,我们务必要掌握,本文将用循序渐近地介绍 AQS,相
数据库设计的六大范式 最近在看数据库设计伦理,顺便里来理清一下数据库设计的六大范式。首先我们来了解几个概念。例如,对于表3中的数据,找不到任何一条记录,它们的学号相同而对应的姓名不同。所以我们可以说姓名函数依赖于学号,写作 学号 → 姓名。但是反过来,因为可能出现同名的学生,所以有可能不同的两条学生记录,它们在姓名上的值相同,但对应的学号不同,所以我们不能说学号函数依赖于姓名。例如 学号 F→ 姓名,(学号,课名) F→ 分数例如 (学号,课名) P→ 姓名。
事务的原理、MVCC的原理 所谓的MVCC指的就是在使用READ COMMITED 和 REPEATABLE READ这两种隔离级别的事务在执行select操作时,访问记录版本链的过程,这样可以使不同事务的读-写操作并发执行,从而提升系统性能。事务完全的串行会严重的降低系统的吞吐量和资源利用率,仔细发现,引发事务一致性问题的根本原因在于多个事务访问了相同的数据,更合理的做法是,在某个事务访问某个数据时,对其他想要访问该数据的事务进行限制,当该事务提交后,其他事务才能继续访问这个数据。**两者的根本区别在于幻读关注的是。
MySql用户相关操作,管理员的必备技能 通过命令的方式操作用户和权限不需要刷新,下次登录自动生效通过操作mysql库中表的方式修改、用户信息,需要调用flush privileges;刷新一下,下次登录自动生效mysql识别用户身份的方式是:用户名+主机本文中讲到的一些指令中带主机的,主机都可以省略,默认值为%,表示所有机器mysql中用户和权限的信息在库名为mysql的库中。
MySQL索引原理及分析 联合索引页也是二级索引,他和普通索引类似,唯一的区别是目录页和数据页存储的key是联合索引的key,假设是为a,b两个字段做联合索引,则在构建索引的时候,会先按照a排序,如果a有相同的就按照b排序,这就是最左匹配原则的道理,因为b的排序是乱的,所以使用b不会走索引。目录页面的记录类型有个不一样,他的索引项的记录类型是1,而且索引项的内部结构是指向一个页面的指针,页面可以是数据页面,也可以是其他页面。为了避免索引失效,需要仔细设计数据库表结构,合理创建索引,并确保查询语句能够充分利用索引。
mysql培训笔记 内核参数调优 sysctl -a 打印系统参数,使用sysctl -w 设置值,也可以直接写入sysctl.conf文件,不过生效sysctl -p。innodb 修复 innodb_force_recovery=0。mysql自带估计分析慢查询日志,mysqldumpslow。分表:单表数据量过大,查询瓶颈。硬件层,系统层,软件层,应用层,架构层。在内存足够情况下,减少swap分区使用。分区: 数据放在不同的磁盘上,磁盘瓶颈。监控可视化zabbix。2,分库,分表,分区。
windows安装mysql8 3,mysqld --initialize-insecure 无密码 或者mysqld --initialize-insecure --user=mysql。7,修改密码 alter user ‘root’@‘localhost’ identified by ‘123456’1.2,解压后,在目录里面可以没有my.ini,这个时候我们需要自己建一个,文件内容如下,可以根据需要更改。1,解压包,一般需要下载最新版本,选择版本我们之间下载就好。5,无密码等 mysql -u root -p。