Hibernate like 使用

  1. String hql = "from User as user where user.name like ";     
  2. Query query=querysession.createQuery(hql);        
  3. query.setParameter(0,"javaeye");    
  4.  
  5. String hql = "from User as user where user.name like ";  
  6. Query query=querysession.createQuery(hql);     
  7. query.setParameter(0,"javaeye");  
  8. 查询无结果.或者只查到user名称为"javaeye"的用户。   
  9. 我想根据用户的姓名,昵称等多条件支持中文查询?   
  10.  
  11. 问题解析一:   
  12. 理解like匹配模式   
  13. LIKE 'Mc%'    将搜索以字母 Mc 开头的所有字符串(如 McBadden)。   
  14. LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。   
  15. LIKE '%en%'   将搜索在任何位置包含字母 en 的所有字符串   
  16.                 (如 Bennet、Green、McBadden)。   
  17. LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称   
  18.                 (如 Cheryl、Sheryl)。   
  19. LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson   
  20.               和 Karson(如 Carson)。   
  21. LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、   
  22.                  以从M到Z的任何单个字母开头的所有名称如 。   
  23. LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有   
  24.                 名称(如 MacFeather)。   
  25. 分析:   
  26. 采用位置占位符可以解决查询中文的问题;   
  27. 但是如果有过多的like查询则要考虑用名称占位符;   
  28. 上例子改为如下即可:   
  29. String hql = "from User as user where user.name like :name";     
  30.              +" and user.alias like :alias";     
  31. Query query=querysession.createQuery(hql);     
  32.       
  33. query.setParameter(name,"%javaeye%");     
  34.     
  35. query.setParameter(alias,"%eye");    
  36.  
  37. String hql = "from User as user where user.name like :name";  
  38.              +" and user.alias like :alias";  
  39. Query query=querysession.createQuery(hql);  
  40.    
  41. query.setParameter(name,"%javaeye%");  
  42.  
  43. query.setParameter(alias,"%eye");  
  44.  
  45. 这样的方式即支持多条件中文查询。   
  46.  
  47. 如果要查出不匹配的结果。就采用not like 关键字   
  48. 例如:   
  49. String hql = "from User as user where user.name not like :name";     
  50.                   
  51. Query query=querysession.createQuery(hql);     
  52.       
  53. query.setParameter(name,"%javaeye%");    
  54.  
  55. String hql = "from User as user where user.name not like :name";  
  56.                
  57. Query query=querysession.createQuery(hql);  
  58.    
  59. query.setParameter(name,"%javaeye%");  
  60.  
  61.  
  62.  
  63. 注意:如果你采用的是直接拼凑的hql或者sql语句,在用到like的时候要考虑到客户端可能   
  64.       采用特殊字符搜索。例如"&" ,"%""_","_s_"   
  65.      为防止这样的漏洞要去检验参数数值。   
  66.       如果采用Hibernate的占位符方式则暂不用考虑这个问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值