4.Mybatis中,在Mapper的SQL映射文件中,使用<choose><when>无法识别参数的情况

正确结果

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.itheima.mapper.BrandMapper">


    <!-- 完成数据库表和Java代码的映射   -->
    <resultMap id="BrandResultMap" type="brand">
        <result column="brand_name" property="brandName"></result>
        <result column="company_name" property="companyName"></result>
    </resultMap>


    <select id="selectByConditionSingle" resultMap="BrandResultMap">
        select *
        from tb_brand
        where
        <choose><!--相当于switch-->
            <when test="status != null"><!--相当于case-->
                status = #{status}
            </when>
            <when test="companyName != null and companyName != '' "><!--相当于case-->
                company_name like #{companyName}
            </when>
            <when test="brandName != null and brandName != ''"><!--相当于case-->
                brand_name like #{brandName}
            </when>
            <otherwise>
                1 = 1
            </otherwise>
        </choose>

    </select>
</mapper>

由于使用Brand对象传参,此时使用标签,没有给Brand对象赋值,此时应该查询数据库的三条记录

但是,如果因为实体类的变量数据类型为基本类型,而不是它的包装类型,可能会出现如下错误

此时,status的默认值就会变为0,达不到预期的效果

下方为正确的实体类代码

java 复制代码
package com.itheima.pojo;

/**
 * @package: com.itheima.pojo
 * @className: Brand
 * @Description:
 * @author: haozihua
 * @date: 2024/11/8 10:32
 */
public class Brand {
    private Integer id;
    private String brandName;
    private String companyName;
    private Integer ordered;
    private String description;
    private Integer status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public Integer getOrdered() {
        return ordered;
    }

    public void setOrdered(Integer ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brandName='" + brandName + '\'' +
                ", companyName='" + companyName + '\'' +
                ", ordered=" + ordered +
                ", description='" + description + '\'' +
                ", status=" + status +
                '}';
    }
}
相关推荐
fullstack_lth1 小时前
Spring boot
java·maven
重庆小透明4 小时前
【从零开始学习JVM | 第六篇】运行时数据区
java·jvm·后端·学习
PP东4 小时前
JDK8新特性之Steam流
java
能工智人小辰5 小时前
二刷苍穹外卖 day02
java
bxlj_jcj7 小时前
深入剖析Debezium:CDC领域的“数据魔法棒”
java·架构
叶 落7 小时前
ubuntu 安装 JDK8
java·ubuntu·jdk·安装·java8
爱学习的白杨树7 小时前
Sentinel介绍
java·开发语言
XW7 小时前
java mcp client调用 (modelcontextprotocol)
java·llm
青春之我_XP7 小时前
【基于阿里云搭建数据仓库(离线)】使用UDTF时出现报错“FlatEventUDTF cannot be resolved”
数据仓库·sql·阿里云·云计算·dataworks·maxcompute
保持学习ing8 小时前
SpringBoot前后台交互 -- 登录功能实现(拦截器+异常捕获器)
java·spring boot·后端·ssm·交互·拦截器·异常捕获器