今天写项目的修改功能的时候遇到个很奇怪的问题,前端写的select两个选项,一个值是true,另一个是false:
<select class="form-control col-md-4" id="order_finished" name="complete">
<option value="true">是</option>
<option value="false">否</option>
</select>
修改的时候从否选是时可以成功修改,但是选否的时候缺没有修改回来。
查看数据库之后发现没有得到值,但是后端得到了,于是就看了看mapper里面修改语句,发现自己这样写的:
<update id="editBill" parameterType="bill">
update bill
<set>
<if test="giveUserID!='' and giveUserID!=null">giveUserID=#{giveUserID},</if>
<if test="acceptUserID!=null and acceptUserID!=''">acceptUserID=#{acceptUserID},</if>
<if test="trainnumber!=null and trainnumber!=''">trainnumber=#{trainnumber},</if>
<if test="cost!=null and cost!=''">cost=#{cost},</if>
<if test="complete!=null and complete!=''">complete=#{complete}</if>
</set>
where trackingID = #{trackingID}
</update>
一开始complete!=’‘是为了不让修改时填入空字符串,然后尝试去除了一下,成功修改了,尝试了一下发现对mysql来说0、false、空字符串是一样的值,所以在判断complete!=’'时直接被拦住了。
目前想到的解决方法是前端加限制,然后后端判断是否为空字符串。
另外要提一点是bool型在mysql中会转化成tinyint(1)型,0为false,1为true,后端可以用布尔型得到值用布尔型插入,也可以用int取值放值。