stream-query加入dromara开源组织

简介: stream-query加入dromara开源组织

宁可理解少些,胜于误解许多。——法郎士

Stream-Query简介

Stream-Query允许完全摆脱MapperMybatis-Plus体验!可以使用类似“工具类”这样的静态函数进行数据库操作

Stream-Query诞生背景

自从用了Mybatis-Plus后,谓爱不释手,捧读其源码,贡献其代码…慢慢地,我不仅是HutoolCommiter,也成为了Mybatis-PlusCommiter

于是我产生了一个思考,能不能让Hutool的静态工具类概念,用在Mybatis-Plus中呢?

这样我就可以不需要每张表都使用代码生成器去生成继承了ServiceImplService

而是针对某一域的业务去新建Service,避免很多可以省略掉的Service类(比如除了主键外只包含user_idrole_id这两个字段的关联表)

然后我就编写了Db类,放到了Mybatis-Plus3.5.3版本中:

但我还不满足,此时我仍然需要编写一个UserRoleMapper,用于Mybatis-Plus去动态代理

那么我就又研究了下源码,发现了一种实现动态Mapper的方法,那就是使用Byte-Buddy,让其在JVM运行时动态生成Mapper,然后再交给Mybatis-Plus去代理

最终,我实现了!再加上之前对于Stream的封装,我将其命名为Stream-Query,在一段时间的沉淀和积累后,项目成功加入了Dromara开源组织

期间Stream-QueryCommiter臧臧也提供了诸多帮助,例如编写文档、录制b站相关教学视频等,如今臧臧也成功加入了Dromara开源组织的一份子

Stream-Query使用方式

安装——引入依赖:

<dependency>
    <groupId>org.dromara</groupId>
   <artifactId>stream-plugin-mybatis-plus</artifactId>
   <version>1.4.4</version>
</dependency>

在启动类加上注解@EnableMybatisPlusPlugin

接下来只需要配置需要生成动态Mapper的实体类

@Bean
public DynamicMapperHandler dynamicMapperHandler(SqlSessionFactory sqlSessionFactory) throws Exception {
    // 扫描po包下的所有类,作为entity
    String entityPackagePath = "org.dromara.streamquery.stream.plugin.mybatisplus.pojo.po";
    // 这里传入的 entityClassList 即是数据库对应实体类的集合,你可以使用任何你能想到的方式传入,例如Lists.of(UserInfo.class)或者将包路径改为配置文件
    final List<Class<?>> entityClassList = ClassHelper.scanClasses(entityPackagePath);
    return new DynamicMapperHandler(sqlSessionFactory, entityClassList);
}

然后就可以使用啦:

// 查询集合
List<UserInfo> list = Database.list(Wrappers.lambdaQuery(UserInfo.class));
// 批量更新
boolean isSuccess = Database.updateBatchById(list);

如果已有对应实体类的Mapper类,则使用Database进行数据库操作时,获取到的Mapper会是自己定义的Mapper

对于一些连表查询,还提供了针对列表查询后使用Stream进行内存中数据处理的封装:

// 返回map key为id,value为entity对象,如果in函数中的userIds为空,则不会进行查询
Map<Long, UserInfo> idUserMap = OneToOne.of(UserInfo::getId).in(userIds).query();
// 返回map key为id,value为查询到entity的name,且只会查询id和name字段
Map<Long, String> userIdNameMap = OneToOne.of(UserInfo::getId).in(userIds)
    .value(UserInfo::getName).query();
// 返回key为id,value为判断条件(userInfo的name是否不为null,并且包含a字符串)的map
// eq/in函数如果省略的话,则查询全表并按key转换为map,可以通过下面的condition函数限制查询条件
Map<Long, String> userIdHasANameMap = OneToOne.of(UserInfo::getId)
    .condition(w -> w.select(UserInfo::getId, UserInfo::getName))
    .value(userInfo -> userInfo.getName() != null &&
           userInfo.getName().contains("a"))
    .query();

除了OneToOneStream-Query还提供了OneToMany

// 返回map key为age,value中list的包装对象为entity对象(在进行peek等操作,且大数据量情况下的时候可以考虑并行)
Map<Integer, List<UserInfo>> ageUsersMap = OneToMany.of(UserInfo::getAge)
    .in(userAges).peek(user -> userIds.add(user.getId())).parallel().query();

还有诸多特性,可以去官方文档查阅:

官方文档:https://stream-query.dromara.org/

官方文档(国内访问快):https://dromara.gitee.io/stream-query/

阿超有话说

自从投身了开源,体会到了开源的快乐:技术提升了、朋友变多了、生活越好了、头发也少了

我想将这份喜悦分享给大家,也许能感染更多的人一起做开源(当然,希望大家头发能健在)

贡献开源有很多方式,无论是代码pr贡献、一个star、一次分享布道都是一种参与开源的方式

最后,我这个不成熟的00后希望大家能给这个不是特别成熟的项目点个star,让我们一起见证它能越走越远:

项目仓库地址:https://gitee.com/dromara/stream-query

相关文章
|
6月前
|
SQL 存储 数据库连接
通用`Query`解决方案(上)
通用`Query`解决方案
86 0
通用`Query`解决方案(上)
|
6月前
|
SQL JSON BI
通用`Query`解决方案(中)
通用`Query`解决方案
67 0
|
3月前
|
存储 算法 Java
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
|
3月前
|
SQL 存储 开发框架
Entity Framework Core 与 SQL Server 携手,高级查询技巧大揭秘!让你的数据操作更高效!
【8月更文挑战第31天】Entity Framework Core (EF Core) 是一个强大的对象关系映射(ORM)框架,尤其与 SQL Server 数据库结合使用时,提供了多种高级查询技巧,显著提升数据操作效率。它支持 LINQ 查询,使代码简洁易读;延迟加载与预先加载机制优化了相关实体的加载策略;通过 `FromSqlRaw` 或 `FromSqlInterpolated` 方法支持原始 SQL 查询;可调用存储过程执行复杂任务;利用 `Skip` 和 `Take` 实现分页查询,便于处理大量数据。这些特性共同提升了开发者的生产力和应用程序的性能。
161 0
|
4月前
|
API 运维
开发与运维函数问题之Gather API与Stream Collector的区别如何解决
开发与运维函数问题之Gather API与Stream Collector的区别如何解决
29 1
|
5月前
|
SQL 前端开发 算法
JavaEE企业级开发中常用的Stream流
JavaEE企业级开发中常用的Stream流
37 2
|
6月前
|
SQL 自然语言处理 数据挖掘
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
|
6月前
|
JSON 数据格式
通用`Query`解决方案(下)
通用`Query`解决方案
60 0
通用`Query`解决方案(下)
|
6月前
|
数据库
stream-query开源合规
stream-query开源合规
59 0
|
11月前
|
Java 测试技术
stream拓展
stream拓展
33 0