EasyRelation 1.0 发布,简单强大的数据关联框架
当开发人员需要进行关联查询时,往往需要编写大量的冗余代码来处理数据之间的关系。这不仅浪费时间和精力,还会影响项目的可维护性和可扩展性。
EasyRelation 是一个简单、高效的自动关联数据框架,可以通过一行代码,自动关联查询并填充需要的数据,对于性能影响极小,且省略了大量的冗余代码。
该框架适应于当前对象中的字段需要关联查询,并赋值到当前对象的字段中,数据来源可以是枚举、数据库、RPC 接口等等任意来源。
特点
- 不限制关联查询方式,需要关联的数据可以是任意来源
- 两级缓存支持,可自由选择使用的缓存
- 执行效率高,对性能影响极小
- 支持多条件关联和常量条件关联
快速开始
下面演示如何使用 EasyRelation 进行自动关联数据
假设有订单类(Order
)和用户类(User
),订单中保存了用户名,需要关联查询用户昵称。
Order
@Data public class Order { private String orderId; private String username; private String nickName; }
User
@Data public class User { private String username; private String nickName; }
添加依赖
<properties> <easy-relation.version>最新版本</easy-relation.version> </properties> <dependencies> <dependency> <groupId>cn.easii</groupId> <artifactId>easy-relation-spring-boot-starter</artifactId> <version>${easy-relation.version}</version> </dependency> </dependencies>
定义用户数据数据提供者
这里需要定义一个类,实现 DataProvideService
接口,在其中定义获取用户信息的接口,并添加 @DataProvider
注解。
@Component public class UserInfoDataProvider implements DataProvideService { @DataProvider(RelationIdentifiers.getUserByUsername) public User getUserByUsername(UserQueryReq req) { if ("admin".equals(req.getUsername())) { final User user = new User(); user.setUsername("admin"); user.setNickName("管理员"); return user; } return null; } }
这里的 UserQueryReq
为用户信息查询入参,定义如下:
@Data @AutoMapMapper public class UserQueryReq { private String username; private Long userId; private Boolean isDeleted; }
测试
@SpringBootTest class InjectRelationTest { @Autowired private InjectRelation injectRelation; @Test void quickStart() { Order order = getOrder("2f453910375641648ab3a2fc6e3328ef"); injectRelation.injectRelation(order); System.out.println(order); // Order(orderId=2f453910375641648ab3a2fc6e3328ef, username=admin, nickName=管理员) Assert.equals(order.getNickName(), "管理员"); } private Order getOrder(String orderId) { Order order = new Order(); order.setOrderId(orderId); order.setUsername("admin"); return order; } }
缓存支持
EasyRelation 中共设计有两级缓存,参考了 Mybatis 中的设计,在进行数据关联时,会依次经过 一级缓存 --> 二级缓存 ---> 数据提供源
,从而提高数据获取的效率。
这里简单了解一下一级缓存与二级缓存:
- 一级缓存:单次数据关联操作内的缓存,缓存的数据只在这个关联过程内有效,一级缓存根据一定规则,会自动开启。
这里的单次数据关联操作指的是调用一次
injectRelation
方法内的执行流程。
- 二级缓存:全局缓存,比如使用 Redis 作为缓存,二级缓存需要手动开启。
详细可以参考缓存 | EasyRelation (easii.cn)
性能损耗
测试运行环境:
- CPU:Intel i5 10400
- 内存:32 GB
- JDK:17
执行一百万次,多种情况下,消耗在 185 ~ 620 毫秒之间,具体可以查看性能 | EasyRelation (easii.cn)
项目地址
官方文档

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MapStructPlus 1.2.2 版本发布,增加枚举自动转换
当需要进行枚举转换时(例如枚举转换为编码值,或者又编码转换为枚举),可以在目标枚举添加@AutoEnumMapper注解, 增加该注解后,在任意类型中需要转换该枚举时都可以自动转换。 使用该注解需要注意:当前注解必须有一个可以保证唯一的字段,并在使用当前注解时,将该字段名,添加到注解提供的value属性中。 还有就是注解和使用注解的类,要在同一个模块中。 例如: 商品状态枚举(Goods) @Getter @AllArgsConstructor @AutoEnumMapper("state") public enum GoodsStateEnum { ENABLED(1, "启用"), DISABLED(0, "禁用"); private final Integer state; private final String desc; } 在当前枚举中添加注解 @AutoEnumMapper,且指定唯一字段为 state。 商品类(Goods) @Data @AutoMapper(target = GoodsVo.class, reverseConv...
- 下一篇
MKVToolNix v75.0 发布,MKV 视频编辑工具
MKVToolNix 是一套功能强大的 mkv(Matroska)格式制作和处理的工具,支持将多种视频、音频、字幕等格式封装成 mkv 格式。 MKVToolNix 75.0 正式发布,该版本只是修复了一些错误,并增加了一个从 Timed Text 到 Matroska 简单格式(类似 SRT)的转换器。更新内容如下: 新功能和改进 mkvmerge: MP4 reader: mkvmerge 现在可以读取 Timed Text(FourCC tx3g)字幕轨,并将其转换为 Matroska 的简单文本字幕格式( S_TEXT/UTF8;只有文本,没有样式)。 错误修正 改回使用 boost::filesystem 函数来创建目录,而不是为了解决 std::filesystem 中的错误而引入的函数。后者在 v74 版切换到 boost::filesystem::path 后,不能正确处理 UNC 路径。 mkvmerge: VobSub reader: mkvmerge 现在会在 VobSub 识别过程中探测 .idx 文件,即使 .sub 文件被作为源文件传递。 MKVToolNi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程