当前位置: 首页 > 后端技术 > Java

EasyRelation发布,一个简单而强大的数据关联框架

时间:2023-04-01 18:06:11 Java

开发者在需要进行关联查询时,往往需要编写大量冗余代码来处理数据之间的关系。这不仅浪费时间和精力,还会影响项目的可维护性和可扩展性。EasyRelation是一个简单高效的自关联数据框架,只需一行代码即可自动关联查询并填写所需数据,对性能影响极小,并省略大量冗余代码。框架适配当前对象中需要关联查询的字段,为当前对象的字段赋值。数据源可以是枚举、数据库、RPC接口等任意来源,特性不限制关联查询方式,需要关联的数据可以来自任意来源。二级缓存支持,可自由使用,执行效率高,对性能影响极小。支持多条件关联和常量条件关联。快速入门下面演示如何使用EasyRelation进行自动数据关联,假设有一个订单类(Order)和一个用户类(User),订单中保存了用户名,用户昵称需要进行关联和查询。Order@DatapublicclassOrder{privateStringorderId;私有字符串用户名;privateStringnickName;}User@DatapublicclassUser{privateStringusername;privateStringnickName;}添加依赖最新版本cn.easyieasy-relation-spring-boot-starter${easy-relation.version}定义用户数据dataprovider这里需要定义一个类来实现DataProvideService接口,定义获取用户信息的接口,并添加@DataProvider注解。@ComponentpublicclassUserInfoDataProviderimplementsDataProvideService{@DataProvider(RelationIdentifiers.getUserByUsername)publicUsergetUserByUsername(UserQueryReqreq){if("admin".equals(req.getUsername())){finalUseruser=newUser();user.setUsername("admin");user.setNickName("管理员");返回用户;}返回空值;}}这里的UserQueryReq为用户信息查询输入,定义如下:@Data@AutoMapMapperpublicclassUserQueryReq{privateStringusername;私人长用户名;privateBooleanisDeleted;}测试@SpringBootTestclassInjectRelationTest{@AutowiredprivateInjectRelationinjectRelation;@TestvoidquickStart(){Orderorder=getOrder("2f453910375641648ab3a2fc6e3328ef");injectRelation.injectRelation(顺序);System.out.println(订单);//订单(orderId=2f453910375641648ab3a2fc6e3328ef,username=admin,nickName=admin)Assert.equals(order.getNickName(),"admin");}privateOrdergetOrder(StringorderId){订单order=newOrder();order.setOrderId(orderId);order.setUsername("admin");退货单;}}缓存支持EasyRelation。CCP中设计了两级缓存。参考Mybatis中的设计。在进行数据关联时,会经过一级缓存-->二级缓存--->数据提供源,从而提高数据获取效率。这里简单了解一下一级缓存和二级缓存:一级缓存:单次数据关联操作内的缓存,缓存的数据只在本次关联过程中有效。一级缓存是根据一定的规则,会自动开启的。这里的单次数据关联操作是指调用一次injectRelation方法中的执行过程。二级缓存:全局缓存,如使用Redis作为缓存,需要手动开启二级缓存。详情请参考缓存|EasyRelation(easyi.cn)性能损失测试运行环境:CPU:Inteli510400内存:32GBJDK:17执行一百万次,很多情况下,消耗在185~620毫秒之间,具体可以查看性能|EasyRelation(easii.cn)项目地址GiteeGithub官方文档首页|EasyRelation(easii.cn)