项目基本环境springmvc+mybatis+mysql。
问题出现
mysql中新增一条纪录,status字段值为null,导致按status条件查询给前端时,纪录遗漏。
问题排查
mysql数据库中对字段status,设置了默认值0,没有设置为非null(防止mybaits空值报错)。
mysql默认值没有起作用?
将mapper中新增语句中的status部分去掉,发现默认值出现了。分析并非默认值没起作用,而是insert语句中的null值将mysql中的默认值给覆盖了。
<insert id="add" parameterType="com.tongdatech.sys.domain.OneDay">
insert into t_styd_one_day (
id,fname,price,<!--status-->)values (
#{id,jdbcType=VARCHAR}
,#{fname,jdbcType=VARCHAR}
,#{price,jdbcType=NUMERIC}
<!--,#{status,jdbcType=INTEGER}-->
)
</insert>
jsp页面中没有提交status值?
查看jsp页面status为选择框没有””选项,表单提交后端的值应为0或1,为何出现null。(insert语句还原)
表单F12>Network中,新增记录发现status字段提交为空。字段名确认无误,选择“是”提交为空status:,尝试选择“否”提交成功status:1。
分析value值这里不能为0。修改value值为字符后,status能正常提交,正常写入mysql。{‘text’:’是’,’value’:’0’},{‘text’:’否’,’value’:’1’}
<div class="form-group">
<label style="width: 100px;"> 是否上架: </label>
<input type="text" name="status" class="easyui-combobox" data-options="data:[{'text':'是','value':0},{'text':'否','value':1}]" style="width: 200px;"/>
</div>
......
function saveData() {
$.sys.fmSubmit("#fm", url, undefined, function () {
$("#dlg").dialog("close");
$("#data1").datagrid("reload");
}, "#addBtn");
}
小结
mysql中设置了字段默认值时,insert语句中要注意避免null值覆盖默认值。
页面选择框中选项值””与0,这里提交效果是一样的,均为空,到后端对象收参看到的就是null。
数据库中null与’’的差异:查询时null值字段不会出现。