前天,有朋友问我,select * from T_STUDENT where S_NAME like '张%';这种like语句在ibatis中怎么写,他们现在的项目是用ibatis作为持久层的框架。
我的第一反应是这样写:
<select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
select * from t_stu where s_name like #name#
</select>
select * from t_stu where s_name like #name#
</select>
但是在调用中需要在参数的前后加上%,比如这样:
return sqlMapper.queryForList("Student.showOneStudentByName", "%"+name+"%");
虽然这样可行,但总显得有些不协调。仔细看了ibaitis的文档后发现最好的写法是这样
<select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
select * from t_stu where s_name like '%'||#name#||'%'
</select>
select * from t_stu where s_name like '%'||#name#||'%'
</select>
在调用的时候就不用去前后加%了。
注意:sql语句不要写成select * from t_stu where s_name like '%$name$%',这样极易受到注入攻击。