Mybatis sql 如何進行全自動補全 檢測sql的正確性

當咱們在寫 mybatis的sql時 因爲沒有sql自動補全,寫sql花時間比較多 而且很容易寫錯 只能經過寫testcase來看 sql是否是寫錯了 通常項目中又用到了spring,大一點的項目啓動spring就要花點時間,測試起來也比較麻煩git

若是mybatis有sql的全自動補全 而且可以本身執行sql就會方便不少github

當咱們使用Intellij高級版時,Intellij高級版有一個自帶的數據庫, 在它的這個數據庫寫sql 時能夠進行全自動的補全和檢測sql的正確性spring

而且Intellij 有一個 Inject Language的功能, 即咱們能夠把一種語言 注入到 一個字符串 或一個 xml塊中sql

所以利用Intellij高級版 咱們能夠把 sql這種語言注入到咱們寫的 mybatis的xml塊中數據庫

這樣mybatis的sql 就能夠提供自動補全了 (前提是咱們要把數據庫給配置好)mybatis

截圖以下測試

  • sql自動補全和檢測
    Intellij自帶的sql的自動補全.gif
  • 執行sql
    Intellij自帶的數據庫執行sql.gif

這樣的補全 其實就已經方便不少了插件

但若是咱們的sql裏面添加了 include set trim where foreach這類mybatis自定義的標籤的時候 在這些標籤後面的sql不能進行自動補全 和識別了 因爲Intellij不能識別這些標籤 致使也不能執行sql3d

如下是截圖code

  • 沒法識別mybatis的標籤 Intellij標籤沒法識別.gif

如何解決

  1. 避免使用 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就錯了

因此這個方案不是很完美 因此有下面這個方案

  1. 因爲Intellij 不支持 Mybatis的標籤,要是Intellij能支持這塊就行了 幸運的是,有一個Intellij 插件支持這個功能,能夠正確識別Mybatis的標籤 在這些標籤 後面的sql能夠自動補全 能夠識別帶標籤的mybatis的語句 是否正確 今後不用擔憂sql是否寫錯 地址是: https://github.com/gejun123456/MyBatisCodeHelper-Pro

識別trim標籤
識別trim標籤.gif

識別set標籤
識別set.gif

識別where標籤
識別include和where.gif

sql是否正確檢測
檢測sql是否正確.gif

不過該插件是收費的,一個月3元 一年29 歡迎各位免費試用 http://brucege.com

固然插件還有不少其餘的功能 能夠看插件的文檔 https://gejun123456.github.io/MyBatisCodeHelper-Pro/#/

相關文章
相關標籤/搜索