ibatis  SQL里进行条件查询

本文介绍了SQL中常用的条件查询关键字及其用法,包括isEqual、isNotNull等,并展示了如何使用这些关键字来构建复杂的查询条件。此外,还讲解了SQL中的集合操作如union、intersect等的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件查询关键字:

    <isPropertyAvailable>  如果参数有使用则查询条件有效。 
    <isNotPropertyAvailable> 如果参数没有使用则查询条件有效。 
    <isNull> 如果参数为NULL则查询条件有效。 
    <isNotNull> 如果参数不为NULL则查询条件有效。 
    <isEmpty> 如果参数为空则查询条件有效。 
    <isNotEmpty> 如果参数不为NULL或者“”则查询条件有效。参数的数据类型为Collection。 

String类型的参数,数不为NULL或“”,如下所示: 
<isNotEmpty  prepend=”AND” property=”firstName” > 
    FIRST_NAME=#firstName# 
</isNotEmpty> 

    <isEqual> 如果参数相等于值则查询条件有效。 
    <isNotEqual> 如果参数不等于值则查询条件有效。 
    <isGreaterThan> 如果参数大于值则查询条件有效。 
    <isGreaterEqual> 如果参数等于值则查询条件有效。 
    <isLessEqual> 如果参数小于值则查询条件有效。如下所示: 

<isLessEqual  prepend = ”AND” property = ”age” compareValue = ”18” > 
    ADOLESCENT = ‘TRUE’ 
</isLessEqual> 

元素属性:

    prepend:  可被覆盖的SQL语句组成部分,添加在语句的前面。 
    property:  被比较的属性 
    compareProperty: 另一个被比较的属性 
    compareValue:    被比较的值 

具体应用:

1. <isEqual>根据参数值判断,相当于equals,通常是判断状态值;

    property=" "是SQL里的参数名,compareValue=" "是要判断比较的值;

    示例:根据开房方式查询原房价,checkType是开房方式,等于1是天房,查询天房房价,等于2是钟点房,查询钟点房房价。

<!-- 查询原房价 -->
<select id="getRoomFormerPrice"  parameterClass="HashMap" resultClass="int">
    select 
    <isEqual property="checkType" compareValue="1">
        ROOM_PRICE
    </isEqual>
    <isEqual property="checkType" compareValue="2">
        HOUR_ROOM_PRICE
    </isEqual>
    from
        t_roomprice_scheme
    where
        ROOM_TYPE_ID=#roomTypeId#
    AND
        ROOM_SCHEME_ID=#roomSchemeId#
    AND 
        HOTEL_ID=#hotelId#
</select>

2.<isNotNull>判断property字段是否是null,通常用于条件查询:

<isNotNull prepend="AND" property="id" >
    a.id=#id#
</isNotNull>

集合操作 并 交 差运算:

 union :得到两个查询结果的并集,并且自动去掉重复行。不会排序

 union all:得到两个查询结果的并集,不会去掉重复行。也不会排序

 intersect:得到两个查询结果的交集,并且按照结果集的第一个列进行排序

 minus:得到两个查询结果的减集,以第一列进行排序

### `isequal` 函数的作用及用法 `isequal` 是 MATLAB 中用于比较多个输入是否相等的函数,其核心功能是判断多个变量、数组或结构体在内容上是否完全一致。该函数不仅支持数值比较,还能处理逻辑值、字符串、元胞数组、结构体等多种数据类型。 #### 数值比较特性 在比较数值时,`isequal` 不考虑数据类型的差异。例如,整数 `1` 和逻辑值 `true` 被视为相等;字符 `'A'` 与对应的 ASCII 值 `65` 也被判定为相等[^2]。这种机制使得在跨数据类型比较时更为灵活。 #### 处理 NaN 的方式 对于包含 `NaN`(非数字)的数组,`isequal` 默认认为不同的 `NaN` 不相等,因此包含 `NaN` 的数组在比较时会返回 `false`(即逻辑值 `0`)[^1]。如果需要将所有 `NaN` 视为相等,可以使用替代函数 `isequalwithequalnans`。 ```matlab A = [1, NaN]; B = [1, NaN]; isequal(A, B) % 返回 false (0),因为 NaN 不被视为相等) ``` #### 结构体和元胞数组的比较 当比较结构体或元胞数组时,`isequal` 会递归地检查其所有元素的内容是否完全一致。只有当每个字段或元素都相等时,才会返回逻辑值 `1`(即 `true`),否则返回 `0`(即 `false`)[^2]。 ```matlab C1 = {1, 'text', [1 2 3]}; C2 = {1, 'text', [1 2 3]}; isequal(C1, C2) % 返回 true (1) ``` #### 应用场景 - **调试和验证数据一致性**:在算法开发中,用于验证两个复杂结构(如多维数组、嵌套结构体)是否具有相同的输出。 - **测试脚本自动化**:在单元测试中,通过 `isequal` 检查预期输出与实际输出是否匹配。 - **配置比较**:在系统设置或参数管理中,判断当前配置与默认配置是否一致。 #### 示例代码 以下是一个使用 `isequal` 判断两个结构体是否相等的示例: ```matlab S1.a = 1; S1.b = [1 2]; S2.a = 1; S2.b = [1 2]; isequal(S1, S2) % 返回 true (1) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值