文章出處

前段時間寫了《RabbitMQ入門》系列

  • RabbitMQ入門-初識RabbitMQ
  • RabbitMQ入門-從HelloWorld開始
  • RabbitMQ入門-高效的Work模式
  • RabbitMQ入門-消息派發那些事兒
  • RabbitMQ入門-消息訂閱模式
  • RabbitMQ入門-Routing直連模式
  • RabbitMQ入門-Topic模式
    主要講了一些RabbitMQ的基本知識點,后面準備再起個Spring集成RabbitMQ系列,希望能夠更加貼近我們的日常接觸的生產環境。

今天這篇跟Mybatis以及sql語句有關,正好也是今天解決問題的實踐總結。

流水統計

業務背景

做一個流水統計的功能,從流水明細表中,每天定時同步前一天的流水,按照兩個以上的維度統計并存儲到新的統計表中。

對于明細表中過時的數據需要清除以防止明細表的無限增長。

設計思路

因為項目使用的是Mybatis,所以需要在這個框架下實現想要的功能。拋開框架,問題比較簡單,最核心的其實是sql語句。

但是坦白說,sql語句一直也就是簡單的使用,尤其是現如今有以Hibernate等為代表ORM框架,我們很少需要手寫那些sql語句,甚至在一些成熟的產品項目里,sql語句更是難得一見。

整個思路很簡單,我需要定義一個定時器,這個可以使用Spring Quartz來配置,其中還涉及到Cron expression即定時器表達式。然后我們要在Mybatis的殼子里塞入我們需要的sql語句。最后待時間點一到就執行sql語句完成流水統計,就大功告成了。下面羅列些解決這個問題的點。

Mybatis

個人認為Mybatis是靈活的,但同時也是繁瑣的。為了寫上一個我們想要執行的sql語句,需要寫一大堆的聲明代碼。

有的sql語句有輸入參數比如where后的比較條件就涉及到參數,這時候在Mybatis就要提供輸入參數的入口,我們可以用parameterType來定義你想要的輸入參數。相應的,執行完sql語句有時候會有返回結果,比如select完后的結果,這時候我們可以通過resultMap來返回,必要的時候你需要定義一個resultMap,好比下面這樣

MyBatis-從查詢昨天的數據說起

這實際上是一種映射,將數據庫字段的identity_card_id與Model中的identityCardId對應起來。

對于我們的問題來說,需要首先從明細表中查出所有符合條件的流水明細記錄,然后將符合條件的記錄統計并插入到統計表中。Mybatis提供了增刪改查相應的聲明標簽<insert><delete><update><select>,需要執行的sql語句可以放在對應的標簽中。

如何查詢昨天的數據

在解決查詢昨天的數據這個問題之前,我們首先得知道怎么獲取今天的日期。

SYSDATE()

通過SYSDATE()我們可以獲得當前時間,如果你經常用sql語句,應該還知道有一個now()函數,兩個都是可以查到當前的時間,但是區別在于now()一旦執行后就不變了,而SYSDATE()每次執行都是當前的時間。

DATE_FORMAT

有了SYSDATE()我們確實可以拿到當前時間了,那么怎么才能得到我們想要的時間格式呢,眾所周知,時間的表示法千千萬,比如20170809,2017-08-09等等。

這時候我們需要使用DATE_FORMAT()得到我們想要的日期格式比如DATE_FORMAT(SYSDATE(), '%Y-%m-%d')執行完后,我們就得到了結果“2017-08-09”。有關DATE_FORMAT中的第二個參數可以選擇的值如下

DATE_SUB

有了格式化的DATE_FORMAT函數,我們可以得到想要的日期格式,有了SYSDATE()也能夠得到今天的具體時間了,那么如何得到昨天,明天的時間呢,如果這步可以實現,那么離我們統計昨天所有流水明細的任務就不遠了。

這時候我們可以用DATE_SUB來解決,比如date_sub(SYSDATE(), interval 1 day)表示在當前時間的基礎上往前提一天就是昨天。當然,我們也可以使用DATE_ADD把日期調到明天。

有了這些sql的函數,我們已經可以實現預期的功能了。最終的sql語句類似

MyBatis-從查詢昨天的數據說起

有了這些知識點,對于上面提到的定期刪除數據以及其他的數據整理工作基本上都能解決了,剩下的就是敲代碼實現業務了。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的微信公眾號,我會將我的文章推送給您,并和您一起分享我日常閱讀過的優質文章。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()