• Home
  • Articles
    • 日志
    • 妍小言
    • 舒小书
    • 浩然说
    • 生活日记
  • All Tags

spring jpa扩展改造

20 Feb 2019

Reading time ~1 minute

改造的目标,是能够通过配置中心统一对SQL进行管理,并且支持利用模版语言依据传参进行简单的逻辑判断,生成不同的SQL。

改造范围

  1. 目前仅对@Query注解进行改造。
  2. 仅支持nativeSQL,不支持使用HQL。

改造流程

  1. 对@Query改造,增加通过配置中心查询SQL脚本的属性。
  2. 对JpaQueryMethod改造,JpaQueryMethod是对具体的查询方法属性的封装,比如判断是否添加了@Query注解,是否是Native Query,获取Query String,获取JpaParameters等。
    • 对JpaQueryMethod的改造,主要是添加Query String的生成逻辑,使其能够通过配置中心获取SQL脚本。
  3. JpaQueryLookupStrategy和JpaQueryFactory,是JpaQuery的查询和生成类,对其的改造很直接,则是在JpaQueryLookupStrategy解析JpaQuery的最后,添加一段JpaQueryFactory尝试通过配置中心方式生成对应JpaQuery的代码。
  4. 定义新的JpaQuery,比如我基于NativeJpaQuery扩展的AutoJpaQuery,定义好需要的Query生成逻辑,这里需要使用相应的模版语言对SQL脚本进行解析,并且,可能需要依据需要定义一下ParameterBinder的生成逻辑,因为默认情况下,是依据查询SQL来生成ParameterBinder的,如果一开始只能获取到SQL脚本,可能导致生成ParameterBinder失败,就需要对ParameterBinder生成方式进行修改。
  5. ParameterBinder改造,因为默认情况下SQL中的参数和方法传参是一一对应的,如果无法保证对应,比如我这种情况,就需要修改ParameterBinder的bing逻辑,对不匹配的参数直接舍弃。

当然,改造完成之后,不要忘记跑一边原来的单元测试,并且添加新功能的单元测试。



spring jpa