侧边栏壁纸
  • 累计撰写 106 篇文章
  • 累计创建 3 个标签
  • 累计收到 19 条评论
标签搜索

目 录CONTENT

文章目录

Drools入门之query查询

卑微幻想家
2022-06-30 / 0 评论 / 0 点赞 / 55 阅读 / 2,142 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-06-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

元素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为王五
0

评论区