1. 程式人生 > >Mybatis sql 如何進行全自動補全 檢測sql的正確性 提升開發效率

Mybatis sql 如何進行全自動補全 檢測sql的正確性 提升開發效率

當我們在寫 mybatis的sql時 由於沒有sql自動補全,寫sql花時間比較多 並且很容易寫錯 只能通過寫testcase來看 sql是不是寫錯了 一般專案中又用到了spring,大一點的專案啟動spring就要花點時間,測試起來也比較麻煩

如果mybatis有sql的全自動補全 並且能夠自己執行sql就會方便很多

當我們使用Intellij高階版時,Intellij高階版有一個自帶的資料庫, 在它的這個資料庫寫sql 時可以進行全自動的補全和檢測sql的正確性

並且Intellij 有一個 Inject Language的功能, 即我們可以把一種語言 注入到 一個字串 或一個 xml塊中

因此利用Intellij高階版 我們可以把 sql這種語言注入到我們寫的 mybatis的xml塊中

這樣mybatis的sql 就可以提供自動補全了 (前提是我們要把資料庫給配置好)

截圖如下

  • Intellij高階版自帶的sql自動補全和檢測
    Intellij自帶的sql的自動補全.gif
  • 執行sql
    Intellij自帶的資料庫執行sql.gif

這樣的補全 其實就已經方便很多了

但如果我們的sql裡面添加了 include set trim where foreach這類mybatis自定義的標籤的時候 在這些標籤後面的sql不能進行自動補全 和識別了 由於Intellij不能識別這些標籤 導致也不能執行sql

以下是截圖

  • 無法識別mybatis的標籤 點到標籤後的列 無法補全和跳轉
    Intellij標籤無法識別.gif

如何解決

  • 避免使用 where set trim 等標籤 帶標籤的sql 大部分是可以轉成不帶標籤的

       SELECT <include refid="all_column"/>
        FROM comment_p_o
        <where>
            <if test="pojo.id != null"> AND id = #{pojo.id} </if>
            <if
test="pojo.article_id != null"> AND article_id = #{pojo.article_id} </if> </where> 複製程式碼

可以改寫為

      SELECT <include refid="all_column"/>
        FROM comment_p_o
        WHERE 1=1
            <if test="pojo.id != null"> AND id = #{pojo.id} </if>
            <if test="pojo.article_id != null"> AND article_id = #{pojo.article_id} </if>
複製程式碼

對於 set 和 trim這種 如果有明確會更新的欄位 也是可以轉的 把明確要改的欄位 放在最後一個 就可以避免逗號的問題 但是對於下面這種 就沒辦法轉了

update order_info
    <set>
      <if test="orderId != null">
        order_id = #{orderId,jdbcType=VARCHAR},
      </if>
      <if test="userEmail != null">
        user_email = #{userEmail,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
複製程式碼

改寫為

update order_info
    set 
      <if test="orderId != null">
        order_id = #{orderId,jdbcType=VARCHAR},
      </if>
      <if test="userEmail != null">
        user_email = #{userEmail,jdbcType=VARCHAR}
      </if>
    where id = #{id,jdbcType=INTEGER}
複製程式碼

就會有問題 如果 userEmail為空 sql就錯了

所以這個方案不是很完美 所以有下面這個方案

由於Intellij 不支援 Mybatis的標籤,要是Intellij能支援這塊就好了 幸運的是,有一個Intellij 外掛支援這個功能,可以正確識別Mybatis的標籤 在這些標籤後面的sql可以自動補全 可以識別帶標籤的mybatis的語句 是否正確 從此不用擔心sql是否寫錯 地址是: github.com/gejun123456…

識別trim標籤

識別trim標籤.gif

識別set標籤

識別set.gif

識別where標籤

識別include和where.gif

sql是否正確檢測

檢測sql是否正確.gif

不過該外掛是收費的,一個月3元 一年29 歡迎各位免費試用 brucege.com

當然外掛還有很多其他的功能 可以看外掛的文件 gejun123456.github.io/MyBatisCode…