mybatis xml 对int类型如何写if条件避免java的默认值0的干扰
在 MyBatis 中,如果你想在 XML 配置中使用 <if>
标签来判断 int
类型的参数,并且避免 Java 的默认值 0
干扰你的判断,你可以使用 Integer
包装类而不是基本类型 int
。这是因为 Integer
可以为 null
,而基本类型 int
不能。
示例表结构
假设有一个名为 work_orders
的表:
sql
CREATE TABLE work_orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_status INT,
order_time DATETIME
);
使用 Integer 类型参数
1. Mapper 接口
首先,在你的 Mapper 接口中使用 Integer
类型:
java
package com.example.mapper;
import com.example.model.WorkOrder;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface WorkOrderMapper {
List<WorkOrder> selectWorkOrders(@Param("orderStatus") Integer orderStatus);
}
2. Mapper XML 文件
在 XML 文件中,你可以使用 <if>
标签来判断 orderStatus
是否为 null
,以避免默认值 0
的干扰:
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.WorkOrderMapper">
<!-- 动态查询示例 -->
<select id="selectWorkOrders" resultType="com.example.model.WorkOrder">
SELECT * FROM work_orders
WHERE 1=1
<if test="orderStatus != null">
AND order_status = #{orderStatus}
</if>
</select>
</mapper>
示例查询
假设你希望查询 order_status
为 1
的所有工单,你可以像这样调用:
java
package com.example;
import com.example.mapper.WorkOrderMapper;
import com.example.model.WorkOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class WorkOrderService {
@Autowired
private WorkOrderMapper workOrderMapper;
public List<WorkOrder> getWorkOrders(Integer orderStatus) {
return workOrderMapper.selectWorkOrders(orderStatus);
}
}
在你的业务代码中调用 getWorkOrders(1)
将会返回所有 order_status
为 1
的工单。
注意事项
- 使用包装类 :确保在 Mapper 接口中使用
Integer
类型,而不是基本类型int
。 - 避免默认值干扰 :通过使用
<if>
标签和null
判断,可以避免默认值0
对查询条件的干扰。 - SQL 安全性:确保你传递的参数是安全的,避免 SQL 注入等安全问题。
完整示例
以下是完整的 Mapper 接口和 XML 文件示例:
WorkOrderMapper.java
java
package com.example.mapper;
import com.example.model.WorkOrder;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface WorkOrderMapper {
List<WorkOrder> selectWorkOrders(@Param("orderStatus") Integer orderStatus);
}
WorkOrderMapper.xml
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.WorkOrderMapper">
<!-- 动态查询示例 -->
<select id="selectWorkOrders" resultType="com.example.model.WorkOrder">
SELECT * FROM work_orders
WHERE 1=1
<if test="orderStatus != null">
AND order_status = #{orderStatus}
</if>
</select>
</mapper>
通过这种方式,你可以确保在进行条件判断时不会受到 Java 默认值 0
的干扰。