关于 ibatis like 用法转

本文介绍了在不同数据库中实现SQL Like语句的方法,包括Oracle、MySQL及SQL Server等,并列举了各数据库间的字符串连接符差异。适用于需要进行跨数据库开发的场景。

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

关于 ibatis like 用法转


Sql代码
1.SELECT *   2.      FROM user  3.      WHERE username like '%'  || #username# || '%'  SELECT * FROM user WHERE username like '%' || #username# || '%'
 

       其实上面的语句是针对Oracle 的,对于不同数据字符串连接符不一样。现列举mysql和SQLServer如下:

    
Mysql:

 
Sql代码 1.SELECT *   2.      FROM user  3.      WHERE username like CONCAT('%', #username#, '%')  SELECT * FROM user WHERE username like CONCAT('%', #username#, '%')
  
SQLServer:

Sql代码 1.SELECT *   2.      FROM user  3.      WHERE username like '%' + #username# +  '%'  SELECT * FROM user WHERE username like '%' + #username# + '%'
-----------------------------------------------------------------------------------------------------------------------------

      关于数据库字符串连接符简单列举我使用过的一些数据库如下:

 
Oracle SQLServer Mysql DB2
|| 或 CONCAT() + CONCAT() || 或 CONCAT()

### iBatis 中 if-else 的用法及实现 在 iBatis(MyBatis 的前身)中,动态 SQL 是通过 `<if>`、`<choose>`、`<when>` 和 `<otherwise>` 等标签来实现的。虽然 iBatis 没有直接提供 `else` 标签,但可以通过 `<choose>` 标签及其子标签 `<when>` 和 `<otherwise>` 来模拟 `if-else` 的功能[^1]。 #### 使用 `<choose>` 实现 if-else 功能 以下是一个示例,展示了如何通过 `<choose>` 标签实现多分支条件判断: ```xml <select id="findUser" parameterClass="map" resultClass="User"> SELECT * FROM USER <where> <choose> <when test="username != null"> AND username = #username# </when> <when test="email != null"> AND email = #email# </when> <otherwise> AND active = 1 </otherwise> </choose> </where> </select> ``` 在此示例中: - `<choose>` 标签充当了 `if-else` 的主结构。 - 每个 `<when>` 标签相当于一个 `if` 或 `else if` 条件,只有当其 `test` 属性的表达式为真时才会执行对应的 SQL 片段[^2]。 - `<otherwise>` 标签则作为默认分支,在所有 `<when>` 条件都满足时执行。 #### 使用 `<if>` 实现简单的条件判断 如果只需要实现简单的条件判断,可以直接使用 `<if>` 标签。例如: ```xml <select id="findUserByCondition" parameterClass="map" resultClass="User"> SELECT * FROM USER <where> <if test="username != null"> AND username = #username# </if> <if test="email != null"> AND email = #email# </if> </where> </select> ``` 在这个例子中,SQL 查询会根据参数值动态添加条件。如果 `username` 和 `email` 都为空,则两个条件都会被包含在查询中。 #### 注意事项 - 确保在动态 SQL 中正确处理空值和默认值,以避免生成无效的 SQL 语句。 - 使用 `<where>` 标签可以自动处理多余 `AND` 或 `OR` 关键字的问题,从而简化 SQL 拼接逻辑。 - 如果条件较多或逻辑复杂,建议将重复的子句提取为 `<include>` 标签,以提高代码的可维护性。 #### 示例代码 以下是一个完整的动态 SQL 查询示例,展示如何结合 `<choose>` 和 `<if>` 标签构建复杂的查询条件: ```xml <select id="searchUsers" parameterClass="map" resultClass="User"> SELECT * FROM USERS <where> <choose> <when test="id != null"> AND id = #id# </when> <when test="name != null"> AND name LIKE CONCAT('%', #name#, '%') </when> <otherwise> AND status = 1 </otherwise> </choose> <if test="age != null"> AND age = #age# </if> </where> ORDER BY created_at DESC </select> ``` 此示例展示了如何通过嵌套的 `<choose>` 和 `<if>` 标签构建复杂的查询条件。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值