drools_05_query
query 作用和語(yǔ)法
Drools 因其他靈活的 LHS 語(yǔ)法, 能實(shí)現(xiàn)非常強(qiáng)大的模式匹配功能, 這是 drools 規(guī)則的核心. Drools 通過(guò)提供 query 這種方式, 使得我們的java程序也可直接利用其強(qiáng)大的模式匹配功能.
query 定義很簡(jiǎn)單, 只要寫(xiě) LHS 部分即可, 語(yǔ)法為:
query "queryName"
LHS
end
示例
drools 文件, 定義了一個(gè)無(wú)參query和一個(gè)帶參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 端, 調(diào)用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
// 查詢無(wú)參query
QueryResults queryResults1 = kSession.getQueryResults("amount > 10"); //第一個(gè)參數(shù)指定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); //第一個(gè)參數(shù)指定query名, 后面參數(shù)作為query的查詢參數(shù)
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();
}
}
}

浙公網(wǎng)安備 33010602011771號(hào)