
mybatis Integer字段值传0,判断不等于空字符串,识别成空字符串排查解决
根本原因: mybatis将传入的Integer类型的0被识别成空字符串
在mbatis中使用Xml配置sql语句时,出现了这样一个问题。入的参数为0去做判断时,mybatis会把参数0当成是空字符串去判断而引起查询结果错误。
insert into book
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="sno != null" >
sno,
</if>
<if test="sname != null" >
sname,
</if>
<if test="weekRentDiscountFlag != null and weekRentDiscountFlag != ''" >
week_rentDiscount_flag,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="sno != null" >
#{sno,jdbcType=INTEGER},
</if>
<if test="sname != null" >
#{sname,jdbcType=VARCHAR},
</if>
<if test="weekRentDiscountFlag != null and weekRentDiscountFlag != ''" >
#{weekRentDiscountFlag,jdbcType=VARCHAR},
</if>
</trim>这样写,当weekRentDiscountFlag =0时,mybatis将不会增加该条件新增,因为mybatis框架会将weekRentDiscountFlag 识别为空字符串。
打印项目中的执行SQL,发现weekRentDiscountFlag=0的时候,不会添加值。
2024-11-22 15:15:49.617 DEBUG 4744 --- [ main] c.s.mapper.BookMapper.insertSelective : ==> Preparing: insert into book ( sno, sname ) values ( ?, ? )
2024-11-22 15:15:49.731 DEBUG 4744 --- [ main] c.s.mapper.BookMapper.insertSelective : ==> Parameters: 126(String), test1(String)
2024-11-22 15:15:49.759 DEBUG 4744 --- [ main] c.s.mapper.BookMapper.insertSelective : <== Updates: 1修改之后:去掉 and weekRentDiscountFlag != '' 条件
insert into book
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="sno != null" >
sno,
</if>
<if test="sname != null" >
sname,
</if>
<if test="weekRentDiscountFlag != null" >
week_rentDiscount_flag,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="sno != null" >
#{sno,jdbcType=INTEGER},
</if>
<if test="sname != null" >
#{sname,jdbcType=VARCHAR},
</if>
<if test="weekRentDiscountFlag != null" >
#{weekRentDiscountFlag,jdbcType=VARCHAR},
</if>
</trim>打印SQL日志如下:
2024-11-22 15:11:58.351 DEBUG 1432 --- [ main] c.s.mapper.BookMapper.insertSelective : ==> Preparing: insert into book ( sno, sname, week_rentDiscount_flag ) values ( ?, ?, ? )
2024-11-22 15:11:58.464 DEBUG 1432 --- [ main] c.s.mapper.BookMapper.insertSelective : ==> Parameters: 126(String), test1(String), 0(Integer)
2024-11-22 15:11:58.476 DEBUG 1432 --- [ main] c.s.mapper.BookMapper.insertSelective : <== Updates: 1解决方案: 1、更改if判断条件:当传入的参数有0时,只判断!=null即可。 2、将字段类型转化为String类型。