MyBatisCodeHelper-Pro icon indicating copy to clipboard operation
MyBatisCodeHelper-Pro copied to clipboard

标签中使用${}语法时导致的问题

Open q876625596 opened this issue 3 years ago • 6 comments

    <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
        <include refid="selectUserVo"/>


        <trim prefix="where" suffixOverrides="AND | OR" prefixOverrides="AND | OR" >

            <!--下面这行可以正确识别-->
          u.user_name = #{userName}
            <!--下面这行也可以正确识别-->
            <if test="_parameter != null and _parameter != ''">
                and u.user_name = #{userName}
            </if>
            <!--下面这行无法正确识别,按住CTRL时将鼠标指向del_flag无任何反应,双击选中时光标也会乱跳-->
            <!--目前发现原因是${}语法与普通的sql语句之间除了空格和换行以外,没有任何字符时,就会出现这个bug-->
          and  u.del_flag = 0<!--但是只要原生sql与${}语法之间有任何字符,他就可以正确识别,即使像这样添加一个注释-->

            ${_parameter.dataScope('u')}
        </trim>
    </select>

就像上方代码中描述的问题,比如

    a.id = 1
    ${_parameter.dataScope('u')}

这样的代码就会使 a.id = 1 这行光标异常,按住CTRL并且鼠标指向字段时无法高亮,双击这一行的任何字符都会使光标错位;

但是,如果在 a.id = 1 和 ${} 之间有任何一个非空白字符时,就可以正常的识别高亮,也不会错位,如下所示

    a.id = 1
    <!--test-->
    ${_parameter.dataScope('u')}

这个影响还挺大的,希望能尽快解决,谢谢

q876625596 avatar Mar 18 '22 14:03 q876625596

谢谢反馈

gejun123456 avatar Mar 25 '22 02:03 gejun123456

image 插件用的啥版本,我这边看没问题的

gejun123456 avatar Apr 18 '22 11:04 gejun123456

刚发现了,跳转有问题,我这边高亮没问题,我先看看跳转是啥原因

gejun123456 avatar Apr 18 '22 11:04 gejun123456

image 在$ 语句后面加一个$sql就好了

gejun123456 avatar Apr 18 '22 11:04 gejun123456

image

这个版本是我更新之后的,这个版本的问题是如果直接使用where,set,然后后面拼接${},如下代码,那么就正常。

        set
            update_time = sysdate()
                ${@com.ruoyi.common.mybatis.utils.SqlExpressionUtil@dataScopeNew()}
        WHERE
            id = 1
                ${@com.ruoyi.common.mybatis.utils.SqlExpressionUtil@dataScopeNew()}

但是如果是使用标签来作为where,set,或者直接使用标签,总之就是只要在这种子标签内部,一条不带任何符号的语句后面如直接跟上了${},那么就会出现我的上述问题,如下代码:

        <set>
            update_time = sysdate()
                ${@com.ruoyi.common.mybatis.utils.SqlExpressionUtil@dataScopeNew()}
        </set>
        <trim prefix="WHERE" prefixOverrides="AND | OR">
            id = 1
                ${@com.ruoyi.common.mybatis.utils.SqlExpressionUtil@dataScopeNew()}
        </trim>

就如你上面所说,如果要使他正常,要么给那个语句添加$sql,或者像我上面描述的,在语句和${}之间任意塞一个非空的字符,即使他只是一个注释,就像下面的代码,我仅仅是在他们之间加了一个空注释:

        <set>
            update_time = sysdate()<!---->
                ${@com.ruoyi.common.mybatis.utils.SqlExpressionUtil@dataScopeNew()}
        </set>
        <trim prefix="WHERE" prefixOverrides="AND | OR">
            id = 1<!---->
                ${@com.ruoyi.common.mybatis.utils.SqlExpressionUtil@dataScopeNew()}
        </trim>

q876625596 avatar Apr 18 '22 13:04 q876625596

明白,现在的逻辑的 ${} 这块不加入sql解析,你这个sql看起来是没有问题的不加注释也是没有问题的,我再看看是啥原因导致的

gejun123456 avatar Apr 19 '22 05:04 gejun123456

应该已经搞定了,有问题再联系我

gejun123456 avatar Dec 08 '22 09:12 gejun123456