您的位置:首页 > 数据库 > MySQL

mysql单字段任意字符匹配模糊查询

2016-09-22 08:48 281 查看

问题描述

给出字符串String str=”高明亮”(该字符串由前台传递,动态变化);查出用户表中用户名包含以上字符串任意字符的所有用户信息。

可能的思路

错误思路一:只会查询出同时包含着三个字符的用户名。

select * from user where userName like  ‘%高%明%亮%’;


错误思路二:语法就不对,只能查询出包含“高”的用户名。

select * from user where userName like  ‘%高%’ or  '%明%'  or   '%亮%';


错误思路三:结果正确。动态参数,拼接sql难度大。

select * from user where userName like  ‘%高%’ or userName like  '%明%'  or userName like  '%亮%';


错误思路三:动态参数,拼接sql难度大。

select * from user where userName like  ‘%高%’ or userName like  '%明%'  or userName like  '%亮%';


错误思路四:查询结果为空,原因:mysql内部正则有自己的规则;可以考虑将“like”换成“rlike”或者“REGEXP”。不过,在hibernate中不支持这种方式;并且,查询结果还是不对(原因不太清楚)。

select * from user where userName like  ‘%[高明亮]%’;


测试正确的方式

select * from user where userName REGEXP ‘高|明|亮’;


在hibernate中使用采用sql语句方式即可,不要使用hql,不支持。大致如下

Query query = getSession().createSQLQuery("select * from UsersInfor where userName REGEXP ?");
// HQL不支持
// Query query = getSession().createQuery("from " +
// UsersInfor.class.getSimpleName() + " where userName REGEXP ?");
query.setParameter(0, word);
query.setFirstResult(Contants.Pager.pagerSize * (page - 1));// 设置起始行
query.setMaxResults(Contants.Pager.pagerSize);// 每页条数
if (query.list() != null && !query.list().isEmpty()) {
return query.list();
} else {
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: