这两天遇到一个问题,如图点击表格上面会出现排序和分页

原来的想法
<select id="getUserList" resultMap="BaseResultMap" parameterType="map">
select
<include refid="Base_Column_List" />
from user
<if test='fleld != null and fleld != ""'>
ORDER BY #{fleld}
</if>
<if test='order != null and order != ""'>
#{order}
</if>
limit #{start},#{limit}
</select>
其中 fleld 排序依据;order 升降序;start 查询起始点;limit 当前页面显示的数量;这些值都是从前端传过来的,可是怎么都不能实现,在数据库的命令界面 “select * from user order by id desc limit 0,3;”是可以查询的,这就说明语句没问题,那就是传入的值有问题,可是我将四个传入的值分别打印出来,发现没问题。当时我就慌了, 这算是怎么了????
然后就去查关于mybatis相关xml查询语句时需注意的事项发现了${}
就又去查了下${}以及和#{}的区别:
1.***#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{id},如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”***。
2. *${}将传入的数据直接显示生成在 sql 中;如:order by ${id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id。
3. #{}方式能够很大程度防止sql注入。
4. ${}方式无法防止Sql注入。
5. ${}方式一般用于传入数据库对象,例如传入表名。
6.原生jdbc不支持占位符的地方我们就可以使用${}进行取值,例如查询某一年的员工工资表格:select * from ${year}_salary where xxx;
看到这些我就将我的代码改了下,发现OK了
<select id="getUserList" resultMap="BaseResultMap" parameterType="map">
select
<include refid="Base_Column_List" />
from user
<if test='fleld != null and fleld != ""'>
ORDER BY ${fleld}
</if>
<if test='order != null and order != ""'>
${order}
</if>
limit #{start},#{limit}
</select>


MyBatis排序与分页优化

本文分享了在MyBatis中实现排序和分页功能的优化经验,通过对比#{}
3407

被折叠的 条评论
为什么被折叠?



