项目场景:
在一个分页条件查询中,有个Integer类型的参数proxyFlag,用来表示是否是网关设备 1表示是,0表示否
问题描述:
提示:这里描述项目中遇到的问题:
例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:
Controller层代码
//其他参数省略
public Result<PageDTO<Device>> getProxyByCondition(
@RequestParam(required = false, name = "proxyFlag") Integer proxyFlag) {
XML代码
<select id="getDeviceByCondition" resultType="com.nengdi.emp.entity.bo.Device">
SELECT * FROM t_device tg
<where>
<if test="proxyFlag != null and proxyFlag != ''">
tg.proxy_flag = #{proxyFlag}
</if>
</where>
</select>
当用POSTMAN调用接口,proxyFlag参数传0时,控制台打印SQL
SELECT * FROM t_device tg
发现没有条件,导致查询数据并不是想要的,但是传1是有条件的
原因分析:
Interger字段的参数 传0,在mybatis会将其转化为空字符串,会被当成 ’ ’
解决方案:
XML修改
<select id="getDeviceByCondition" resultType="com.nengdi.emp.entity.bo.Device">
SELECT * FROM t_device tg
<where>
<if test="proxyFlag == 0 or (proxyFlag != null and proxyFlag != '')">
tg.proxy_flag = #{proxyFlag}
</if>
</where>
</select>