drools_05_query

query 作用和语法

Drools 因其他灵活的 LHS 语法, 能实现非常强大的模式匹配功能, 这是 drools 规则的核心. Drools 通过提供 query 这种方式, 使得我们的java程序也可直接利用其强大的模式匹配功能.

query 定义很简单, 只要写 LHS 部分即可, 语法为:

query "queryName"
   LHS
end

示例

drools 文件, 定义了一个无参query和一个带参query:

package com.sample.rules
 
import com.sample.Order;

query "amount > 10"
    $order:Order(amount>10)
end 


query "any amount"(int $amount)
    $order:Order(amount>$amount)
end

java 端, 调用query的示例

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.rule.QueryResults;
import org.kie.api.runtime.rule.QueryResultsRow;

/**
 * This is a sample class to launch a rule.
 */
public class DroolsTest {

	public static final void main(String[] args) {
		try {
			// load up the knowledge base
			KieServices ks = KieServices.Factory.get();
			KieContainer kContainer = ks.getKieClasspathContainer();
			KieSession kSession = kContainer.newKieSession("ksession-rules");

			Order order = null;
			order = new Order();
			order.setAmount(2);
			kSession.insert(order);

			order = new Order();
			order.setAmount(20);
			kSession.insert(order);

			order = new Order();
			order.setAmount(3);
			kSession.insert(order);

			// kSession.fireAllRules(); //call query 不需要fire rule

			// 查询无参query			
			QueryResults queryResults1 = kSession.getQueryResults("amount > 10"); //第一个参数指定query名
			for (QueryResultsRow row : queryResults1) {
				Order order2 = (Order) row.get("$order");// get row item by bind variable
				System.out.println(order2);
			}

			System.out.println("===========");
			// 查询带参query
			QueryResults queryResults2 = kSession.getQueryResults("any amount", 10);  //第一个参数指定query名, 后面参数作为query的查询参数
			for (QueryResultsRow row : queryResults2) {
				Order order2 = (Order) row.get("$order");// get row item by bind variable
				System.out.println(order2);
			}

			kSession.dispose();

			// System.out.println(order.getRealPrice());
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值