下面介绍MyBatis的两种模糊查询(LIKE)方式,分别如下:
因为使用${}会将传递过来的值直接拼接到SQL语句中。而使用#{}会使用类似于PreparedStatement的方式进行替换,即使用?作为占用符(#{}与${}的区别)。如下:
<select id="getUserInfo" resultMap="UserMap" parameterType="hashmap"> SELECT username, password, sex, age FROM users a WHERE a.username LKIE '%${name}%' </select>
使用"+"或者StringBuffer等方式直接拼接处模糊查询语句。
java代码:
// String searchText = "%" + name + "%"; String searchText = new StringBuilder("%").append(name).append("%").toString(); parameterMap.put("name", searchText);
Mapper文件:
<select id="getUserInfo" resultMap="UserMap" parameterType="hashmap"> SELECT username, password, sex, age FROM users a WHERE a.username LKIE #{name} </select>
大小写转换跟数据库相关,因为UPPER方法是数据库相关的。有可能其他数据库不支持这个函数,或者是使用其他函数来支持该功能。因此,这种方式对数据库兼容不是友好。如下:
SELECT * FROM TABLENAME WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'
或者
SELECT * FROM TABLENAME WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'
点击学习 MyBatis 教程,了解更多的 MyBatis 知识!