HQL中的Like查询需要注意的地方及详细示例

来源:互联网 发布:淘宝哪种推广方法最好 编辑:程序博客网 时间:2024/06/05 14:45
public List getOrgan(String organCode, String organName) {    String hsql;    List list;    if (organCode != null && organCode.length() > 0) {     hsql = "from Ab31 where bae002 = ? and aab061 like ?";     list = getHibernateTemplate().find(hsql, new Object[] { organCode, '%' + organName + '%' });     }     else {     hsql = "from Ab31 where aab061 like ?";     list = getHibernateTemplate().find(hsql, '%' + organName + '%');     }    return list;}
我在HQL中like查询的时候按照SQL语法用双引号组合 "%' "+ organName + "'%" 查不到任何结果,所以必须注意这里只能使用单引号,如:'%' + organName + '%' ,多个【占位符】用new Object[] { organCode, organName } 来填充
like语法简介:
%    表示任意个数的任意字符
_    表示任意一个字符
[abcdefg]   表示里面的字符任何一个,只取一个
[^c]           表示里面的字符不包含c
[a-z]          表示区间中的任一个,如c或d等
[^a-z]        表示非区间中的任一个

escape '/'     转义符,表示/之后的字符不是特殊字符。

like '%商品/%模板%' escape '/'    可以查出   商品%模板 特殊字符。

详细示例如下:

public Page getUserByCondition(User user, int pageNo, int pageSize, Boolean element) {StringBuffer hql = new StringBuffer();hql.append("select user from User user where 1=1 ");if(!StringUtils.isNullOrEmpty(user.getExpert_name()) && !"-1".equals(user.getExpert_name())){hql.append(" realName like :realName ");}if(!StringUtils.isNullOrEmpty(user.getExpert_level()) && !"-1".equals(user.getExpert_level())){hql.append(" expertRank = :expertRank ");}if(!StringUtils.isNullOrEmpty(user.getExpert_level()) && !"-1".equals(user.getExpert_level())){hql.append(" expertRank = :expertRank ");}Map<String,Object> param = new HashMap<String, Object>();param.put("realName", '%' + user.getExpert_name() + '%');param.put("expertRank", user.getExpert_level() );return super.pagedQuery(hql.toString(), pageNo, pageSize, param);}