改造的目标,是能够通过配置中心统一对SQL进行管理,并且支持利用模版语言依据传参进行简单的逻辑判断,生成不同的SQL。
改造范围
- 目前仅对
@Query
注解进行改造。 - 仅支持
native
SQL,不支持使用HQL
。
改造流程
- 对
@Query
改造,增加通过配置中心查询SQL脚本的属性。 - 对
JpaQueryMethod
改造,JpaQueryMethod
是对具体的查询方法属性的封装,比如判断是否添加了@Query
注解,是否是Native Query
,获取Query String
,获取JpaParameters
等。- 对
JpaQueryMethod
的改造,主要是添加Query String
的生成逻辑,使其能够通过配置中心获取SQL脚本。
- 对
-
JpaQueryLookupStrategy
和JpaQueryFactory
,是JpaQuery
的查询和生成类,对其的改造很直接,则是在JpaQueryLookupStrategy
解析JpaQuery
的最后,添加一段JpaQueryFactory
尝试通过配置中心方式生成对应JpaQuery
的代码。 - 定义新的
JpaQuery
,比如我基于NativeJpaQuery
扩展的AutoJpaQuery
,定义好需要的Query
生成逻辑,这里需要使用相应的模版语言对SQL脚本进行解析,并且,可能需要依据需要定义一下ParameterBinder
的生成逻辑,因为默认情况下,是依据查询SQL来生成ParameterBinder
的,如果一开始只能获取到SQL脚本,可能导致生成ParameterBinder
失败,就需要对ParameterBinder
生成方式进行修改。 -
ParameterBinder
改造,因为默认情况下SQL中的参数和方法传参是一一对应的,如果无法保证对应,比如我这种情况,就需要修改ParameterBinder
的bing逻辑,对不匹配的参数直接舍弃。
当然,改造完成之后,不要忘记跑一边原来的单元测试,并且添加新功能的单元测试。