Hibernate like 使用

问题域:

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");


这样的方式即支持多条件中文查询。

如果要查出不匹配的结果。就采用not like 关键字
例如:

String hql = "from User as user where user.name not like :name";

Query query=querysession.createQuery(hql);

query.setParameter(name,"%javaeye%");


[color=indigo]
注意:如果你采用的是直接拼凑的hql或者sql语句,在用到like的时候要考虑到客户端可能
采用特殊字符搜索。例如"&" ,"%", "_","_s_"
为防止这样的漏洞要去检验参数数值。
如果采用Hibernate的占位符方式则暂不用考虑这个问题。[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值