mybatis做like模糊查询

本文详细介绍使用MyBatis进行模糊查询的三种方法:直接在参数中加入通配符、利用bind标签绑定变量和使用CONCAT函数。这些技巧有助于提高SQL查询的灵活性和效率。

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

 

1.  参数中直接加入%%

  param.setUsername("%CD%");
      param.setPassword("%11%");

	<select  id="selectPersons" resultType="person" parameterType="person">
		select id,sex,age,username,password from person where true 
			<if test="username!=null"> AND username LIKE #{username}</if>
			<if test="password!=null">AND password LIKE #{password}</if>
	
	</select>

2.  bind标签

<select id="selectPersons" resultType="person" parameterType="person">
  <bind name="pattern" value="'%' + _parameter.username + '%'" />
  select id,sex,age,username,password 
  from person
  where username LIKE #{pattern}
</select>

 

 

3. CONCAT

where username LIKE concat(concat('%',#{username}),'%')

  SELECT * FROM t_app  
   <where>  
      <if test="name != null">  
         name like CONCAT('%','${name}','%' )  
      </if>  
      <if test="url != null">  
         AND url like CONCAT('%','${url}','%' )  
      </if>  
  </where>  
 limit #{begin},${end}

### MyBatis中实现LIKE模糊查询 在MyBatis中,可以通过多种方式实现`LIKE`模糊查询。以下是常见的几种方法及其具体实现: #### 方法一:使用 `concat` 函数和 `#{}` 参数占位符 这种方式利用SQL中的`CONCAT`函数将通配符 `%` 和参数动态拼接在一起。这种方法可以有效防止SQL注入攻击。 ```sql SELECT * FROM table_name WHERE column_name LIKE CONCAT('%', #{param}, '%'); ``` 此方法通过预编译的SQL语句传递参数,从而提高安全性[^1]。 --- #### 方法二:直接使用 `${}` 插入字符串并手动添加 `%` `${}` 是一种直接替换变量的方式,适合用于静态SQL场景。需要注意的是,这种写法存在潜在的安全风险,容易受到SQL注入攻击。 ```sql SELECT * FROM table_name WHERE column_name LIKE '%${param}%'; ``` 尽管如此,在某些特定情况下(如完全信任输入数据),该方法仍然被广泛采用[^2]。 --- #### 方法三:组合 `concat` 和 `${}` 如果希望既保持灵活性又减少安全隐患,则可以选择混合模式——即部分固定逻辑由数据库处理而其他部分交予程序控制。 ```sql SELECT * FROM table_name WHERE column_name LIKE CONCAT('%%', ${param}); ``` 不过仍需谨慎对待任何未经验证的数据源[^3]。 --- #### 方法四:借助双竖线 (`||`) 实现 Oracle 数据库下的功能扩展 对于支持特殊运算符 (比如Oracle 的 || ) 的 RDBMS 而言, 我们还可以尝试如下形式: ```sql -- 适用于 Oracle 数据库环境 SELECT * FROM table_name WHERE column_name LIKE '%' || #{param} || '%'; ``` 这同样依赖于框架内部机制完成最终解析工作[^4]. --- #### 推荐的最佳实践 综合考虑性能与安全因素之后 , 应优先选用基于 **Prepared Statement** 构建起来的标准接口调用链路; 同时确保所有外部提交过来的内容都经过严格校验后再参与实际执行流程. ```java // Java Mapper Interface Example List<Record> findRecordsByKeyword(@Param("keyword") String keyword); ``` 配合上述任意一条合法声明即可满足日常开发需求的同时保障整体质量水平处于可控范围之内 . ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值