SpringBoot用Mybatis更新文件,只能更新一个

我现在用SpringBoot更新一个文件,它只能更新一个,其它在数据库里面的对象,就不能更新,而且,更新后的文件的id变成了0.


```java

 UPDATE ty_song
        <set>
            <if test="id != null">
                id = #{id},
            </if>
            <if test="singleName != null">
                single_name = #{singleName},
            </if>
            <if test="singer != null">
                singer = #{singer},
            </if>
            <if test="lyricist != null">
                lyricist = #{lyricist},
            </if>
            <if test="songwriter != null">
                songwriter = #{songwriter},
            </if>
</set>
        WHERE single_name = #{singleName} ;

下面是控制类

```java
String singer = request.getParameter("singer");
            String lyricist = request.getParameter("lyricist");
            String songwriter = request.getParameter("songwriter");
            String arranger = request.getParameter("arranger");

 song.setSingleName(singleName);
            song.setSinger(singer);
            song.setLyricist(lyricist);
            song.setSongwriter(songwriter);

而且 其它的字段,没有输入时,也全部会被修改成空。

这是你的写法错了,你update的时候是想要根据single_name更新,如果你的id是你的主键,上面就不能有id,如果不是的话,你修改的时候就不能填值;我下面给你整理了update语句,你可以试试:

<update id="updateByPrimaryKeySelective" parameterType="com.qk.platform.database.model.TySong">
    update ty_song
    <set>
      <if test="singleName != null">
        single_name = #{singleName,jdbcType=VARCHAR},
      </if>
      <if test="singer != null">
        singer = #{singer,jdbcType=VARCHAR},
      </if>
      <if test="lyricist != null">
        `lyricist` = #{lyricist,jdbcType=VARCHAR},
      </if>
      <if test="songwriter != null">
        songwriter = #{songwriter,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>

如果可以的话请采纳!

你打印一下你的输出语句。

第一,id为0,是你实体没有设值

img


第二,只能更新一个的话,你看一下where条件能查出多少个




select * from ty_song WHERE single_name=接收的singleName

```


<if test="singleName != null and singleName !='' ">在每个if里面增加一个判断试试

看一下你的入参,有没有默认值。打个断点,可能没有赋值的不是null,所以没有拦截