Restrictions.like() 模糊查询,以及使用DetachedCriteria查询的一般用法

Restrictions.like() 模糊查询,以及使用DetachedCriteria查询的一般用法

今天测试一个搜索的模块,用到模糊查询,查询是否包含指定对象,又因为使用到了分页

所以我们这里就使用了Restrictions.like() 来处理

这个方法有三个参数

如下


Restrictions.like(propertyName, value, matchMode)
第一个参数表示需要查询的字段名,第二个参数表示需要匹配的数据,第三个参数表示查询的精度,默认是精确匹配,相当于sql的 like 'value'


第三个参数是可选的


第一和第二个参数好理解,主要是第三个参数,他可以是以下的值


MatchMode.EXACT 精确匹配,相当于 like 'value'
MatchMode.ANYWHERE 字符串在中间位置,相当于 like '%value%'
MatchMode.START 字符串在最前面的位置,相当于“like 'value%'
MatchMode.END 字符串在最后面的位置,相当于“like '%value'
默认情况下是第一个,精确匹配


如果你只想使用两个参数,想实现后面的三种查询方法,那我们就需要在参数中构造

如下面的代码


criteria.add(Restrictions.ilike("shopdes", "%"+stext+"%"));
也就是说上面的代码和下面的代码是一样的结果
criteria.add(Restrictions.ilike("shopdes", stext,MatchMode.ANYWHERE));
如果您的代码直接是这样
criteria.add(Restrictions.ilike("shopdes", stext));
那你的结果和上面的结果是不一样的哦,这个是精准查找了,不是模糊查找了



下面的代码也是一个意思

criteria.add(Restrictions.ilike("shopdes", stext+"%"));  
criteria.add(Restrictions.ilike("shopdes", stext,MatchMode.START)); 

下面的代码也是一个意思


criteria.add(Restrictions.ilike("shopdes", "%"+stext));  criteria.add(Restrictions.ilike("shopdes", stext,MatchMode.END));
我们还可以这样进行组合模糊查询,如下代码



criteria.add(Restrictions.or(Restrictions.like("shopdes", stext,MatchMode.ANYWHERE),Restrictions.like("shopname", stext)));


以上代码表示,查询,如果这个字符串和shopdes是模糊匹配,或者和shopnama是精准匹配都符合我们的要求


关于DetachedCriteria的其他一些查询方法,整理如下

Restrictions.eq() 这个就是比较,和java的equalsleisi
Restrictions.allEq() 参数为Map对象,使用key/value进行多个等于的对比,相当于多个Restrictions.eq()的效果
Restrictions.gt() 大于

Restrictions.ge() 大于等于
Restrictions.lt() 小于
Restrictions.le() 小于等于
Restrictions.between() 和SQL的between子句类似
Restrictions.in() 对应SQL的in子句
Restrictions.and() and关系
Restrictions.or() or关系
Restrictions.isNull() 判断属性是否为空,为空返回true,否则返回false
Restrictions.isNotNull() 与Restrictions.isNull()相反
Order.asc() 根据传入的字段进行升序排序
Order.desc() 根据传入的字段进行降序排序


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img