首页 > 其他分享 >drools_05_query

drools_05_query

时间:2022-10-20 07:55:14浏览次数:26  
标签:drools 05 kSession order amount query Order row

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();
		}
	}

}

标签:drools,05,kSession,order,amount,query,Order,row
From: https://www.cnblogs.com/harrychinese/p/drools_05_query.html

相关文章

  • drools_04_global
    关于global属性drl文件中可以设置任意多个global对象,语法是globaldataTypevariable,dataType不能是int/double等原始类型.global作用:用于Java和规则之......
  • 力扣_剑指Offer_个人题解day05
    day05剑指Offer04.二维数组中的查找题目描述:在一个n*m的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的......
  • day05 搭建Jemeter自动化环境
    一、安装配置ant环境1.下载ant安装包:https://dlcdn.apache.org//ant/binaries/apache-ant-1.10.12-bin.zip ,并解压缩注意:ant版本于本地JDK版本匹配2.配置ant的环境变......
  • JQuery中的事件(三)
    一:页面载入ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。简单地说,这个方法......
  • jQuery中的CSS(二)
    一:获取样式和设置样式      4.移除样式: 5.切换样式 6.判断是否包含某个样式二:设置或获取HTML、文本和值html()取得第一个匹配元素的html内容。这个函数不能用于XML......
  • JQuery选择器(一)
    下载的官网:​​http://www.jQuery.com​​实现的效果:代码:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Demo.aspx.cs"Inherits="T12_选择器1_Demo"%><!DOCTY......
  • P2059 [JLOI2013] 卡牌游戏 题解
    一道不错的线性dp,带了点逆推。注意到如果我们设\(f_{i,j}\)表示前\(i\)轮过后\(j\)存活的概率,那么我们需要额外记录哪些人无了,否则无法转移。考虑这样一件事:无论......
  • 05-Go语言的程序流程结构
    有三种结构:顺序结构、选择结构、循环结构条件语句ifif...else,if...elseif。ifstatement;condition这是Go语言特有的写法。ifnum:=4;num>0{ p......
  • jQuery之ajax技术
    1:Ajax技术包含以下几点:   基于Web标准(XHTML+CSS)的展示  使用DOM进行动态显示和交互  使用XMLHttpRequest进行数据交换和相关操作  使用javascript将所......
  • jQuery技术之事件处理
    1:事件流模型   如果单击一次在HTML页面上的某个按钮,不仅会触发按钮的单击事件,还将触发按钮所属容器(div、span)等的单击事件,同时还将触发父级容器的单击事件,直至body、......