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/#/

相关文章
相关标签/搜索