关于mybaties like与if标签进行string判断

本文介绍如何在Oracle和MySQL数据库中使用动态SQL实现模糊搜索功能,通过条件判断语句和字符串函数实现列名的动态匹配。

使用oracle

	<if test='cloumn!="str"'>
		cloumn like ('%'||#{cloumn}||'%')
	</if>

即可
如果是mysql,sql换为

	cloumn like concat('%',#{cloumn},'%')
### 在 MyBatis 的 `<if>` 标签判断变量是否等于 1 在 MyBatis 的动态 SQL 中,`<if>` 标签用于根据条件动态生成 SQL 片段。当需要判断某个变量是否等于特定值(如 `1`)时,可以在 `<if>` 标签的 `test` 属性中编写相应的表达式。 以下是具体的实现方式: #### 实现示例 假设有一个名为 `status` 的变量,我们希望在 SQL 查询中仅当 `status` 等于 `1` 时加入对应的过滤条件,则可以按照以下方式进行配置: ```xml <select id="selectByStatus" parameterType="map" resultType="User"> SELECT * FROM users <where> <!-- 判断 status 是否等于 1 --> <if test="status == 1"> AND status = #{status} </if> </where> </select> ``` 在这个例子中,`<if>` 标签中的 `test` 属性包含了 OGNL 表达式 `status == 1`,表示只有当传入参数 `status` 的值为 `1` 时,才会将 `AND status = #{status}` 添加到最终生成的 SQL 中[^2]。 #### 注意事项 - **OGNL 表达式的使用**:MyBatis 支持 OGNL(Object-Graph Navigation Language)表达式语法,因此可以直接在 `test` 属性中书写类似于 Java 的布尔表达式。 - **类型匹配问题**:如果 `status` 是字符串类型的参数,而数据库字段是数值型,则需要特别注意类型转换问题。例如,应该写成 `test='status.equals("1")'` 来确保比较操作正确执行。 #### 完整代码示例 下面提供了一个完整的场景演示,展示如何在一个查询中综合运用多个 `<if>` 标签以及判断变量是否等于 `1` 的逻辑: ```xml <select id="getUserList" parameterType="map" resultType="User"> SELECT * FROM users <where> <!-- 判断 name 是否为空 --> <if test="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </if> <!-- 判断 age 是否大于指定值 --> <if test="age != null and age > 0"> AND age >= #{age} </if> <!-- 判断 status 是否等于 1 --> <if test="status == 1"> AND status = #{status} </if> </where> </select> ``` 此代码片段展示了多种条件组合的情况,并且明确了如何针对不同需求设计各自的 `<if>` 判断逻辑。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值