2023-04-03
宁可理解少些,胜于误解许多。——法郎士
Stream-Query简介
Stream-Query
允许完全摆脱Mapper
的Mybatis-Plus
体验!可以使用类似“工具类”这样的静态函数进行数据库操作
Stream-Query诞生背景
自从用了Mybatis-Plus
后,谓爱不释手,捧读其源码,贡献其代码…慢慢地,我不仅是Hutool
的Commiter
,也成为了Mybatis-Plus
的Commiter
于是我产生了一个思考,能不能让Hutool
的静态工具类概念,用在Mybatis-Plus
中呢?
这样我就可以不需要每张表都使用代码生成器去生成继承了ServiceImpl
的Service
而是针对某一域的业务去新建Service
,避免很多可以省略掉的Service
类(比如除了主键外只包含user_id
、role_id
这两个字段的关联表)
然后我就编写了Db
类,放到了Mybatis-Plus
的3.5.3
版本中:
但我还不满足,此时我仍然需要编写一个UserRoleMapper
,用于Mybatis-Plus
去动态代理
那么我就又研究了下源码,发现了一种实现动态Mapper
的方法,那就是使用Byte-Buddy
,让其在JVM
运行时动态生成Mapper
,然后再交给Mybatis-Plus
去代理
最终,我实现了!再加上之前对于Stream
的封装,我将其命名为Stream-Query
,在一段时间的沉淀和积累后,项目成功加入了Dromara
开源组织
期间Stream-Query
的Commiter
臧臧也提供了诸多帮助,例如编写文档、录制b
站相关教学视频等,如今臧臧也成功加入了Dromara
开源组织的一份子
Stream-Query使用方式
安装——引入依赖:
1 | <dependency> |
在启动类加上注解@EnableMybatisPlusPlugin
接下来只需要配置需要生成动态Mapper
的实体类
1 |
|
然后就可以使用啦:
1 | // 查询集合 |
如果已有对应实体类的Mapper
类,则使用Database
进行数据库操作时,获取到的Mapper
会是自己定义的Mapper
对于一些连表查询,还提供了针对列表查询后使用Stream
进行内存中数据处理的封装:
1 | // 返回map key为id,value为entity对象,如果in函数中的userIds为空,则不会进行查询 |
除了OneToOne
,Stream-Query
还提供了OneToMany
1 | // 返回map key为age,value中list的包装对象为entity对象(在进行peek等操作,且大数据量情况下的时候可以考虑并行) |
还有诸多特性,可以去官方文档查阅:
官方文档:https://stream-query.dromara.org/
官方文档(国内访问快):https://dromara.gitee.io/stream-query/
阿超有话说
自从投身了开源,体会到了开源的快乐:技术提升了、朋友变多了、生活越好了、头发也少了
我想将这份喜悦分享给大家,也许能感染更多的人一起做开源(当然,希望大家头发能健在)
贡献开源有很多方式,无论是代码pr贡献、一个star、一次分享布道都是一种参与开源的方式
最后,我这个不成熟的00
后希望大家能给这个不是特别成熟的项目点个star
,让我们一起见证它能越走越远: