相信每个人都写过这样的的 MyBatis 的 SQL 代码:
SELECT * FROM user
WHERE NAME LIKE concat('%', concat( '小', '%' ))
查询结果如下:
那么如果将'小'换成 % 呢?
再换成'_'呢?
没错,它会查询出所有数据,说来惭愧,这也是我一个 5 年 Java 开发程序员才注意到的事情!!!GOD
问题出现了就要解决它,有大佬推荐说 MySQL 可以使用 ngram 进行分词,我不知道是啥也没用过,而且我用的数据库是 Oracle
不过我找到了另外一种既可以在 Oracle 用的也可以在 MySQL 用的解决办法:
String name = user.getUserName();
if(null!=name && !"".equals(name)){
user.setName(name.replaceAll("\\%","\\\\%").replaceAll("\\_","\\\\_"));
}
为什么图中用的 @?因为 MySQL 用\会报错,只能用两个斜杠\ \ ,但是在 Oracle 中是可以只用一个\的。好吧,问题就是这么解决掉啦,再小的功能也有可能翻车,哎,写代码得格外小心呀。