可以写 <if test="num==null"> 吗 num 为null
时间: 2024-02-16 07:03:05 浏览: 57
在 MyBatis 中,可以使用以下方式判断一个属性是否为 null:
```
<if test="num == null">
<!-- 如果 num 为 null,则执行这里的代码 -->
</if>
```
在这个例子中,判断 num 是否为 null 的表达式是 `num == null`,如果为 true,就会执行 if 标签内的代码。
需要注意的是,这种方式只能判断一个属性是否为 null,不能判断一个属性是否为某个具体的值。如果要判断一个属性是否为某个具体的值,可以使用以下方式:
```
<if test="num != null and num == 0">
<!-- 如果 num 不为 null 且等于 0,则执行这里的代码 -->
</if>
```
在这个例子中,判断 num 是否为 null 且等于 0 的表达式是 `num != null and num == 0`,如果为 true,就会执行 if 标签内的代码。
相关问题
<select id="queryLayerList" resultType="com.tuimi.gwznkf.storage.entity.vo.StorageLocationVo"> SELECT DISTINCT layer_num as layerNum FROM t_shelf_section WHERE layer_num = ( SELECT MAX( layer_num ) FROM t_shelf_section WHERE shelf_id = 13 <if test="shelfId !=null and shelfId !=''"> and shelf_id = #{shelfId} </if> ) <if test="shelfId !=null and shelfId !=''"> and shelf_id = #{shelfId} </if> </select> 代码检查
这是一个 MyBatis 的 XML 配置文件中的一个 SQL 查询语句,查询条件包括参数 `shelfId`。该查询语句的作用是获取某个货架上最大的层数(layerNum),并返回一个 `StorageLocationVo` 对象列表。
查询语句的实现逻辑是:先查询指定货架上最大的层数,然后根据该层数查询所有层数为该层数的货架区段,最后返回一个包含不重复层数的 `StorageLocationVo` 对象列表。
在 SQL 查询语句中,使用了 MyBatis 的动态 SQL 语法,根据 `shelfId` 参数是否为空,动态生成对应的查询条件。同时,也使用了 MyBatis 的结果集映射功能,将查询结果映射为 `StorageLocationVo` 对象。
update zk_transfer_info <trim prefix="set" suffixOverrides=","> cwz_status=#{zkTransferInfo.cwzStatus},cwz_date=#{zkTransferInfo.cwzDate},approval_status=#{zkTransferInfo.approvalStatus}, <if test="zkTransferInfo.receiptsTatus != '' and zkTransferInfo.receiptsTatus != null"> receipts_tatus=#{zkTransferInfo.receiptsTatus} </if> <if test="zkTransferInfo.cwzReason != '' and zkTransferInfo.cwzReason != null"> cwz_reason=#{zkTransferInfo.cwzReason} </if> </trim> <where> flag=1 and applicant_num=#{zkTransferInfo.applicantNum} </where> 当两个if 条件都满足时会报错 怎么修改
可以尝试将两个if条件改为使用<choose>标签,如下所示:
```
<update id="updateZkTransferInfo" parameterType="Map">
update zk_transfer_info
<trim prefix="set" suffixOverrides=",">
cwz_status=#{zkTransferInfo.cwzStatus},
cwz_date=#{zkTransferInfo.cwzDate},
approval_status=#{zkTransferInfo.approvalStatus},
<choose>
<when test="zkTransferInfo.receiptsTatus != '' and zkTransferInfo.receiptsTatus != null">
receipts_tatus=#{zkTransferInfo.receiptsTatus},
</when>
<otherwise></otherwise>
</choose>
<choose>
<when test="zkTransferInfo.cwzReason != '' and zkTransferInfo.cwzReason != null">
cwz_reason=#{zkTransferInfo.cwzReason}
</when>
<otherwise></otherwise>
</choose>
</trim>
<where>
flag=1 and applicant_num=#{zkTransferInfo.applicantNum}
</where>
</update>
```
这样可以避免在两个if条件都满足时多出逗号导致报错的问题。
阅读全文