自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring之@Bean注解

当注入的依赖存在多个候选者,如果候选者的 autowireCandidate 属性为 false,则不加入候选。指定 beanName ,未指定则为方法名。

2024-08-20 13:12:41 801

原创 Spring之@ComponentScan注解

2.1.2 创建配置类 AppConfig2.1.3 创建启动类 Main2.1.4 工程文件结构内置 14 个PS:其中有一个自定义的 bean(AppConfig),这里就当它是内置的2.2.2.2 运行 Main 方法,查看运行结果一共 15 个 beans = 内置(14) + p1(1)2.2.3.2 运行 Main 方法,查看运行结果一共 17 个 beans = 内置(14) + p1(1) + p2(1) + p3(1)beanName 生成器

2024-08-14 15:41:59 1011

原创 Spring之@Import注解

Import 注解 在 Spring 中占据重要地位,是 Spring 的一个重要扩展点。这篇博文我们以案例、源码、应用相结合,来系统的学习一下这个注解。

2024-08-13 14:23:47 957

原创 SpringBoot 自定义 starter

starter 最令人津津乐道的就是其自动配置特性,我们自定义一个 starter,演示一下该功能。我的上一篇博文,分析了SpringBoot 的自动配置原理,有兴趣的小伙伴可以移步阅读。

2024-08-12 09:25:35 883

原创 SpringBoot 自动配置原理

默认情况下,待加载的自动配置类,满足相应 filters 的 (OnBeanCondition、OnClassCondition、OnWebApplicationCondition)match 方法就可以被加载。如果 2.2.2.2.4 配置的相关 Class 存在,且 2.2.2.2.2 (getCandidateConfigurations)获取的自动配置类不存在,则抛出异常。DeferredImportSelector 的处理滞后于普通配置类 (一般会依赖普通配置类的解析结果,所以解析时机靠后 )

2024-08-12 09:23:27 886

原创 SpringBoot之外部化配置

SpringBoot 版本 2.6.13,相关链接。

2024-08-05 14:36:42 707

原创 SpringBoot 集成原生 Servlet、Filter、Listener

,当我们配置了原生的 servlet ,web 容器中就存在两个 Servlet,web 容器根据最佳匹配原则,映射到指定的 Servlet 上。继承 RegistrationBean ,RegistrationBean 的 getOrder 方法返回值是。通过响应我们可以知道,选择的是 DispatcherServlet(返回的是一个字符串)通过响应我们可以知道,选择的是 MyServlet(返回的是一个 html),对于同样继承 RegistrationBean 的。将方式1类上的相关注解(

2024-08-05 14:33:28 774

原创 SpringBoot集成Tomcat、DispatcherServlet

AbstractApplicationContext 的 refresh 方法是一个空壳方法,我们主要看它的实现类 ServletWebServerApplicationContext。

2024-07-24 13:08:50 1358 1

原创 我的创作纪念日(2周年)

曾经听到这样一段话,学习是一个输入和输出的过程,自己很认可这段话,但是一直没有付诸行动,直到两年前尝试写了第一篇博文,写的不太好,也没有多少阅读量,感觉花的时间和收获不成正比,就又放弃了。我是个很懒的人,一些知识点觉得自己应该会了,但是写博客我觉得应该抱着谨慎的态度,然后就会硬着头皮自己先写一些demo,在写demo的过程中加深了我的印象,也能发现一些细节问题。

2024-07-24 11:42:28 127

原创 SpringBoot之全局异常处理

会定义两个bean,其中一个 beanName 为 error,类型为 View,另一个 beanName 为 beanNameViewResolver,类型为 BeanNameViewResolver。PS:错误码需要和 html 名字一致,或者将 html 改成 4xx、5xx,这样以 4 开头的错误码就会跳转到 4xx.html,以 5 开头的错误码就会跳转到 5xx.html。根据一定的规则,在 Postman 中默认转发到 error 方法,在浏览器中默认转发到 errorHtml 方法。

2024-07-18 16:10:00 1095

原创 SpringBoot之拦截器(Interceptor)

在使用 SpringBoot 进行 javaEE 的开发过程中,如果希望添加拦截器,一般会实现 HandlerInterceptor 接口,然后通过 SpringBoot 的机制,将拦截器作用于指定方法上@Overridethrow new RuntimeException("自定义异常");

2024-07-18 13:42:41 1153

原创 @RequestPart 与 @RequestBody、@RequestParam 注解的异同点

RequestPart 注解是我们在JavaEE 开发中,比较常见的一个注解。它经常会与 @RequestBody 、@RequestParam 注解进行比较,这篇博文我们以案例和源码相结合,分析这几个注解的异同点。

2024-07-10 13:55:37 1300

原创 @RequestBody注解的使用及源码解析

RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 @RequestBody 注解@Data@Override'}';

2024-07-10 10:16:44 950

原创 @RequestMapping属性详解及案例演示

请求路径如果类和方法上都存在 @RequestMapping 注解,请求路径类上配置的path方法上配置的path。

2024-07-02 14:41:57 916

原创 SpringBoot之内容协商

默认情况下,只有,因为我们在现象演示的时候,将属性设置为 true,所以多出来一个。如果 ParameterContentNegotiationStrategy 的 resolveMediaTypes 方法的返回值不为 null 且不为。

2024-07-02 13:09:46 1252

原创 @PathVariable注解的使用及源码解析

PathVariable 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解@PathVariable 注解。

2024-06-27 10:34:53 1054

原创 @RequestParam注解的使用及源码解析

RequestParam 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解@RequestParam 注解。

2024-06-27 10:21:33 1880

原创 SpringBoot之HiddenHttpMethodFilter

默认情况下,表单只能发送GET、POST请求,如果需要发送PUT、DELETE请求呢?SpringBoot通过解决了这一问题。URI 和具体方法的映射关系,都存储在这个属性中SpringBoot之请求映射原理如果存在自定义的 HiddenHttpMethodFilter,则默认的 HiddenHttpMethodFilter 失效。

2024-06-12 09:59:28 1060

原创 SpringBoot之请求映射原理

我们发出的请求,SpringMVC是如何精准定位到那个Controller以及具体方法?其实这都是 HandlerMapping 发挥的作用,这篇博文我们以 RequestMappingHandlerMapping 为例并结合源码一步步进行分析。默认 HandlerMapping 主要定义在和其祖父类中获取所有类型是 Object 的 beans,并且 beanName 不以开头根据 beanName 获取 beanType如果 beanType 上存在注解则进行处理。

2024-06-12 09:38:27 1361

原创 SpringBoot之静态资源

我们在开发的过程中,可能会使用拦截器拦截(放行)指定路径的资源,所以需要指定前缀自定义静态资源访问前缀为/res/**spring:mvc:演示静态资源的访问访问路径 http://localhost:8080/b.jpeg加上自定义前缀/res/**访问路径 http://localhost:8080/res/b.jpeg自定义静态资源访问前缀会导致默认静态资源形式的欢迎页功能失效spring:mvc:web:resources:访问路径。

2024-06-05 09:57:46 997

原创 阅读 Spring(SpringBoot)源码的一些实用技巧

我们在阅读Spring(SpringBoot)源码的时候,有可能会被一下前置知识点卡住,影响继续阅读的动力。根据我对Spring的理解,整理一些实用的技巧,减少大家的阅读障碍。如果有什么不正确的地方欢迎大家指正、补充。

2024-06-05 09:24:55 1013

原创 SpringBoot之@AutoConfigureBefore、@AutoConfigureAfter、@AutoConfigureOrder注解

SpringBoot通过@AutoConfigureOrder、@AutoConfigureBefore、@AutoConfigureAfter注解,控制自动配置类的实例化顺序。

2024-05-28 15:54:47 1516

原创 @EnableConfigurationProperties源码解析

EnableConfigurationProperties注解使用。

2024-05-28 15:40:55 906

原创 Mybatis之@MapKey

演示返回单行、多行数据,使用@MapKey和不使用@MapKey注解的区别,然后通过源码解析产生各种结果的原因。

2024-05-21 09:25:53 1835

原创 Mybatis之returnInstanceForEmptyRow、callSettersOnNulls

指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。当返回行的所有列都是空时,MyBatis默认返回 null。请注意,它也适用于嵌套的结果集(如集合或关联)。方法, foundValues被设置为true。(未指定构造方法,使用的默认构造方法)方法, foundValues被设置为true。(未指定构造方法,使用的默认构造方法),并将foundValues值设置为true。

2024-05-21 09:03:18 1125

原创 Mybatis源码解析之结果集处理

先演示一个有代表性的查询,然后对照源码逐步分析、扩展。

2024-05-17 14:38:10 928

原创 Mybatis自定义RowBounds、ResultHandler

我们使用Mybatis的时候,一些参数基本上都是用的默认值。这篇博文我们一起来探究一下,如何自定义RowBounds、ResultHandler以及相关源码解析一共查出来三条数据,mybstis也处理了三条数据创建接口方法创建测试方法@Test// 获取sqlSession// 获取mapper执行测试方法一共查出来三条数据,mybstis仅处理俩条数据PS : 如果方法有多个参数类型为RowBounds,则抛出异常创建接口方法创建测试方法@Test// 获取sqlSession。

2024-05-17 10:34:31 902

原创 Mybatis之ResultMap

select语句查询得到的结果集是一张二维表,水平方向上看是一个个字段,垂直方向上看是一条条记录。而Java是面向对象的程序设计语言,对象是根据类定义创建的,类之间的引用关系可以认为是嵌套的结构。在JDBC编程中,为了将结果集中的数据映射成对象,我们需要自己写代码从结果集中获取数据,然后封装成对应的对象并设置对象之间的关系,而这些都是大量的重复性代码。

2024-05-10 14:07:14 1134

原创 Mybatis懒加载

延迟加载”的含义是 : 暂时不用的对象不会真正载入到内存中,直到真正需要使用对象时,才去执行数据库查询操作,将该对象加载到内存中。在 MyBatis 中,如果一个对象的某个属性需要延迟加载,那么在映射该属性时,会为该属性创建相应的代理对象并返回。当真正要使用延迟加载的属性时,会通过代理对象执行数据库加载操作,得到真正的数据。

2024-05-10 09:17:10 897

原创 Mybatis日志模块

良好的日志在一个软件中占了非常重要的地位,日志是开发与运维管理之间的桥梁。日志可以帮助运维人员和管理人员快速查找系统的故障和瓶颈,也可以帮助开发人员与运维人员沟通,更好地完成开发和运维任务。但日志的信息量会随着软件运行时间不断变多,所以需要定期汇总和清理,避免影响服务器的正常运行。在 Java 开发中常用的日志框架有 Log4j、Log4j2、Apache Commons Log、java.util.logging、slf4j等,这些工具对外的接口不尽相同。

2024-05-04 09:27:11 987

原创 Mybatis四种实例化对象方式

创建ConstructorMapper.xml创建实体类Employee 创建ConstructorMapper.java创建测试类ConstructorTest 1.使用默认构造方法默认情况下,mybatis通过默认构造方法,实例化对象如果select指定了resultMap,且resultMap存在constructor标签,则mybatis就根据constructor标签指定的构造器进行实例化 PS : 如果测试方法报错,需要在maven文件中添

2024-05-01 13:57:38 474

原创 虚拟机字节码指令表

复制栈顶一个(对于long或double类型)或两个(对于非long或 double 类型的)数值并将复制值压入栈顶。比较栈顶两double 型数值的大小,并将结果(1、0或-1)压人栈顶;当其中一个数值为“NaN”时,将-1压入栈顶。比较栈顶两float型数值的大小,并将结果(1、0或-1)压入栈顶;比较栈顶两double型数值的大小,并将结果(1、0或-1)压入栈顶;比较栈顶两float型数值的大小,并将结果(1、0或-1)压入栈顶;比较栈顶两long 型数值的大小,并将结果(1、0或-1)压入栈顶。

2024-05-01 10:01:32 293

原创 Mybatis分页插件PageHelper

我们还可以自定义count查询,比如上文中的使用案例1(listAllEmployee),如果我们自定义了一个id为listAllEmployee_COUNT的查询,则最终将使用我们自定义的查询。1.如果reasonable的默认值被设置为true,且构建出的page的reasonable属性为null,page对象有一次优化分页的机会。注解来对可以增强的方法进行描述,将能进行方法增强的method,放入一个signatureMap,后续符合条件的method,则执行intercept方法。

2024-04-29 13:44:28 919

原创 Mybatis参数处理

如果xml中存在占位符"#{param}",并且convertArgsToSqlCommandParam方法的返回值中,不存在一个name为param的key(返回值为paramMap)或 一个name为param的属性(返回值为实体类),则在增删改操作的sql填充或者查询操作创建cacheKey的过程中抛出异常。ParamNameResolver的构造方法会判断存不存在@Param注解,如果存在,则使用自定义的value值,否则就通过getActualParamName方法返回name。

2024-04-29 10:03:28 1155

原创 Mybatis二级缓存

阻塞的情况下,如果一个sqlSession获取指定cacheKey的二级缓存为null时,在其实时查询数据、填充缓存之前,如果有其他sqlSession也尝试获取该cacheKey的二级缓存,则该sqlSession将处于blocking状态,直到上一个sqlSession将缓存填充完毕。开启二级缓存后,并不是所有的查询结果立刻放入二级缓存,而是将其放入暂存区,等执行commit方法后,才会将暂存区的数据put到二级缓存中。属性可以被设置为任意的正整数,设置的值应该是一个以毫秒为单位的合理时间量。

2024-04-24 10:04:53 1182

原创 MappedStatement解析流程

之前写了一篇博文,介绍了mybatis的解析过程,其中mapper标签只演示了如何使用,这篇博文我们来探究mapper标签解析流程。

2024-04-24 09:09:22 716

原创 Mybatis之KeyGenerator

默认情况下,insert语句并不会返回自动生成的主键,而是返回插入记录的条数。如果业务逻辑需要获取插入记录时产生的自增主键,则可以使用Mybatis提供的KeyGenerator接口。不同的数据库产品对应的主键生成策略不一样,例如,Oracle、DB2等数据库产品是通过 sequence 实现自增 id 的,在执行insert语句之前必须明确指定主键的值;而MySQL、Postgresql等数据库在执行insert 语句时,可以不指定主键,在插入过程中由数据库自动生成自增主键。

2024-04-18 13:42:22 766

原创 Mybatis之SqlNode&SqlSource

apply()是SqlNode 接口中定义的唯一方法,该方法会根据用户传入的实参, 参数解析该SqlNode所记录的动态SQL节点,并调用DynamicContext.appendSql()方法将解析后的SQL片段追加到DynamicContext.sqlBuilder中保存。SqlNode的解析流程,主要是由XMLScriptBuilder这个类来完成的,其构造方法会调用initNodeHandlerMap这个方法,这个方法会注册很多handler,即不同的标签将会由不同的handler处理。

2024-04-18 09:43:54 1103

原创 Mybatis一级缓存

在常见的应用系统中,数据库是比较珍贵的资源,很容易成为整个系统的瓶颈。在设计和护系统时,会进行多方面的权衡,并且利用多种优化手段,减少对数据库的直接访问。使用缓存是一种比较有效的优化手段,使用缓存可以减少应用系统与数据库的网络交互、减少数据库访问次数、降低数据库的负担、降低重复创建和销毁对象等一系列开销,从而提高整个系统的性能。从另一方面来看,当数据库意外宕机时,缓存中保存的数据可以继续支持应用程序中的部分展示的功能,提高系统的可用性。

2024-04-08 14:02:03 980

原创 Mybatis执行器(Executor)

Executor是MyBatis的核心接口之一,其中定义了数据库操作的基本方法。在实际应用中经常涉及的SqlSession接口的功能,都是基于Executor接口实现的。

2024-04-08 13:26:02 1452

空空如也

空空如也

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

TA关注的人

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