ibatis的#和$的区别、like、in的用法

本文详细解析了MyBatis中#与$符号的不同用途及其对SQL注入的影响,介绍了它们在不同场景下的应用,并给出了Oracle数据库中LIKE操作的具体示例。

# 会根据不同类型而生产字符串,如 String 类型 : aa ---> 'aa'
$ 表示原生类型,如 String 类型 : aa ---> aa

在做in,like 操作时候要特别注意

 

1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..

2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.

3.#方式能够很大程度防止sql注入.

4.$方式无法方式sql注入.

5.$方式一般用于传入数据库对象.例如传入表名.

6.一般能用#的就别用$.

oracle的like用法

select * from table where column like '%关键字%'

ibatis用法 like '%$keyword$%'或者 like ‘%'#keyword#'%’

在MyBatis-Plus中,`concat` `like` 常结合使用以实现模糊查询。以下是它们的使用方法: ### 使用 `QueryWrapper` 进行 `in` 查询 使用MyBatis-Plus的 `QueryWrapper` 进行 `in` 查询时,要使用集合而非数组,示例代码如下: ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import java.util.Arrays; import java.util.List; // 假设 entity 是实体类 QueryWrapper<Entity> queryWrapper = new QueryWrapper<>(); List<String> fieldValues = Arrays.asList("value1", "value2", "value3"); queryWrapper.in("字段名称", fieldValues); ``` ### 使用 `concat` `like` 进行模糊查询 #### 方法一:在 XML 文件中使用 `concat` 在 XML 文件里,可使用 `concat` 函数实现模糊查询,示例如下: ```xml <select id="selectUserBySql" resultType="eamon.daily.practice.user.entity.pojo.PracticeUser"> SELECT * FROM `practice_user` where sex = #{sex} <if test="name!=null and name!=&#39;&#39;"> and `name` like concat(&#39;%&#39;,#{name},&#39;%&#39;) </if> </select> ``` 这种方式的模糊查询不区分大小写,例如按照 “hello” 模糊查询也能查到 “Hello” 的内容 [^2]。 #### 方法二:在注解中使用 `concat` 在注解里也能使用 `concat` 函数,示例如下: ```java import org.apache.ibatis.annotations.Select; import java.util.List; public interface MoneyNodeMapper { @Select("<script>" + "SELECT * FROM node n " + "WHERE mn.plan_day LIKE CONCAT(&#39;%&#39; ,#{planDay} ,&#39;%&#39;) " + "</script>") List<MoneyNode> queryIdAndPlanDay(String planDay, List states); } ``` #### 方法三:在 XML 文件中使用其他 `like` 写法 除了 `concat` 方式,还可使用 `${}` 或 `#{}` 实现模糊查询: ```xml <where> <trim suffixOverrides=","> <if test="id != null and id != &#39;&#39;"> and id = #{id} </if> <if test="name != null and name != &#39;&#39;"> <!-- 使用 concat --> and name like concat(&#39;%&#39;,#{name},&#39;%&#39;) </if> <if test="examTypeName!=null and examTypeName!=&#39;&#39;"> <!-- 使用 ${} --> and exam_type_name like &#39;%${examTypeName}%&#39; </if> <if test="examTypeName!=null and examTypeName!=&#39;&#39;"> <!-- 使用 #{} --> and exam_type_name like "%"#{examTypeName}"%" </if> </trim> </where> ``` ### 总结 - `in` 查询使用 `QueryWrapper` 的 `in` 方法,参数为字段名集合。 - `like` 模糊查询可在 XML 文件或注解中使用 `concat` 函数,也可使用 `${}` 或 `#{}` 实现 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值