Drools入门之query查询
元素query指查询,从结构图上看,它以query开头、以end结束,其中包含query name,查询参数是可以选择的,多个参数以逗号为分隔符,查询是一种条件匹配的方式,因为它只包含LHS部分,因此不需要指定when或then。如何判断条件匹配是否正确,可以通过Java代码进行获取。查询的name在当前规则库的逻辑路径下是唯一的,这点与规则名称约束相似。
举个例子
public class RulesQuery {
public static void main(String[] args) {
KieServices kieService = KieServices.Factory.get();
KieContainer kieContainer = kieService.getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession("testQuery");
Person person1 = new Person("张三", 30);
Person person2 = new Person("李四", 25);
Person person3 = new Person("王五", 40);
kieSession.insert(person1);
kieSession.insert(person2);
kieSession.insert(person3);
QueryResults queryResults = kieSession.getQueryResults("person age is 25");
for (QueryResultsRow q : queryResults) {
Person p = (Person) q.get("person");
System.out.println("输出符合查询条件的实体对象name为"+p.getName());
}
kieSession.dispose();
}
}
import com.domain.Person
query "person age is 25"
person:Person(age == 25)
end
执行日志
输出符合查询条件的实体对象name为李四
query还可以接收参数
public class RulesQuery {
public static void main(String[] args) {
KieServices kieService = KieServices.Factory.get();
KieContainer kieContainer = kieService.getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession("testQuery");
Person person1 = new Person("张三", 30);
Person person2 = new Person("李四", 25);
Person person3 = new Person("王五", 40);
kieSession.insert(person1);
kieSession.insert(person2);
kieSession.insert(person3);
QueryResults queryResults = kieSession.getQueryResults("person age is 25");
for (QueryResultsRow q : queryResults) {
Person p = (Person) q.get("person");
System.out.println("输出符合查询条件的实体对象name为"+p.getName());
}
Object[] params = new Object[]{"王五"};
QueryResults queryResults2 = kieSession.getQueryResults("queryRule",params);
for (QueryResultsRow q : queryResults2) {
Person p = (Person) q.get("person");
System.out.println("输出符合查询条件的实体对象name为"+p.getName());
}
kieSession.dispose();
}
}
import com.domain.Person
query "person age is 25"
person:Person(age == 25)
end
query "queryRule"(String $name)
person:Person(age == 40,name==$name)
end
输出符合查询条件的实体对象name为李四
输出符合查询条件的实体对象name为王五
Drools入门之query查询
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/drools-query