0%

MyBatis允许我们在其执行过程中对特定的一些方法进行拦截代理,实现一些特定的通用功能,如分页插件或者租户插件,允许进行拦截的类及对应方法基本如下

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)
阅读全文 »

我们平时在使用关系数据库存储数据时,在某种情况下可能会有使用字符串类的字段来存储json格式的数据,然后在代码里面进行解析处理等,这样比较方便扩展,但是在使用数据进行分析等场景下就会很不方便,这时候就需要对json进行一些解析的操作,这次主要看下如何使用Hive来解析json格式的数据

阅读全文 »

有时候我们需要对于同一个类的两个实例对象进行一下数据内容的比对,找出他们的差异,比如用来做单测或者同一份数据多版本的内容比对,这里主要介绍使用apache的commons-lang3的工具类来进行功能实现

阅读全文 »

JSON目前是使用的比较多的一种数据格式,前后端的交互就是都是使用JSON格式,后端存储的时候就算使用MySQL,有时候也会存在使用字符串等类型字段存储JSON数据(现在MySQL也支持了JSON类型字段并提供相关的语法)

JSONPath比较适合使用在一些结构不确定,或者比较灵活的场景下,从json中获取想要的数据

  1. 有一些变更频繁的扩展类的非核心数据,可以直接当做一个json字符串进行存储,在获取的数据可以通过配置的JsonPath来从其中进行取值使用
  2. 在做类似网关等场景下,可以通过配置JsonPath完成数据的转换,当然如果转换逻辑特别复杂时可能还是模版引擎更合适一些
阅读全文 »

Spring Expression Language(SpEL) 是一个表达式语言,可以用来在运行时查询和操作对象图,比较类似于EL表达式,相比其他的表达式语言,可以更好的与Spring集成,如果使用Spring的话,也可以不用再引入额外的依赖

同时它也是可以单独引入并且使用的,这里我们主要就是看一下单独使用的情况下它能做什么以及如何使用

首先需要引入依赖包

1
2
3
4
5
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.12</version>
</dependency>
阅读全文 »

我们在使用Spring开发的时候,可能有的时候不小心就会写出来循环依赖,但是大部分情况下都能正常运行,不需要我们特别关注,这是因为Spring进行了相关的处理等

循环依赖的处理还依赖于bean的作用范围,bean的注入方式等,这里我们就以单例模式,属性注入的方式来分析一下Spring对于循环依赖的处理

阅读全文 »

写代码我们都知道要抽象,要封装变化,要实现开闭原则,比如对于很多相似的功能,我们可以将通用的功能抽象出来,然后把变化的不同的地方提取出去,比如模版模式、策略模式等都是实现类似的效果

比如对于策略模式,我们通常是定义一个接口,然后有不同的实现,这种是可以的,但是如果通用流程中要扩展的点较多的话,这些不同的实现也需要管理,可以把他们合并到一个单独的包中,再进一步,我们甚至可以将包单独提取出来,支持运行时加载包实现新增功能的支持

JDK对此功能的支持就是 SPI,但是它的限制较多,也不够灵活,比如dubbo就是自己定义了一套SPI的实现,这次我们来看另一个实现,pf4j 提供一套在基本框架中定义扩展点接口,然后通过不同的插件来实现扩展点的功能,来支持对新增开放对修改关闭

这次我们就来学习一下它的使用

阅读全文 »