最近項目中出現了至少兩次由於Mybatis的動態where條件不知足致使實際sql語句的where條件爲空,進而查詢全表,當數據量比較大的時候,致使OOM的狀況.程序員
如何禁止這種狀況,我的以爲三種措施:sql
前兩種措施都是依賴人,從這個層面講,是不靠譜的,即一個策略不是強制的,就是不靠譜的.相對而言,第三種是不依賴程序員的自覺性,是最靠譜的.乘週六有時間,實現一個簡單的Mybatis攔截器來攔截where條件爲空的SQL語句.mybatis
先上代碼,這裏攔截了SqlCommandType爲select,update,delete這三種類型.出現狀況目前只是打日誌.工具
包括一個簡單反射工具的實現:ui
這篇文章很好的解釋了Mybatis的Interceptor機制.spa
mybatis讀取配置再xml文件中Interceptor,經過反射構造其實例,將全部的Interceptor保存到InterceptorChain中。.net
mybatis的攔截器只能代理指定的四個類:ParameterHandler、ResultSetHandler、StatementHandler以及Executor。3d
參考:代理