用了一段时间的Mybatis了,对于$和#的用法老是很迷糊,特此记下加深记忆。
简单来说 #{} 会在将参数加上引号,例如:
SELECT
*
FROM
user
WHERE
username=#{username} ;
带上参数后的SQL语句即:
SELECT
*
FROM
user
WHERE
username="XuLiTong" ;
而${}并不会在给参数加上引号,例如:
SELECT
*
FROM
user ORDER BY ${id} DESC LIMIT ${offset},${limit};
带上参数后的SQL语句为:
SELECT
*
FROM
user ORDER BY id DESC LIMIT 0,10;
可见,mybatis对参数没有进行任何的处理。通常${}用于GROUP BY,ORDER BY ,LIMIT等的后面。
但是,实际应用中,并不提倡使用 ${},因为使用 #{} 写法,除了可以防止sql注入以外,还能在参数里含有单引号的时候自动转义。