大家都熟悉sql语句中带条件查询的写法,比如:
select * from USERS where USER_NAME like '%davidchou%';
这种like语句在ibatis中怎么写?是像下面这样吗:
<select id="getUserByName" parameterClass="String" resultMap="userMap">
select * from USERS where USER_NAME like #name#
</select>
这样写显然不行, 在调用中需要在参数的前后加上%,比如这样:
return sqlMapper.queryForList("User.getUserByName", "%"+name+"%");
这样可行,但总显得有些不协调。 像这种与sql相关的操作符,还是写在sql中比较妥当。
最后针对oracle数据库写法为:
<select id="getUserByName" parameterClass="String" resultMap="userMap">
select * from USERS where USER_NAME like '%'||#name#||'%'
</select>
在调用的时候就不用去前后加%了。
写到这里,大家可能会想到#与$用法的区别,因此可以写成select * from USERS where USERNAME like '%$name$%'
但是请注意:sql语句不要写成,这样极易受到注入攻击。
补充说明一下:
对于不同数据字符串连接符不一样。列举mysql和SQLServer如下:
Mysql:
SELECT *
FROM USERS
WHERE USER_NAME like CONCAT('%', #username#, '%')
-----------------------------------------------------------------------------------------------------------------------------
SQLServer:
SELECT *
FROM USERS
WHERE USER_NAME like '%' + #username# + '%'