da_jie
爱好打劫
2017-02-04 08:28
采纳率: 47.1%
浏览 2.9k

mybatis动态sql去掉,

动态sql

 <sql id="finalExamAttribute">
        <if test="course!=null">
            courseId = #{course.id}
        </if>
        <if test="tclass!=null">
            , classId = #{tclass.id}
        </if>
        <if test="teacher!=null">
            , tid=#{teacher.id}
        </if>
        <if test="score!=null">
            , score=#{score}
        </if>
        <if test="signer!=null">
            , signer=#{signer}
        </if>
    </sql>

修改语句


 <update id="updateFinalExamList">
        UPDATE finalExamList SET
        <include refid="finalExamAttribute" />
        WHERE id=#{id}
    </update>

执行的sql
图片说明
这是什么情况?
会不会是关联查询逗号就去不掉??
怎么解决???

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • gelangqing
    gelangqing 2017-02-04 09:59
    已采纳

    mybatis的动态sql语句中的逗号(,)是放在语句后面,而不是前面的,像这样:OPTIME = #{optime,jdbcType=TIMESTAMP},
    这样mybatis在执行更新语句时会自动将末尾的逗号去掉,同时保证即使该对象的属性值全都为空也不会出错;
    当然如果你非要把逗号放在前面就需要在finalExamAttribute的最前面加上 id=#{id},不需要条件判断

    点赞 评论
  • zc420625
    zc420625 2017-02-04 08:33


    , signer=#{signer}

    原因在于你的条件里面本来就有都好,最好的是在finalExamAttribute里面加上 id=#{id}

    点赞 评论
  • da_jie
    爱好打劫 2017-02-04 08:35

    一般如果前面属性为空,他应该会把头部的逗号去掉;不过你这个处理方法也不错

    点赞 评论
  • a764340703
    Roy_Xiong 2017-02-04 09:01

    你where的位置问题,你抽取的条件都没放到where下面。所以报错。

    点赞 评论
  • a764340703
    Roy_Xiong 2017-02-04 09:18




    and id = #{id}


    and courseId = #{course.id}


    and classId = #{tclass.id}


    and tid=#{teacher.id}


    and score=#{score}


    and signer=#{signer}


    点赞 评论
  • a764340703
    Roy_Xiong 2017-02-04 09:24

    图片说明 手写代码显示不全 给你贴个图片

    点赞 评论
  • sheldon178
    shadon178 2017-02-05 09:31

    mybatis本身就有属性可以解决这个问题,不需要每个都加逗号,mybatis会自行进行判断。

    点赞 评论
  • da_jie
    爱好打劫 2017-02-06 12:04

    我是这样解决的!!!自己保存!

    <sql id="finalExamAttribute">
            <trim suffixOverrides=",">
            <if test="course!=null">
                courseId = #{course.id} ,
            </if>
            <if test="tclass!=null">
                classId = #{tclass.id} ,
            </if>
            <if test="teacher!=null">
                tid=#{teacher.id} ,
            </if>
            <if test="score!=null">
                score=#{score} ,
            </if>
            <if test="signer!=null">
                signer=#{signer}
            </if>
            </trim>
        </sql> 
    
    点赞 评论

相关推荐