GreenDao复杂语句查询(Or与and同时使用)

查询语句需求说明:先根据选择的统一编号将表中的数据过滤;然后在剩下的数据中,与三个字段进行模糊匹配,满足其中任意一个就行。

具体使用如下:
第一步:先声明对象
JBXXDao jbxxDao = mapActivity.getSession().getJBXXDao();

第二步:
a.先要有个整体的where查询语句
jbxxDao.queryBuilder().where(  对应条件   )

b.在有“与”关系(根据统一编号数据过滤与数据模糊匹配)
jbxxDao.queryBuilder().and(根据统一编号数据过滤,数据模糊匹配)
根据统一编号数据过滤:JBXXDao.Properties.统一编号.like(map.get(data.getCity()) + "%")
三个条件的模糊匹配(存在“或”关系):jbxxDao.queryBuilder() .or(条件一,条件二,条件三,...)
                 模糊匹配语句:JBXXDao.Properties.统一编号.like("%" + keywords + "%")


整体查询语句如下:
List<JBXX> jbxxes = jbxxDao.queryBuilder().where(jbxxDao.queryBuilder()
.and(JBXXDao.Properties.统一编号.like(map.get(data.getCity()) + "%"), 
 jbxxDao.queryBuilder().or(JBXXDao.Properties.统一编号.like("%" + keywords + "%"), 
  JBXXDao.Properties.位置.like("%" + keywords + "%"),
   JBXXDao.Properties.名称.like("%" + keywords + "%")))).list();

关于List集合的模糊匹配:

/**
 * List模糊查找
 */
public static List search(String name, List list) {
    List results = new ArrayList();
    Pattern pattern = Pattern.compile(name);
    for (int i = 0; i < list.size(); i++) {
        Matcher matcher = pattern.matcher(((JBXX) list.get(i)).get名称());
        if (matcher.find()) {
            results.add(list.get(i));
        }
    }
    return results;
}

猜你喜欢

转载自blog.csdn.net/sunqihui22/article/details/92802873
今日推荐