自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 手写Mybatis源码(原来真的很简单!!!)

主要分两部分,项目使用端:平常写代码所说的后台服务;持久层框架:即项目使用端引入的jar包类名定义角色定位分工协作Resources资源辅助类负责读取配置文件转化为输入流数据库资源类负责存储数据库连接信息SQL与结果集资源类负责存储SQL映射定义、存储结果集映射定义会话工厂构建者负责解析配置文件,创建会话工厂SqlSessionFactory会话工厂负责创建会话SqlSessionSqlSession会话指派执行器ExecutorExecutor执行器。

2022-10-25 23:40:00 3621

原创 Hutool工具包-常用开发工具类(让代码更简洁)

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块

2023-02-03 16:25:59 6

原创 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网

如果需要让 200 台主机在同一个网段内,可以分配一个 C类网段,比如192.168.1.0/24。如果需要让 500 台主机在同一个网段内,那就分配一个 B类网段,比如191.100.0.0/16。C类子网划分:192.168.0.0/24。IPv6 版本,128bit(16字节)合并为192.168.0.0/22 网段。IPv4 版本,32bit(4字节)如何尽量避免浪费IP地址资源?下列两台计算机可以正常通信吗?不同系统MAC地址格式。为什么要进行子网划分?6字节(48bit)

2023-01-02 14:47:10 522

原创 网络协议(一):基本概念、计算机之间的连接方式

Packet Tracer网络软件模拟。

2023-01-01 17:13:53 496 1

原创 MyBatis-Plus(实用篇)

Wrapper:条件构造抽象类,最顶端父类AbstractWrapper:用于查询条件封装,生成sql的where条件QueryWrapper:查询条件封装UpdateWrapper:update条件封装AbstractLambdaWrapper:使用Lambda语法LambdaQueryWrapper:用于Lambda语法使用的查询WrapperLambdaUpdateWrapper:用于Lambda语法更新封装WrapperUserMapper中定义接口方法。

2022-12-22 23:41:47 595

原创 java基础细节巩固(持续更新)

为了10和20可以使用相同的分支。相同包路径或子类可以使用。i++简化版本的由来。++i简化版本的由来。

2022-12-09 18:25:34 449

原创 Mybatis源码解析(十):一级缓存和二级缓存

Mybatis源码解析(六):缓存执行器操作流程-此篇讲了一级缓存和二级缓存的数据类型HashMap,key的组成部分以及一二级缓存与查询数据库的顺序本篇讲解下一级缓存和二级缓存的作用范围、执行流程底层实现原理作用范围一级缓存放在执行器里,每次创建sqlSession都会创建执行器,所以一级缓存的作用范围在sqlSession里。

2022-12-09 18:24:46 573

原创 Mybatis源码解析(九):插件机制

Mybatis源码系列文章手写源码(了解源码整体流程及重要组件)Mybatis源码解析(一):环境搭建Mybatis源码解析(二):全局配置文件的解析Mybatis源码解析(三):映射配置文件的解析Mybatis源码解析(四):sql语句及#{}、${}的解析Mybatis源码解析(五):SqlSession会话的创建Mybatis源码解析(六):缓存执行器操作流程Mybatis源码解析(六):查询数据库主流程Mybatis源码解析(七):Mapper代理原理Mybatis源码解析(八):插件机制@Si

2022-12-03 21:36:39 414

原创 Mybatis源码解析(八):Mapper代理原理

文章主要围绕着如下几个点,展开源码解析:是如何进行解析的?是如何生成的代理对象?是怎么完成的增删改查操作?标签配置的包名下的Mapper接口文件都会被加载成对应的代理类工厂通过Mapper接口获取同包同名的xml文件,并解析Mapper接口通过jdk代理创建代理类,接口方法匹配xml中标签的id值,执行增删改查。

2022-12-02 22:55:49 475

原创 Mybatis源码解析(七):查询数据库主流程

上个文章讲到了查询入口,先查二级缓存,再查一级缓存,最后才会查询数据库本篇文章围绕mybatis如何封装底层jdbc的查询操作之后的源码对照的下图结合看,在源码中都能看到相同的代码Mybatis查询数据库的流程就是jdbc底层流程的封装,jdbc每一步都会能在mybatis封装的对象中找到对应的步骤mybatis为了扩展性强,几乎所有流程组件都是接口,然后不同的实现类,做不同的操作(先创建xxx处理器,再通过xxx处理器创建x1、x2、x3)

2022-11-26 23:37:39 447

原创 Mybatis源码解析(六):缓存执行器操作流程

之前篇章讲了配置文件的解析与SqlSession的创建,可以说都是在为执行增删改查操作主流程做铺垫接下来让我们进入SqlSession的selectOne实现方法一级缓存和二级缓存就是一个Map集合对象:key:Cache对象(statementId、分页参数、带?的sql、参数值、环境id)value:数据库查询结果一级缓存默认开启,二级缓存需要添加 标签开启都开启情况下:先从二级缓存获取,没有则从一级缓存获取,还没有则查询数据库(查询结果后先添加到一级缓存,再添加到二级缓存)

2022-11-19 22:27:58 488

原创 Mybatis源码解析(五):SqlSession会话的创建

之前篇幅讲解核心配置文件和实体映射配置文件的解析,当这两者都准备就绪,则需如下第三步创建sql会话对象,为之后执行sql流程做准备本文内容也只围绕openSession方法源码来说基础执行器,封装了子类的公共方法,包括一级缓存、延迟加载、回滚、关闭等功能简单执行器,每执行一条 sql,都会打开一个 Statement,执行完成后关闭(默认执行器)

2022-11-13 22:53:01 357

原创 Mybatis源码解析(四):sql语句及#{}、${}的解析

本文主要讲解标签内将sql语句替换#{}和${}为?、并保存下来属性值、入参对象(字符串|对象|Map)组装成BoundSql,后续执行JDBC操作需要的值从此对象中获取承接上一篇文章Mybatis源码解析(三):映射配置文件的解析,映射配置文件会解析成MappedStatement对象,而BoundSql只是其中一部分本文的核心就是创建BoundSql对象,后续需要带?

2022-11-12 23:22:14 195

原创 Mybatis源码解析(三):映射配置文件的解析

Mybatis框架中有两种类型xml文件,核心配置文件以及实体类映射配置文件映射配置文件的路径在核心配置的标签中配置(这样就可以只解析一个核心配置文件即可)从本系列Mybatis源码解析(二):全局配置文件的解析第四章节可知,解析标签的子标签即使解析映射配置文件映射配置文件的解析是全局配置文件解析的一部分,本篇内容只是将其单独拎出来了。

2022-11-09 22:21:50 368

原创 Mybatis源码解析(二):全局配置文件的解析

Mybatis入口从加载配置文件→输入流→Document对象→XNode对象从创建XMLConfigBuilder→Configuration→解析核心xml填充Configuration对象。

2022-11-01 23:49:42 130

原创 Mybatis源码解析(一):环境搭建

mybatis源码地址(有注释):源码目录介绍。

2022-10-30 00:36:13 278

原创 Spring之AOP动态代理

代理类,继承目标类,目标类的子类。

2022-10-20 17:50:06 195

原创 Spring之Bean的初始化和销毁

代码】Spring之Bean的初始化和销毁。

2022-08-05 21:22:40 86

原创 Spring之Aware接口

Aware 接口用于注入一些与容器相关信息。

2022-08-05 21:05:45 166 1

原创 Spring之BeanFactoryPostProcessor(bean工厂后置处理器)

bean工厂后置处理器核心接口在bean调用构造函数,init方法,bean后处理器执行之前执行主要用来对bean定义做一些改变log . debug("BeanFactoryPostProcessor-->bean工厂后置处理器>>>>>>> bean定义之后,实例化之前执行");} } } }BeanFactoryPostProcessor工厂后置处理器子接口。...

2022-08-04 23:24:25 221

原创 Spring之BeanPostProcessor(bean后置处理器)

启动类:添加扫描bean输出结果:2、常用的bean后置处理器接口2.1、初始化-Bean后置处理器BeanPostProcessor是bean后置处理器最底层接口两个方法返回的bean会替换原来的bean初始化阶段在实例化和属性填充之后初始化之前执行:解析注解@PostConstruct、@ConfigurationProperties初始化之后执行:代理增强自定义初始化后置处理器2.2、实例化-Bean后置处理器BeanPostProcessor的扩展接口(子接口)

2022-08-03 22:33:06 270

原创 Spring之BeanFactory 与 ApplicationContext 的区别

BeanFactory接口Spring的核心容器,ApplicationContext的父接口表面上只有getBean,实际上控制反转、基本的依赖注入、直至Bean的生命周期的各种功能,都由它的实现类提供ApplicationContext接口主要的ApplicationContext实现都【组合】了它的功能,【组合】是指ApplicationContext的一个重要成员变量就是BeanFactoryApplicationContext新增扩展功能。.........

2022-07-27 20:32:05 138

原创 SpringBoot之bean的多种加载方式

}}}使用AnnotationConfigApplicationContext对象加载MyConfig即使MyConfig类什么注解没有,也会被注册为bean。

2022-07-14 23:25:38 1027

原创 SpringBoot之配置文件

application.yml(主流格式)application.yamlyml格式和yaml格式除了文件名后缀不一样,格式完全一样临时属性的加载优先级要高于配置文件的idea中Program arguments对应的位置就是添加临时属性的输出结果:2、配置文件优先级优先级从高到低,高优先级的配置覆盖低优先级配置使用场景方式一:****使用临时属性设置配置文件路径或类路径,全路径名4、yml格式文件大小写敏感使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(

2022-07-10 23:11:41 260

原创 SpringBoot之parent、starter、引导类、内嵌tomcat

使用parent可以帮助开发者进行版本的统一管理打开后可以查阅到其中又继承了一个坐标这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性第二组是各式各样的的依赖坐标信息,可以看出依赖坐标定义中没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值第二组依赖坐标是在依赖管理标签内,则表示只是引入申明,只有在子pom中使用(不用写版本号)依赖才会导入,所有即使...

2022-07-09 21:36:42 208

原创 Maven基础学习(新)

1)数学中的坐标使用 x、y、z 三个『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』2)Maven中的坐标使用三个『向量』在『Maven的仓库』中唯一的定位到一个『jar』包和 Java 类一样,POM 之间其实也是单继承的。如果我们给一个 POM 指定了父 POM,那么继承关系如下图所示:在 POM 的继承关系中,子 POM 可以覆盖父 POM 中的配置如果子 POM 没有覆盖,那么父 POM 中的配置将会被继承按照这个规则,继承关系中的所有 POM 叠加到一起,就得到了一

2022-07-06 17:06:36 66

原创 java日志框架之Logback和Log4j2

依赖导包日志级别:trace < debug < info < warn < error默认的日志级别是debug输出结果:logback默认输出格式在resources下面,创建一份配置文件,命名为logback.xml输出结果:执行两次查看文件输出内容:logback.xml26日,27日分别执行一次,文件拆分输出结果:当前日志为roll_bogback.log,当日志文件超过100k或者切换日期则会压缩成日期格式gzlogback.xml输出结果:additi

2022-06-27 21:46:53 374

原创 java日志框架之JCL和SLF4J

jcl依赖导包如果没有任何第三方日志框架的时候,我们使用的就是JUL如果有log4j,优先使用log4j1)只导入commons-logging的输出结果:2)添加依赖和log4j.properties文件后的额输出结果:2、SLF4J2.1、日志门面概述门面模式(Facade Pattern),也称之为外观模式核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用更简单的说,就是对外提供的接口要尽可能的简单在不同日志框架和应用程序之间架设

2022-06-25 00:00:31 234

原创 java日志框架之Log4j

日志输出格式说明:可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:Log4j提供了8个级别的日志输出输出结果: 由结果可知默认级别为debugLoader.getResource(“log4j.properties”);源码默认从类路径找输出结果:4.2、输出到文件输出结果:创建表结构:(字段的制定可以根据需求进行调整)输出结果:覆盖文件的策略是,按照时间来进行覆盖,原则就是保留新的,覆盖旧的输出结果:第一次执行:第二次执行:根据修改时间可看出所有的日志已经

2022-06-22 23:35:33 207

原创 java日志框架之JUL(Logging)

输出结果:4、Logger日志级别日志级别源码类:java.util.logging.Level两个特殊级别原理分析输出结果:由输出结果可知,默认的输出级别为info输出结果:用户使用Logger来进行日志的记录,Logger可以持有多个处理器Handler日志的记录使用的是Logger,日志的输出使用的是Handler可以输出到控制台也可以输出到文件,也可以两者兼备4、Logger之间的父子关系JUL中Logger之间是存在"父子"关系的,这种父子关系不是我们普遍认

2022-06-20 23:05:07 336

原创 Cookie和Session区别及原理

首次访问,只有响应中存在Cookie,请求中没有访问路径(http://localhost:8080/cookie/test/getCookie)由资源路径(http://localhost:8080/cookie/test/)与资源名称(getCookie)构成默认绑定的资源路径这里绑定的路径的就是域名+路径相同资源路径不同资源名称访问即使404空指针也会携带Cookie,因为资源路径(http://localhost:8080/cookie/test/)一致首次访问,响应中可以看的Cookie

2022-06-19 17:48:56 79

原创 Linux系统基础(一篇搞定基本应用)

文章目录1、Linux 文件与目录结构2、VI/VIM编辑器1、Linux 文件与目录结构linux系统中一切皆文件目录结构目录结构简介/bin:存放最经常使用的命令(快捷方式,真正存储在/usr/bin)/sbin:存放的是系统管理员使用的系统管理程序/home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账户命名的/root:该目录为系统管理员,也称为超级权限者的用户主目录/lib:系统开机所需要基本的动态连接共享库,其作用类似于W

2022-06-05 22:30:52 308

原创 JDK8日期API解析

文章目录1、java.time包下基本类使用1.1、now方法在日期时间类的使用1.2、年月日类1.3、of方法自定义日期时间类的应用1.4、LocalDateTime添加时区信息1.5、Month枚举类2、对日期时间的加减2.1、LocalDate日期的加减2.2、LocalTime时间的加减2.3、with方法修改LocalDateTime类时间3、调节器TemporalAdjuster3.1、TemporalAdjusters类中常用静态方法的使用3.2、DayOfWeek的使用4、java8时间类与

2022-05-28 23:31:49 135

原创 Maven基础配置学习(旧)

文章目录1、Maven基础概念2、依赖管理3、生命周期与插件4、聚合5、继承6、属性7、版本管理8、资源配置9、多环境开发配置10、私服1、Maven基础概念坐标Maven中的坐标用于描述仓库中资源的位置groupId:定义当前Maven项目隶属组织名称(通常是域名反写)artifactId:定义当前Maven项目名称(通常是模块名称)version:定义当前版本packaging:定义该项目的打包方式仓库Maven默认连接的远程仓库位置在setting文件中配置阿里云镜像

2022-04-17 18:38:31 241

原创 MySql基础之触发器

文章目录1、触发器概述2、触发器的创建3、查看、删除触发器1、触发器概述MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。触发器是由 事件来触发 某个操作,这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。2、触发器的创建创建触发器语法CREATE TRIGGER 触发器名称 {BEFORE|AFTER

2022-04-12 18:29:01 537

原创 MySql基础之存储过程与函数

文章目录1、存储过程1.1、概述1.2、创建存储过程1、存储过程1.1、概述含义: 存储过程的英文是 Stored Procedure 。它的思想很简单,就是一组经过预先编译的SQL语句的封装。执行过程: 存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。分类存储过程的参数类型可以是IN、OUT和INOUT。根据这点分类如下:没有参数(无参数无返回)仅仅带 IN 类型(有参

2022-04-12 17:55:18 92

原创 MySql基础之视图

文章目录1、常见的数据库对象2、视图概述3、创建视图4、查看视图5、更新视图的数据6.、修改、删除视图1、常见的数据库对象2、视图概述视图是一种虚拟表,本身是 不具有数据的,占用很少的内存空间,它是 SQL 中的一个重要概念。视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。视图的创建和删除只影响视图本身,不影响对应的基表。向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句可以基于视图创建视图3、创建视图CREATE VIEW 视

2022-04-10 22:00:56 708

原创 MySql基础之约束

文章目录1、约束概述2、非空约束3、唯一性约束4、主键约束5、自增列6、外键约束7、CHECK 约束8、DEFAULT约束1、约束概述什么是约束可以在创建表时规定约束(通过 CREATE TABLE 语句)或者在表创建之后通过 ALTER TABLE 语句规定约束约束的分类根据约束数据列的限制,约束可分为:  1)单列约束:每个约束只约束一列  2)多列约束:每个约束可约束多列数据根据约束的作用范围,约束可分为:  1)列级约束:只能作用在一个列上,跟在列的定义后面

2022-04-10 19:54:04 60

原创 MySql基础之数据类型精讲

文章目录1、MySQL中的数据类型2、整数类型2.1、类型介绍2.2、可选属性3、浮点类型3.1 类型介绍3.2 数据精度说明4、定点类型5、位类型:BIT6、日期与时间类型6.1 YEAR类型6.2 DATE类型6.3 TIME类型6.4 DATETIME类型6.5 TIMESTAMP类型7. 文本字符串类型7.1 CHAR与VARCHAR类型1、MySQL中的数据类型常见数据类型的属性,如下:2、整数类型2.1、类型介绍整数类型一共有 5 种,包括 TINYINT、SMALLINT、MED

2022-04-06 22:43:18 101

原创 MySql基础之DML-数据操纵语言(CRUD)

文章目录1、插入数据2、更新数据3、删除数据4、MySQL8新特性:计算列1、插入数据方式1:VALUES的方式添加为表的所有字段按默认顺序插入数据INSERT INTO 表名 VALUES (value1,value2,....);举例:INSERT INTO departments VALUES (70, 'Pub', 100, 1700);值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。为表的指定字段插入数据INSERT INT

2022-04-05 16:21:11 54

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除