当我们在写 mybatis的sql时 由于没有sql自动补全,写sql花时间比较多 并且很容易写错 只能通过写testcase来看 sql是不是写错了 一般项目中又用到了spring,大一点的项目启动spring就要花点时间,测试起来也比较麻烦
当我们使用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是否写错 地址是: github.com/gejun123456…
识别trim标签
识别set标签
识别where标签
sql是否正确检测
不过该插件是收费的,一个月3元 一年29 欢迎各位免费试用brucege.com
当然插件还有很多其他的功能 可以看插件的文档 gejun123456.github.io/MyBatisCode…