当我们在写 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 就可以提供自动补全了 (前提是我们要把数据库给配置好)
截图如下
这样的补全 其实就已经方便很多了
但如果我们的 sql 里面添加了 include set trim where foreach 这类 mybatis 自定义的标签的时候 在这些标签后面的 sql 不能进行自动补全 和识别了 由于 Intellij 不能识别这些标签 导致也不能执行 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 是否写错 地址是: https://github.com/gejun123456/MyBatisCodeHelper-Pro
识别 trim 标签
识别 set 标签
识别 where 标签
sql 是否正确检测
不过该插件是收费的,一个月 3 元 一年 29 欢迎各位免费试用 http://brucege.com
当然插件还有很多其他的功能 可以看插件的文档 https://gejun123456.github.io/MyBatisCodeHelper-Pro/#/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.