- String hql = "from User as user where user.name like ";
- Query query=querysession.createQuery(hql);
- query.setParameter(0,"javaeye");
- String hql = "from User as user where user.name like ";
- Query query=querysession.createQuery(hql);
- query.setParameter(0,"javaeye");
- 查询无结果.或者只查到user名称为"javaeye"的用户。
- 我想根据用户的姓名,昵称等多条件支持中文查询?
- 问题解析一:
- 理解like匹配模式
- LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
- LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
- LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串
- (如 Bennet、Green、McBadden)。
- LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称
- (如 Cheryl、Sheryl)。
- LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson
- 和 Karson(如 Carson)。
- LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、
- 以从M到Z的任何单个字母开头的所有名称如 。
- LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有
- 名称(如 MacFeather)。
- 分析:
- 采用位置占位符可以解决查询中文的问题;
- 但是如果有过多的like查询则要考虑用名称占位符;
- 上例子改为如下即可:
- String hql = "from User as user where user.name like :name";
- +" and user.alias like :alias";
- Query query=querysession.createQuery(hql);
- query.setParameter(name,"%javaeye%");
- query.setParameter(alias,"%eye");
- String hql = "from User as user where user.name like :name";
- +" and user.alias like :alias";
- Query query=querysession.createQuery(hql);
- query.setParameter(name,"%javaeye%");
- query.setParameter(alias,"%eye");
- 这样的方式即支持多条件中文查询。
- 如果要查出不匹配的结果。就采用not like 关键字
- 例如:
- String hql = "from User as user where user.name not like :name";
- Query query=querysession.createQuery(hql);
- query.setParameter(name,"%javaeye%");
- String hql = "from User as user where user.name not like :name";
- Query query=querysession.createQuery(hql);
- query.setParameter(name,"%javaeye%");
- 注意:如果你采用的是直接拼凑的hql或者sql语句,在用到like的时候要考虑到客户端可能
- 采用特殊字符搜索。例如"&" ,"%", "_","_s_"
- 为防止这样的漏洞要去检验参数数值。
- 如果采用Hibernate的占位符方式则暂不用考虑这个问题。
Hibernate like 使用
最新推荐文章于 2019-07-18 19:46:54 发布