您的位置:首页 > 其它

Hibernate:Disjunction&Conjunction构造复杂的查询条件.

2015-10-06 15:49 441 查看
Hibernate:Disjunction&Conjunction构造复杂的查询条件

Disjunction和Conjunction是逻辑或和逻辑与,如下:

用来组合一组逻辑或【or】条件的方法

1.Restrictions.disjunction();

用来组合一组逻辑与【and】条件的方法

2.Restrictions.conjunction();


实例一:构造复杂的SQL查询条件

private void CheckBsc_lj(Criteria queryCriteria)
{
Disjunction disjunction = Restrictions.disjunction();
Criterion cirterion = Restrictions.sqlRestriction("SIMULPORTCAPACITY<SIMULPORTCAPACITYOCUPIED".toLowerCase());
disjunction.add(cirterion);
cirterion = Restrictions.sqlRestriction("ADSLPORTCAPACITY<ADSLPORTCAPACITYOCCUPIED".toLowerCase());
disjunction.add(cirterion);
cirterion = Restrictions.sqlRestriction("LANPORTCAPACITY<LANPORTCAPACITYOCCUPIED".toLowerCase());
disjunction.add(cirterion);

// ONU端口,至少要录入一种端口
Conjunction conjunction = Restrictions.conjunction();
cirterion = Restrictions.eq("lanportcapacity", 0);
conjunction.add(cirterion);
cirterion = Restrictions.eq("simulportcapacity", 0);
conjunction.add(cirterion);
cirterion = Restrictions.eq("adslportcapacity", 0);
conjunction.add(cirterion);

disjunction.add(conjunction);
queryCriteria.add(disjunction);
}

构造出的条件如下:
select *
from aaaa this_
where (simulportcapacity < simulportcapacityocupied or
adslportcapacity < adslportcapacityoccupied or
lanportcapacity < lanportcapacityoccupied or
(this_.LANPORTCAPACITY = ? and this_.SIMULPORTCAPACITY = ? and
this_.ADSLPORTCAPACITY = ?)) 

实例二:构造模糊查询

Disjunction dis=Restrictions.disjunction();
dis.add(Restrictions.like("chanpin", "冰箱", MatchMode.ANYWHERE));
dis.add(Restrictions.like("chanpin", "洗衣机", MatchMode.ANYWHERE));
dis.add(Restrictions.like("chanpin", "热水器", MatchMode.ANYWHERE));
dis.add(Restrictions.like("chanpin", "空调", MatchMode.ANYWHERE));
detachedCriteria.add(dis);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: