【Mybatis】mybatis xml 对int类型如何写if条件避免java的默认值0的干扰

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_status1 的所有工单,你可以像这样调用:

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_status1 的工单。

注意事项

  1. 使用包装类 :确保在 Mapper 接口中使用 Integer 类型,而不是基本类型 int
  2. 避免默认值干扰 :通过使用 <if> 标签和 null 判断,可以避免默认值 0 对查询条件的干扰。
  3. 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 的干扰。

相关推荐
Jelena1577958579214 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
神明不懂浪漫14 小时前
【第五章】Java中的继承与多态
java·开发语言
AI多Agent协作实战派16 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit17 小时前
Java+Ai+vue
java·spring·maven
qq_25183645717 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive17 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿17 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧17 小时前
Eclipse 批量文本替换
java·ide·eclipse
程序员清风17 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试
一只枫林17 小时前
MySQL内、外连接知识点汇总
java·前端·数据库