引用:
1、#{xxx}
这种方式会自动将这个值替换为PreparedStatment
中?
来使用,如果是字符串会自动加上引号,对于排序而言就无法操作
2、${xx}
这种方式叫做完全替换,直接将字符串完整的替换到这个位置,完全替换的方式可能会出现SQL
注入的安全隐患。建议在参数中不要使用这种方式。但是如果使用在排序中没有任何影响
<!-- #{sx}会使用?进行替代 ,$(xx)会完整将字符串完成替代-->
<select id="find" resultType="User" parameterType="map">
select * from t_user
<!-- 动态SQL -->
<where>
<if test="name!=null"> (username like #{name} or
nickname like #{name})</if>
<if test="type!=null"> and type=#{type}</if>
</where>
<if test="sort!=null">
order by ${sort}
<if test="order!=null">
${order}
</if>
<!-- <choose>
<when test="order!=null">${order}</when>
<otherwise>asc</otherwise>
</choose> -->
</if>
limit #{pageOffset},#{pageSize}
</select>
<select id="find_count" parameterType="map" resultType="int">
select count(*) from t_user
<if test="name!=null">where (username like #{name} or
nickname like #{name})</if>
</select>
动态 SQL:
根据不同条件拼接SQL
语句,经常出问题,动态SQL
解决此问题。
网友评论