第一块:MyBatis 实现模糊查询方式
1.1 sql中字符串拼接
SELECT * FROM 表名 WHERE 字段名 LIKE CONCAT(CONCAT('%', #{参数}), '%');
1 2. 使用 ${…} 代替 #{…}
SELECT * FROM 表名 WHERE 字段名 LIKE '%${参数}%';
注意:($不能防止sql注入, #{}—> 可以防止sql注入的问题)
1.3 程序中拼接
Java 代码
String searchText = new StringBuilder("%").append(text).append("%").toString(); parameterMap.put("text", searchText);
Mapper 映射文件
SELECT * FROM 表名 WHERE 字段名 LIKE #{参数};
第二块:MyBatis 实现特殊字符处理之<![CDATA[ ]]>
2.1 <![CDATA[ ]]> 简介
它的全称为character data,以"** “开始,以” ]]>" 结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动地交给下游程序处理。
2.2 MyBatis 自动转义特殊字符表
特殊字符 | 替代符号 |
---|---|
& | & |
< | < |
> | > |
" | " |
’ | ' |
2.3 <![CDATA[ ]]> 特殊字符
xml 中表示: <= 小于等于、 >= 大于等于 需加 这样的标记: **** xml中有&的符号,需要
<![CDATA[&]]>这样表示&<= 小于等于 :<![CDATA[ <= ]]>
>= 大于等于:<![CDATA[ >= ]]>
第三块 模糊查询包含特殊字符
解决办法: 使用 ${…} + <![CDATA[ ]]>
模板:
<select id="searchAll" parameterType="map" resultType="map">SELECT *FROM 表名 PWHERE 1=1 <if test="参数 != null and 参数 != ''"><![CDATA[ AND P.字段名 LIKE '%${参数}%']]></if>
</select>