MyBatis空where攔截器

最近項目中出現了至少兩次由於Mybatis的動態where條件不知足致使實際sql語句的where條件爲空,進而查詢全表,當數據量比較大的時候,致使OOM的狀況.程序員

如何禁止這種狀況,我的以爲三種措施:sql

  • 1.在邏輯層面加充分的參數有效性檢查;
  • 2.在where條件中若是索引條件都不知足,加上1=2這種必然失敗的條件;
  • 3.Mybatis攔截器;
  • 前兩種措施都是依賴人,從這個層面講,是不靠譜的,即一個策略不是強制的,就是不靠譜的.相對而言,第三種是不依賴程序員的自覺性,是最靠譜的.乘週六有時間,實現一個簡單的Mybatis攔截器來攔截where條件爲空的SQL語句.mybatis

    1.實現

    先上代碼,這裏攔截了SqlCommandType爲select,update,delete這三種類型.出現狀況目前只是打日誌.工具

  • 包括一個簡單反射工具的實現:ui

  • /** * 反射工具 * * @author: xiaobaoqiu Date: 15-8-22 Time: 上午11:52 */
  • 2.Mybatis的Interceptor原理

    這篇文章很好的解釋了Mybatis的Interceptor機制.spa

    mybatis讀取配置再xml文件中Interceptor,經過反射構造其實例,將全部的Interceptor保存到InterceptorChain中。.net

    mybatis的攔截器只能代理指定的四個類:ParameterHandler、ResultSetHandler、StatementHandler以及Executor。3d

    參考:代理

    http://www.tuicool.com/articles/RbyUfu日誌

    http://blog.csdn.net/hupanfeng/article/details/9247379

相關文章
相關標籤/搜索