《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础

简介: 《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础

Query查询

首先,我们先来看一下query的语法结构图:


Query语法提供了一种查询working memory中符合约束条件的FACT对象的简单方法。它仅包含规则文件中的LHS部分,不用指定“when”和“then”部分。Query有一个可选参数集合,每一个参数都有可选的类型。如果没有指定类型,则默认为Object类型。引擎会尝试强转为需要的类型。对于KieBase来说,query的名字是全局性的,因此不要向同一RuleBase 的不同包添加相同名称的query。


使用ksession.getQueryResults(“name”)方法可以获得查询的结果,其中name为query的名称,方法的返回结果一个列表,从中可以获取匹配查询到的对象。


下面是具体的实例:


package com.rules
import com.secbro.drools.model.Person;
rule "query-test"
    agenda-group "query-test-group1"
    when
        $person : Person()
    then
        System.out.println("The rule query-test fired!");
    end
query "query-1"
    $person : Person(age > 30)
end
query "query-2"(String nameParam)
    $person : Person(age > 30,name == nameParam)
end

测试代码一:

@Test
    public void queryTest() {
        KieSession kieSession = this.getKieSession("query-test-group1");
        Person p1 = new Person();
        p1.setAge(29);
        Person p2 = new Person();
        p2.setAge(40);
        kieSession.insert(p1);
        kieSession.insert(p2);
        int count = kieSession.fireAllRules();
        System.out.println("Fire " +count + " rule(s)!");
        QueryResults results = kieSession.getQueryResults("query-1");
        System.out.println("results size is " + results.size());
        for(QueryResultsRow row : results){
            Person person = (Person) row.get("$person");
            System.out.println("Person from WM, age : " + person.getAge());
        }
        kieSession.dispose();
    }

执行测试代码一打印结果:


The rule query-test fired!

The rule query-test fired!

Fire 2 rule(s)!

results size is 1

Person from WM, age : 40

通过执行结果可以看到,我们拿到了WM中的符合条件的结果。在测试代码中也展示了如何获取结果列表及从结果列表中获得对象的方法。


测试代码二:

@Test
    public void queryWithParamTest() {
        KieSession kieSession = this.getKieSession("query-test-group1");
        Person p1 = new Person();
        p1.setAge(29);
        p1.setName("Ross");
        Person p2 = new Person();
        p2.setAge(40);
        p2.setName("Tom");
        kieSession.insert(p1);
        kieSession.insert(p2);
        int count = kieSession.fireAllRules();
        System.out.println("Fire " +count + " rule(s)!");
        QueryResults results = kieSession.getQueryResults("query-2","Tom");
        System.out.println("results size is " + results.size());
        for(QueryResultsRow row : results){
            Person person = (Person) row.get("$person");
            System.out.println("Person from WM, age : " + person.getAge() + "; name :" + person.getName());
        }
        kieSession.dispose();
    }

此段代码执行的结果如下:


The rule query-test fired!

The rule query-test fired!

Fire 2 rule(s)!

results size is 1

Person from WM, age : 40; name :Tom

这段代码中我们添加了参数,通过参数可以进一步过滤结果。Query支持多参数,通过逗号分隔具体的参数。具体的使用方法参考上面的代码。



目录
相关文章
|
算法 IDE Java
《Drools7.0.0.Final规则引擎教程》第1章 Drools简介
《Drools7.0.0.Final规则引擎教程》第1章 Drools简介
1284 0
|
3月前
|
SQL 开发框架 .NET
深入解析Entity Framework Core中的自定义SQL查询与Raw SQL技巧:从基础到高级应用的全面指南,附带示例代码与最佳实践建议
【8月更文挑战第31天】本文详细介绍了如何在 Entity Framework Core (EF Core) 中使用自定义 SQL 查询与 Raw SQL。首先,通过创建基于 EF Core 的项目并配置数据库上下文,定义领域模型。然后,使用 `FromSqlRaw` 和 `FromSqlInterpolated` 方法执行自定义 SQL 查询。此外,还展示了如何使用 Raw SQL 进行数据更新和删除操作。最后,通过结合 LINQ 和 Raw SQL 构建动态 SQL 语句,处理复杂查询场景。本文提供了具体代码示例,帮助读者理解和应用这些技术,提升数据访问层的效率和灵活性。
198 0
|
Python
Drools规则引擎Map使用案例
Drools规则引擎Map使用案例
797 0
Drools规则引擎Map使用案例
|
Java 测试技术 API
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
239 0
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
195 0
|
Java
《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
180 0
|
API
《Drools7.0.0.Final规则引擎教程》第5章 session使用说明
《Drools7.0.0.Final规则引擎教程》第5章 session使用说明
429 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
337 0
|
Python
《Drools7.0.0.Final规则引擎教程》番外实例篇——Map使用案例
《Drools7.0.0.Final规则引擎教程》番外实例篇——Map使用案例
353 0
《Drools7.0.0.Final规则引擎教程》番外篇之ruleflow-group合并
《Drools7.0.0.Final规则引擎教程》番外篇之ruleflow-group合并
249 0