Spring Data Framework 的扩展或使用模板脚手架,这是一种二次开发工具。按照本模板可以简单的套取模板中的文件,开发自己的Spring Data 框架。本案例旨在用于学习和交流,不能用于实际生产。
简要描述如何应用Spring数据模板来开发自己的Spring Data框架。
首先,需要创建有意义的工程名,也就是当前SpringData框架的名称。例如:要创建一个缓存的SpringData框架,就取名 spring-data-cache。如果要创建一个redis的SpringData,那就取名 spring-data-redis。
创建合适的package 这个顶级的 pkg, 例如,用 spring-data-cache框架为例,那么package 应该为 org.springframework.data.cache,最后结束的是框架的名称。
Package和实现类介绍一般情况在顶级 package 下面是实现 spring-data 的主要核心包,它们一般都会有:
Query、Repository、Entity、Config的注解类
Query 查询注解,可以在repo的接口方法中配置该注解,完成自定义的条件查询CountQuery 继承 Query 完成 count 查询Model 实体模型注解,注解后可以读取实体注解中的信息,方便持久化操作Setting 实体模型注解,如 当前实体的配置路径Field 实体模型属性注解,可以对属性进行映射操作Score 实体属性注解,属性额外的配置信息SpringData的配置基类、Entity扫描类等
AbstractTemplateConfiguration 模板配置基类,一些通用的配置信息可以优先配置在其中TemplateEntityClassScanner 扫描 Repository 中使用的 EntityClass,在AbstractTemplateConfiguration.getInitialEntitySet 方法中依赖该类TemplateNamespaceHandler 命名空间的配置注入,可以不需要repository 底层业务增删改查操作的实现
repository交互的时候,进行对象字段类型转换
DateTimeConverter 日期时间和字符串的转换,还可以有其他类的转换实现MappingTemplateConverter 映射转换器,完成底层和实体之间的映射转换TemplateConverter 映射转换器接口定义TemplatePersistentEntity 持久化实体对象接口,可以定义一些持久化实体的额外必要的信息,方便在实现 repository 的时候使用TemplatePersistentProperty 持久化实体对象属性接口,定义持久化属性的额外必要信息SimpleTemplateMappingContext 映射上下文,提供持久化实体和属性的构建方法SimpleTemplatePersistentEntity 持久化实体对象接口实现SimpleTemplatePersistentProperty 持久化实体对象属性接口实现
query:字符串查询、注解查询、CRUD操作的条件的核心实现MyTplTemplate 模板类,完成CRUD操作,提供给 repository 的底层实现TemplateOperations 模板类接口,完成CRUD操作的定义 repository 接口规则和主要实现
spring 注入的情况下,也可以使用注入
TemplateRepositoryBean 使用 CdiRepositoryBean 创建 Repository 对象实例TemplateRepositoryExtension 一个便携式CDI扩展,它为Repository注册bean,提供 CdiRepositoryBean 需要的实现SpringData的配置类,开启当前框架或一些基础配置
EnableTemplateRepositories 核心配置,是否开启 spring-data-template 框架和一些载入的配置方式TemplateRepositoriesRegistrar 设置RepositoriesRegistrar的注册实现方式TemplateRepositoryConfigurationExtension 提供 RepositoryConfiguration 配置信息实现SpringData的查询实现,需要基础SpringCommon的一些接口和类去完成
repository接口注解SQL字符串查询和PartTree查询的简单实现repository接口注解SQL字符串查询和PartTree查询的复杂实现TemplateQueryMethod 提供repository接口查询方法的基本信息SimpleTemplateQueryCreator 通过repository接口查询方法动态生成SQL查询语句TemplateEntityMetadata 提供repository 持久化实体对象的元数据信息 repository 的核心实现
TemplateEntityInformation 扩展EntityMetadata以添加查询实体实例信息的功能MappingTemplateEntityInformation 实现 EntityInformation 填充 Entity 相关信息。并且可以充分利用 Converter/PersistentEntity 进行数据转换与填充。TemplateEntityInformationCreator 实体信息 TemplateEntityInformation 对象创造者接口TemplateEntityInformationCreatorImpl 实体信息 TemplateEntityInformation 对象创造者接口实现TemplateRepositoryFactory 通过 TemplateRepositoryFactory 创建TemplateRepository实例TemplateRepositoryFactoryBean 核心类,创建TemplateRepositoryFactory实例AbstractTemplateRepository repo 的抽象实现,方便扩展SimpleTemplateRepository 简单实现 TemplateRepository,支持 实体和字符串泛型,字符串类型的IdNumberKeyedRepository 简单实现 TemplateRepository,Number 类型的IdUUIDTemplateRepository 简单实现 TemplateRepository,UUID 类型的IdTemplateRepository 顶级 repository接口,所有接口继承完成CRUD的repo操作core相关的业务packageSpringData可以和 SpringBoot、SpringCloud、SpringFramework 无缝集成,开发自己的 SpringData 框架方便使用和扩展系统。本框架只是一个模板,可以帮助你了解和学习SpringData底层的接口知识。