1. 程式人生 > 實用技巧 >在MyBatis中實現動態表名

在MyBatis中實現動態表名

在MyBatis中實現動態表名

  1. 場景:由於MySQL本身受單表資料檔案大小限制,資料量將成為效能瓶頸。當單表資料量很大,或預計會很大時,將單個大表和單個大表資料檔案,拆分成多個小表和小表資料檔案就是一個簡單有效的提升新能的方式。一個較好的解決查詢效能問題的手段就是水平分表。分表後,一次針對不同拆分邏輯的查詢,必須被定位到正確的小表上,此時就需要能動態匹配小表的表名。
  2. 方案:在MyBatis中一個可行的方式就是將表名引數化,首先,表名必須“列舉化”,傳給MyBatis的值必須是服務端可控的,不能由客戶端傳遞(防止SQL注入攻擊)。其次,SQL語句中的表名取值符號必須用${tableName},不能用#{}(語句中的其他引數建議使用#{}來取值)。
  3. 舉例:
    <select id = "bizQuery">
        SELECT
            t.*
        FROM
            ${dto.tableName} AS t 
        WHERE
            t.`code` = #{dto.code}
    </select>