首先声明,本人所有博客均为原创,谢绝转载!

今天接到一个需求,如下

这里解释一下,为什么是几十条,因为这里面每个公式的每个条件都是一个单独的数据如净利润就是一条sql语句,而且分散在不同的表,如果此方法按照常规方法来做,为了与指标名称对应的话,那么我们就必须要一个条件一个条件的去查,然后再进行计算.

但是这样就出现了一个问题,大家都知道,在程序里,在不出现死锁的情况下,本地运行的代码其实并不耗多少时间,真正耗时间的是那些需要远程通信的,因为有一个通信时间,而我们查数据库就是一个远程通信的过程.所以,如果按照常规方案来做的话,那我们这个时间消耗

就是无法接受的,当然,按照普通方法做也不是没有解决方案的,那么就是在用户刚刚进入我们这个系统的时候,就单独开个线程去加载数据,然后存到缓存里,然后每隔一分钟就定时去刷一次数据.不过,用这种方案显然不是我的风格,所以,我就试图寻找这些条件的规律

首先,我发现这些条件是有唯一性字段的,也就是说我需要拿到这个唯一性字段然后将其跟我们现在的中文字面条件来对照下,这样的话,我就只需要根据唯一性字段把数据一次性全部查出来,然后根据唯一性字段存到缓存里即可,但是!!!这些唯一性字段是根据表来得,也就是说,不同的表可能有相同的唯一性字段,但这却是两个条件,所以,在其之上,还要加个表的区分,这个往后看自然就懂了,首先,我打开了数据库

哎呀妈呀,这要把头都看晕啊,既然这样,只好写个脚本把数据清洗一下了

nice,这才是我想要的效果,最后变成了这样

OK,这是满足了我拿数据的需求了,但我拿到数据后怎么封装呢?(在看下图之前首先,千万不要纠结我查数据的方式,这不属于任何框架的用法,是我根据自己的业务开发的一个封装条件(pinjiesql)和封装了jdbc的一个工具类(tableSQLUtiles)可能并不适合你的业务,看懂大概意思就行,我的命名还是

很规范的)

最后,再把条件按照我们之前定义的规则来计算

也就是这样

最新文章

  1. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
  2. Mysql limit offset
  3. linux su和sudo命令的区别(转)
  4. 11 自定制shell提示符
  5. ie6 z-index(用父元素的优先级来解决)
  6. 【javascript】js 判断微信浏览器
  7. Anatomy of the Linux kernel--转
  8. .net和MVC中的json值和List<T>和DataTable的一些转换
  9. linq 多条件查询 where 拼接+分页
  10. WINFORM的DataGridView使用点滴
  11. BZOJ1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
  12. (转)走进JVM,浅水也能捉鱼
  13. java 线程之间通信以及notify与notifyAll区别。
  14. POJ 2594 Treasure Exploration(最小路径覆盖变形)
  15. 函数求值(swust oj0274)
  16. Android Selector原理
  17. react-native 打包apk
  18. phothoshop 快捷键
  19. 重新生成ssh
  20. C#中唯一的三元运算符

热门文章

  1. Xcode配置SVN详细步骤
  2. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第五天(非原创)
  3. Pycharm+Django+Python+MySQL开发 后台管理数据库
  4. 浅谈网上的zoomlistview存在的问题
  5. springmvc 获取数组
  6. 摘:关于php调用.net的web service 踩过的坑
  7. PostgreSQL 数据库错误状态编号解释[附带列表
  8. H1B工作签证·绿卡:美国留学的两个关键步骤
  9. 【译】x86程序员手册37-第10章 初始化
  10. codeforces_1075_C. The Tower is Going Home