一、大家是否有这个需求
1.跨品种查询:比如MYSQL和一个SQLSERVER进行联表查询,或者SQLITE和MYSQL进行联表查询
2.跨服务器查询:A服务器和B服务器查询
如果想同时支持1和2相信很多人都没有比较好的解决方案
我的设计是通过多库架构来实现多库操作
二、多库架构ORM
什么是多库架构ORM,一个对象可以同时操作和管理多个数据库我们称为多库架构
EFCore
一个对象只能操作一个数据库,所以EFCore不能称为多库架构,只能称为支持多种数据库,如果要实现多库
我们就需外部封装,代码如下
SqlSugar
SqlSugar在最火的时候停更了一年半,最大的原因就是因为底层架构影响了SqlSugar的上限,历史遗留问题太多
需要大量重构,如果直接更新对现有用户是不负责的,所以我选择了一年半未更新,让不是特别热爱SqlSugar的用户
先用其他框架,留下对于SqlSugar一直热衷的用户,能支持和一起完善SqlSugar的用户,谢谢有一群这样的用户不离不弃
筹划了一年半的时间终于在开始进行重构每隔一个月就重构一部分加点功能,直到今天终于重构完成
多库架构可以在底层做到兼容,比如事务不需要引用外部DLL,比如我可以让底层语法支持多库,像EFCORE你能改他的
Include语法吗?改不了,我只能封装他的语法,或者添加扩展方法。
三、跨服务器跨库联表查询
SqlSugar来实现跨服务器联表查询
3.1跨库查询之一对一
3.2跨库查询之一对多
3.3跨库查询之多对多
我们将3个表扔进3个不同的库里面
3.4是否有性能问题
不会SqlSugar跨库导航和不跨库导航是一套算法,性能有保障,也就是单库和多库性能是一样的
原理:一次获取需要的数据,在内存分配置,数据多可进行拆分读取
如今的成绩
企业认可以:
51job搜索简历数仅次EF和Dapper超过国外的 NhibernatePetaPoco,占Dapper40%简历数
知名收费框架JNPF和力软都有使用SqlSugar
培训机构开始讲解SqlSugar
用户认可
拥有强大的生态,3k以上的项目就有4个,基本都在星以上,不算生态就拥有5个人群
RuYiAdmin、ZrAdminNetCore、Admin.NET通用管理平台(gitee3k)Yi框架(RuoyiVue)CoreShop商城(gitee3k)Blog.Core(github4k)
YuebonCoreFurion(gitee8k)WebFirst腾讯APIJSON.NETWaterCloud微服务
ViperFamilyBucketSmartSqlvboot-netWMS仓库管理系统magic.net