最近遇到了这样一个需求,给一个输入框,这个输入款呢可以输入一个店铺名或者手机号码搜索。
若输入店铺名,则采用模糊搜索,若输入手机号码则精确搜索。
SQL 语句不难,一个参数包含两种可能,用一个 or 连接即可
可遇到一个骚问题,单独模糊搜索时,有内容输出,可加上 or mobile = ?1 后却没有内容了,在 Navicat 测试 SQL 语句也没啥毛病。
看了半天额 SQL 没有头绪,毕竟没写错,于是让大佬帮忙看了一下,他说,看一下控制台的SQL语句打印。
发现控制台 like 的「%」消失了。我看着其他的SQL语句写没什么问题,于是上网查了一下,用一个 「CONCAT」拼接即可。
如:like CONCAT (‘%’,?1,’%‘)
原来,对于JPA来说,like 查询是不友好的,像这种 like '%?1%' 很难查出东西的。
所以 CONCAT函数来帮忙,用 like CONCAT(‘%’,?1,’%’) 进行拼接,核心就是 mysql 的 concat 函数,CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一。
level up!
网友评论