mapper.xml中<if>标签输入的参数为0的时候的坑

先说结论:

<if>标签中,对于非字符串类型的数据,无需判断 != ‘’,否则返回结果为false

今天改代码过滤查询结果的时候有一个输入的参数是0,然后这句话失效了
在这里插入图片描述
在这里插入图片描述
本来以为是params没有拿到这个值,或者数据库查询有问题,结果debug发现params里面获取到了,数据库直接查询的结果也没有问题

但是MyBatis Log插件上的记录里查询条件并没有equipmentType这一条件,于是把问题锁定在了mapper文件上
在这里插入图片描述

在这里插入图片描述
就是这句话

<if test="equipmentType != null and equipmentType != ''"> and tem.equipment_type = #{equipmentType}</if>

把<if>标签的内容删掉之后可以正常查询,所以是<if>标签的问题…
整型数据(Integer ,int)值为0时在if标签中会判断为空字符串,if标签值为false,查询条件不生效

<if test="equipmentType != null"> and tem.equipment_type = #{equipmentType}</if>

尝试之后,删掉判断为 != ‘’ 就行

或者,,在添加查询条件的时候把参数toString一下,没试过,感觉应该可行

`mapper.xml`文件是MyBatis框架用于配置SQL语句的部分。它是处理数据库操作的主要场所,通过XML语法描述各种数据库查询、更新等操作。在实际应用,它结合了`Mapper`接口来完成对数据库的操作,使得DAO层的代码更简洁、易于维护。 ### `mapper.xml`的基本结构: `mapper.xml`文件通常包含以下几部分: 1. **命名空间** (`namespace`):这是`mapper`接口的全限定名。每个`mapper`接口对应一个唯一的命名空间,在调用方法时需要引用这个命名空间。 2. **选择器表达式** (`<choose>`、`<when>`、`<otherwise>`):允许基于某个条件选择性的执行某个操作,这类似于SQL查询的CASE语句。 3. **嵌套选择器表达式** (`<foreach>`、`<choose>`、`<when>`、`<otherwise>`):用于循环执行一系列相似的操作,比如遍历集合并执行相同的查询。 4. **SQL映射语句** (`<select>`、`<insert>`、`<update>`、`<delete>`):直接编写SQL语句来进行特定的数据操作。 5. **动态SQL标签** (`<if>`、`<where>`、`<bind>`): 根据某些条件来动态生成SQL语句的一部分内容,提高SQL语句的灵活性。 ### 示例: ```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.service.UserMapper"> <!-- 查询所有用户 --> <select id="selectAllUsers" resultType="com.example.entity.User"> SELECT * FROM user </select> <!-- 根据ID获取用户信息 --> <select id="getUserById" parameterType="int" resultType="com.example.entity.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` 在这个例子: - `<select id="selectAllUsers">` 表示定义了一个用于查询所有用户的SQL语句。 - `<select id="getUserById" parameterType="int" resultType="com.example.entity.User">` 定义了一个用于根据ID获取特定用户的SQL语句,并指定了输入参数类型及结果集返回的类型。 --- ### 相关问题: 1. `mapper.xml`的作用是什么? 2. 怎样在MyBatis编写动态SQL语句? 3. 如何在项目引入并配置MyBatis与`mapper.xml`?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值