oracle中使用concat拼接map

AND ai.AUDITTITLE like concat(concat('%',#{param.projectName}),'%')

oracle中concat只有两个参数,所以需要拼接两次

 

### 编写 MyBatis 中 Oracle 数据库的模糊搜索动态 SQL 在 MyBatis 中处理 Oracle 数据库的模糊查询时,为了防止直接拼接字符串带来的安全性和语法错误问题,推荐采用如下方法来构建动态 SQL: #### 方法一:使用 `CONCAT` 函数 通过 Oracle 提供的 `CONCAT` 函数可以有效地组合字符串而不引起 SQL 注入风险。这种方式适用于简单的场景。 ```xml <select id="findUserByUsernameLike" parameterType="string" resultType="User"> SELECT * FROM users WHERE username LIKE CONCAT('%', #{username}, '%') </select> ``` 这种方法能够有效避免因手动添加百分号而引发的问题[^1]。 #### 方法二:利用 `${}` 和 `||` 操作符 当需要更灵活地控制条件表达式时,可以通过 `${}` 占位符配合 Oracle 的连接操作符 `||` 来实现复杂的逻辑判断。 ```xml <select id="dynamicSearch" parameterType="map" resultType="Order"> SELECT o.* FROM orders o <where> <if test="userId != null"> AND o.user_id = #{userId} </if> <if test="productName != null"> AND o.product_name LIKE '%' || #{productName} || '%' </if> </where> </select> ``` 此方式允许根据实际需求动态调整查询条件,并且保持良好的可读性[^4]。 #### 方法三:定义常量变量简化书写 对于频繁使用的特殊字符(如 `%`),可以在 Mapper XML 文件顶部声明局部变量,从而减少重复编码并提高维护效率。 ```xml <sql id="wildcard">%</sql> <select id="searchWithWildcard" parameterType="string" resultType="Record"> SELECT r.* FROM records r WHERE description LIKE concat(${@Wildcard}, #{keyword}, ${@Wildcard}) </select> ``` 这种做法不仅使代码更加简洁明了,同时也便于后续修改统一管理[^3]。 以上就是在 MyBatis 中针对 Oracle 数据库执行模糊匹配查询的一些常见实践方案。每种方法都有其适用范围和特点,可以根据具体的应用环境和个人偏好选择最合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值