1、模糊查询与分页查询时传入的页码
① 模糊查询的时候,不管是第一页还是第二第三页,页码都应该传1
Limit (page-1)×rows,rows
② 只有当点击下图中页码2的时候才会传入2

2、like里的特殊符号%
做项目时,使用如下模糊查询,能返回数据但是控制台莫名其妙报错,虽然不影响查询结果但是精益求精,后来使用LIKE CONCAT不报错了。可能因为%是个特殊符号
控制台报错,但是能查询到数据。另外在<>标签内不能有--,否则查询不到数据
<if test="enterpriseName!=null">
-- AND ENTERPRISE_NAME LIKE '%' #{enterpriseName,jdbcType=VARCHAR} '%'
AND ENTERPRISE_NAME LIKE '%' #{enterpriseName,jdbcType=VARCHAR} '%'
</if>
其他错误方案:对于mysql数据库
LIKE '%#{enterpriseName}%'
LIKE "%"||#{enterpriseName}||"%"
LIKE '%'+#{enterpriseName}+'%'
正确做法:对于mysql数据库
// ${}解析过来的参数值不带单引号,#{}解析传过来参数带单引号。
LIKE '%${enterpriseName}%' 此方法有注入风险
//CONCAT用来拼接查询的字符串
LIKE CONCAT(CONCAT('%',#{enterpriseName}), '%')
LIKE CONCAT('%', #{enterpriseName,jdbcType=VARCHAR}, '%')
3、这样做的目的主要是因为在 XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。而sql语句或者脚本语句中可能会存在 "<" 或 "&" 字符。为了避免错误,可以将sql语句定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。
<![CDATA[
select * from t_train_record t where t.activity_id=#{activityId}
]]>
网友评论