最近接到个需求,是这样的,公司的项目组拆分,然后根据业务拆分了不同的数据库,然后公司的运营老是有这种报表需求,需要跨库查询,所以想做成页面,这样就不用了每天去手动的查询sql了。
思维大坑
大家都知道,如果是在Navicat中如果涉及到跨库直接库名.表名,就可以了,但是放在应用中该怎么去写sql啊,然后我就去论坛,博客,一顿搜方案,然后就确认了一种方案,就是,在配置文件中配置多个数据源,然后用AOP的方式去实现切换数据源。然后通过代码逻辑拼装多个数据源查询到的结果,虽然这种比较麻烦,但是也交差了啊。
思考
但是查询实在是太慢了,来回的切换数据源,然后用代码在去拼装,耗时,耗力。然后我又回到起点。如果有个用户,所用的库都在这个用户下,那是不是也可以看成一个数据源,那么咱们的这种跨库其实就是跨表查询了。数据库如下图
ps:如上图,我们是在这个用户,那我们在Navicat中写sql,就可以这样
实践
我用的是springboot+mybatis,所以我就写了个demo,然后直接像上面这种方案去写了个sql,结果可以查询到结果,一个这么简单的东西,让我搞得这么复杂,我都快要蠢死了,一开始要去自己动手试下,也不会浪费这么多时间去搞什么AOP切换数据源之类的操作了。
注意
大家要注意下,我说的多数据源是数据库都在一台服务器上的多数据源,如果多个数据源不在同一台服务器上,那有可能需要我最初的那种AOP切换数据源的需求。最后希望大家要多动手,有的时候想的和实际其实偏离太大,也告诫下自己。