自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 775

原创 Mybatis参数处理

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

2024-04-29 10:03:28 686

原创 Mybatis二级缓存

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

2024-04-24 10:04:53 1101

原创 MappedStatement解析流程

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

2024-04-24 09:09:22 618

原创 Mybatis之KeyGenerator

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

2024-04-18 13:42:22 661

原创 Mybatis之SqlNode&SqlSource

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

2024-04-18 09:43:54 1010

原创 Mybatis一级缓存

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

2024-04-08 14:02:03 955

原创 Mybatis执行器(Executor)

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

2024-04-08 13:26:02 1024

原创 Mybatis配置文件解析

每次MyBatis创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。如果想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现。目标 : 创建一个plugin,每次执行四个参数的query方法,打印传入的property内容。PS : 标签必须按顺序配置,可以不配置,但不能乱序。使用映射器接口实现类的完全限定类名。引入mapper方式。

2024-03-31 13:24:51 772

原创 Spring之循环依赖

依赖的相互引用,如下列的这种形式@Component@Autowired@Component@Autowired。

2024-03-31 10:01:54 871

原创 GROUP BY 是否支持返回非分组列

GROUP BY正常情况下只能返回分组列,或者聚合函数,那能不能返回非分组列呢?执行查询show variables like 'sql_mode',如果结果存在ONLY_FULL_GROUP_BY则不支持返回非分组的列。

2024-03-22 13:17:50 200

原创 @EnableConfigurationProperties注解使用

当我们想把配置的内容,动态赋值到某个配置类上的时候,可以使用@EnableConfigurationProperties + @ConfigurationProperties注解代码准备创建配置文件prop.propertiesname=adaage=18创建配置类创建启动类。

2024-03-21 14:07:44 504

原创 @Autowired和@Resource两个注解的异同点

在之前分别写了关于@Autowired和@Resource注解的两篇博文,这里我们总结一下两个注解的异同点。

2024-03-21 09:33:40 301

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

阅读这边文章之前我们先保持一个疑问 : @Resource注解真的是根据名称注入的么?

2024-03-20 13:16:27 1178

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

注意这里的metadata不是我们方法点进去的InjectionMetadata,而是AutowiredAnnotationBeanPostProcessor的内部类。Spring期望你在注入某些特定类型的bean时候,使用的是它预先设置的bean,而不是用户自定义的bean。方法的注入和属性的注入类似,主要还是doResolveDependency方法,这里就不再赘述。集合类依赖的处理过程我们不重点说明,因为其底层也是调用单体依赖的逻辑,主要演示其用法。创建一个类型为Foo的bean,并复用上文代码。

2024-03-20 09:12:42 1280

原创 Spring之@Value注解

Value注解在Spring的依赖注入中占据重要地位,这里对@Value注解的作用进行演示以及扩展。

2024-03-18 09:35:45 1120 1

原创 Spring之@Qualifier注解

作用于方法上、作用于类上等于给bean添加了一个alias,作用于属性上、作用于参数上时等于属性注入,然后属性注入的时候既可以使用beanName,也可以使用alias。作用于注解上比较特殊,如果作用于方法上、作用于类上时用了包装注解,作用于属性上、作用于参数上也必须使用包装注解,否则只能使用beanName,使用alias会报错。当我们注入的依赖存在多个候选者,我们得使用一些方法来筛选出唯一候选者,否则就会抛出异常。从源码中我们知道这个注解可以作用于属性、方法、参数、类、注解上面。

2024-03-18 09:00:52 938 1

原创 Spring之注入模型

之前我写过一篇关于BeanDefinition的文章,讲述了各个属性的作用,其中有一个属性我没有提到,因为这个属性比较重要,所以这里单独开一篇文章来说明上一篇博文链接Spring之BeanDefinition通过源码我们得出结论,注入类型有四种PS : 实际有五种,AUTOWIRE_AUTODETECT已过期,我们暂不讨论。

2024-03-12 08:43:56 1006 1

原创 Spring事务失效的几种场景

在上一篇博文中,我们对@Transactional源码进行了解析,这一篇我们来结合源码,分析一下我们面试、开发中经常遇到的事务失效问题。

2024-03-05 13:53:18 840

原创 Spring之@Transactional源码解析

我们在日常开发的时候经常会用到组合注解,比如:@EnableTransactionManagement + @Transactional、@EnableAsync + @Async、@EnableAspectJAutoProxy + @Aspect。今天我们就来抽丝剥茧,揭开@Transactional注解的神秘面纱BeanPostProcessor从本质上说,它也是一个bean,不过它优先实例化,然后作用于普通bean。

2024-03-05 13:27:05 1141

原创 Spring之AOP源码解析(下)

在上一遍文章中,我们主要讲解了ProxyFactory在Spring完成AOP动态代理的过程中发挥的作用。这一篇我们主要讲解这些注解都会如何注入Advisors,然后分析这些Advisors生效的条件希望我的理解能对大家有帮助,如果有什么理解错误的地方欢迎大家指正。

2024-02-23 10:51:17 1032 1

原创 Spring之AOP源码解析(中)

在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析ProxyFactory这个类在Spring完成AOP动态代理的过程中起到了重要的作用,具体如下所述决定Spring进行aop动态代理的方式(jdk动态代理或者cglib动态代理)可以设置监听器,监听动态代理对象可以决定是否提前暴露代理对象(属性exposeProxy=true则会提前暴露)

2024-02-20 08:51:52 1086

原创 Spring之AOP源码解析(上)

EnableTransactionManagement,@EnableAspectJAutoProxy,@EnableAsync注解都有可能产生AOP动态代理@EnableTransactionManagement,@EnableAspectJAutoProxy注解注入的bpp,都是依靠AbstractAutoProxyCreator这个类完成动态代理的。如果它们同时存在,Spring中只会存在一个优先级更高的bpp。这两个注解指定的参数是互补的,对于特定需求,可以进行扩展。

2024-02-20 08:51:03 1145

原创 Spring之@Conditional源码解析

Override@Override@Override@OverrideSpring对@Conditional注解的处理分成两个阶段@Conditional注解可以指定在那个阶段生效或者所有阶段都生效能否匹配上@Conditional注解,可以查阅具体@Conditional注解注入类的mathces方法(子类没有重新就查找其父类的matches方法)

2024-01-03 09:00:00 877 1

原创 @MapperScan源码解析

MapperScan以@Import为切入点的注入一个类型为MapperScannerConfigurer的BeanDefinitionMapperScannerConfigurer继承BeanDefinitionRegistryPostProcessor接口,在某个阶段执行postProcessBeanDefinitionRegistry方法。

2023-12-22 08:58:13 891

原创 Spring之FactoryBean

我们可以将FactoryBean看成Factory + Bean。首先它是一个Bean,和其他Bean一样,归Spring容器管理。同时它也是一个factory可以生产一个定制的Bean。transformedBeanName :将类似"&&&&beanName"的字符串转成"beanName"canonicalName :bean存在别名的说法,比如beanA的别名是beanB,beanB的别名是beanC,如果调用getBean("beanC")最终会获得beanA。

2023-12-15 23:46:13 1009

原创 Spring之推断构造方法

在之前的博文《Spring之BeanDefinition》讲述了BeanDefinition的用法,以及如何定制化属性,使bean按照我们期望的方式实例化。supplier构造器今天我们主要讲解Spring是如何推断出一个唯一的构造器方法,来实例化对象2.源码分析相关源码在AbstractAutowireCapableBeanFactory#createBeanInstance分成三个优先级第一优先级通过supplier实例化bean对象。

2023-12-15 08:43:39 982

原创 BeanDefinition之dependencyCheck

简单来说,就是检查相关属性是否都赋上值如果我们业务上需要某个bean的所有属性值是无缺失的,我们可以利用BeanFactoryPostProcessor修改BeanDefinition的dependencyCheck属性,让Spring在启动时就报错,避免上线产生问题。

2023-12-12 08:56:22 368 1

原创 Spring之@Lookup

如果类中存在@Lookup标注的方法,Spring在实例化bean的时候会进行动态代理,注册一个LookupOverrideMethodInterceptor拦截器。后期如果我们调用@Lookup标注的方法,就会进入拦截器的intercept方法,该ntercept方法通过beanFactory.getBean重新获取bean。

2023-12-07 13:50:33 889

原创 Spring之BeanDefinition

BeanDefinition相关属性的源码解析及如何使用

2023-12-07 08:51:54 1031

原创 @Import在Spring中的应用之@EnableAsync

在上一篇博文Spring之ConfigurationClassPostProcessor解析流程中,我们重点介绍了@Import注解。在这篇文章中,我们以@EnableAsync举例说明@Import在Spring中的应用1.点击@EnableAsync注解 查看@Import注入的类。

2023-12-03 23:17:01 387 1

原创 Spring之ConfigurationClassPostProcessor解析流程

Spring是如何解析@ComponentScan @ComponentScans @PropertySource @PropertySources @Import等注解以及相关接口 父类

2023-12-03 16:18:16 1208 1

原创 Spring之BeanPostProcessor

BeanPostProcessor是bean的后置处理器,会影响bean的一些行为甚至是替换原有的bean。了解BeanPostProcessor之前最好有对BeanFactoryPostProcessor有一些了解,不了解的小伙伴可以查看我的上篇博文Spring之BeanFactoryPostProcessor2.BeanPostProcessor是在什么时机注入到Spring中的。

2023-12-02 18:19:06 1576

原创 Spring之BeanFactoryPostProcessor

什么是BeanFactoryPostProcessor,并且举例说明BeanFactoryPostProcessor常用功能,以及BeanFactoryPostProcessor在源码中的执行顺序

2023-12-02 14:05:11 1134

原创 Spring之什么是配置类

我们可以看到Spring尝试根据beanName和args,从BeanFactory中获取结果,如果我们没有配置Scope,则bean默认是单例的,所以如果我们多次执行全配置类的@Bean标注的方法,返回的对象是同一个,我们来写点代码,简单证明一下。我们在开发的时候,经常写一些配置文件,形似MybatisConfig这样的配置文件,然后在类上标记@Configuration注解,同时会写一些方法@Bean标记方法,接下来我们来看一下Spring是怎么定义配置类的。,则称之为全配置类,如果bd含有属性。

2023-11-29 23:01:21 1076 1

原创 Spring之为什么标记了@Component的类会被扫描成bean

1.自定义注解2.创建一个普通的类,标注自定义的注解3.创建配置类4.运行main方法,查看运行结果我们看到,我们自定义的注解生效了,容器中存在myComponent的bean 第三步需要注意,如果我们不显示配置useDefaultFilters为false,则@Component等注解标记的类,也是会被解析成bean,如果显示的标记为false,只有自己自定义的Filter生效。

2023-11-29 16:15:22 1008

原创 JDK1.8常用api整理

jdk1.8处理一些常用需求的流式处理

2022-07-25 15:50:14 1520

空空如也

空空如也

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

TA关注的人

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