我现在用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,是你实体没有设值
select * from ty_song WHERE single_name=接收的singleName
```
<if test="singleName != null and singleName !='' ">在每个if里面增加一个判断试试
看一下你的入参,有没有默认值。打个断点,可能没有赋值的不是null,所以没有拦截