# weave **Repository Path**: li-sim/weave ## Basic Information - **Project Name**: weave - **Description**: 一款轻量级的 Java 数据关联框架, 通过注解完成数据字典的翻译以及跨表数据引用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2025-06-11 - **Last Updated**: 2026-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, 数据字典, 低代码, SpringBoot, MyBatis ## README Weave ========== Weave 是一个轻量级、高性能的 Java 数据关联框架, 通过注解驱动的方式, 自动完成字典翻译、跨表/跨服务引用等常见的数据关联任务, 从而显著减少项目中的样板代码, 同时提高代码的可维护性和可读性。 ## 应用场景 Weave 可以自动处理下列常见数据关联需求,不需要编写关联查询,也不需要手动赋值: - **外键转展示文本** 根据业务对象中的外键字段(如 `userId`),自动查询并填充对应的展示字段(如 `userName`)。 - **外键转完整对象** 根据外键字段(如 `userId`),自动查询并嵌入完整的关联对象(如 `User` 实例)。 - **字典码转描述文本** 将业务对象中的字典码(如 `0`、`1`)自动翻译为对应的文本描述(如 “男”、“女”),以便展示。 - **描述文本转字典码(反向操作)** 根据业务对象中的文本描述,自动反译为字典码,以便持久化存储。 - **树型结构解析** 支持递归处理具有父子级联关系的树型结构数据(如组织架构树、菜单树等)。 ## 项目特点 - **声明式编程**:通过简单的注解声明关联关系,框架自动完成数据填充。 - **无缝集成**:与 Spring、MyBatis 等主流框架无缝集成。 - **分布式友好**:天然适配分布式环境,兼容 Feign、Dubbo 等远程服务代理。 - **灵活扩展**:支持自定义数据源、缓存、序列化等组件。 - **非侵入性**:业务对象无需继承特定基类,支持动态字段注入。 ## 注解介绍 ### `@ServiceRef` **用途**:用于通过外键从指定服务的指定方法获取数据,并将结果的属性映射到当前对象。 **标注位置**:类。 **示例**: ```java @ServiceRef( service = UserService.class, mappings = { @Mapping(refField = "firstApprover", from = "name", to = "firstApproverName"), @Mapping(refField = "secondApprover", from = "name", to = "secondApproverName") } ) public class ContractDTO { private Long firstApprover; private String firstApproverName; private Long secondApprover; private String secondApproverName; } ``` ### `@RecordEmbed` **用途**:用于通过外键从指定服务的指定方法获取数据,并将完整数据记录嵌入到当前对象。 **标注位置**:需要嵌入数据的属性(支持集合和数组)。 **示例**: ```java public class OrderDTO { private String userId; @RecordEmbed(service = UserService.class) private User user; } ``` ### `@TableRef` **用途**:用于通过外键从关联表查询数据,并将结果中的列值映射到当前对象(只查询必要的列)。 默认支持`MyBatis`系列框架,可通过[扩展](./Custom.md#扩展点)适配其他`ORM` **标注位置**:类。 **示例**: ```java @TableRef( table = "sys_user", mappings = { @Mapping(refField = "createBy", from = "name", to = "createByName"), @Mapping(refField = "updateBy", from = "name", to = "updateByName") } ) public class OrderDTO { private Long createBy; private String createByName; private Long updateBy; private String updateByName; } ``` ### `@Dict` **用途**:用于将字典的值(如 1)翻译为对应的描述文本(如 "启用"),或反之将描述文本翻译为字典值。 **标注位置**:存储字典值的属性(支持集合、数组、分隔符)。 **示例**: ```java public class User { @Dict(code = "user_status") private Integer status; private String statusText; } ``` > ⚠️使用前需实现 [DictDataProvider](core/src/main/java/cn/filaura/weave/dict/DictDataProvider.java) 并注册为`Spring Bean`。 > 示例参考:[DictDataFetcher.java](example/src/main/java/cn/filaura/weave/example/dict/DictDataFetcher.java) ### `@Cascade` **用途**:用于处理对象间的递归或级联关系,支持集合、数组。 **标注位置**:需要级联处理的属性。 **示例**: ```java public class Menu { @Cascade private List