Query 利用了 Drools 强大的模式匹配特性,从会话中获取信息。结构上,Query 只有 LHS 没有 RHS,支持使用参数来控制 LHS 条件。
Query 提供了两种查询方式:
示例
数据模型 Java 代码:
public class Person {
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
DRL:
query "girls" (Integer $age)
$girl: Person(sex == "female", age > $age)
end
按需查询 Java 代码:
QueryResults queryResults = ksession.getQueryResults("girls", 18);
for (QueryResultsRow row: queryResults) {
Person girl = (Person) row.get("$girl");
System.out.println(girl.getName());
}
实时查询 Java 代码:
ksession.openLiveQuery("girls", new Object[]{18}, new ViewChangedEventListener() {
public void rowInserted(Row row) {
Person girl = (Person) row.get("$girl");
System.out.println(girl.getName());
}
public void rowDeleted(Row row) {}
public void rowUpdated(Row row) {}
});
ksession.fireAllRules();
|