Drools学习笔记3—Conditions / LHS—字段约束连接&字段约束操作符

字段约束连接

  • 用于字段约束
  • 对象内部多个约束连接,采用“&&”(and)、“||”(or)和“,”(and)
  • 执行顺序:“&&”(and)、“||”(or)和“,”

字段约束操作符

  • >、>=、<、<=、= =、!=
  • contains:包含 A contains B, A中包含B
  • not contains:与contains相反
  • memberOf:单个对象属于某个集合,this表示当前对象
  • not memberOf:与memberof相反
  • matches:正则表达式,匹配
  • not matches:正则表达式,不匹配

contains 、 not contains

package com.sample

import  com.bean.Customer;
import  com.bean.Account;

 rule "contains"
    when
       $account : Account();
       $customer : Customer(name=="七夜雪" && accounts contains $account);
    then
        System.out.println( "contains test success"  );
end

 rule "not contains"
    when
       $account : Account();
       $customer : Customer(name=="七夜雪" && accounts not contains $account);
    then
        System.out.println( "not contains test success"  );
end
  /**
   * 字段约束符,contains
   * @throws Exception
   */
  @Test
  public void testContainsRule() throws Exception {
    KnowledgeBase kbase = readKnowledgeBase("Contains.drl");
    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
    Customer customer = new Customer();
    customer.setName("七夜雪");
    Account account1 = new Account();
    account1.setNum(100);
    Account account2 = new Account();
    account2.setNum(100);
    customer.getAccounts().add(account1);   //not contains
    //customer.getAccounts().add(account2);  // contains
    ksession.insert(customer);
    ksession.insert(account2);
    ksession.fireAllRules();
    logger.close();
  }

memberOf 、not memberOf

package com.sample

import  com.bean.Customer;
import  com.bean.Account;

 rule "Memberof"
    when
       $customer : Customer();
       //当前的account是$customer.getAccounts()的一个成员
        $account : Account(this memberOf  $customer.getAccounts());
    then
        System.out.println( "memberOf test success and account is " + $account.getName() );
end

 rule "not Memberof"
    when
       $customer : Customer();
       //当前的account不是$customer.getAccounts()的一个成员
        $account : Account(this not memberOf  $customer.getAccounts());
    then
        System.out.println( "not memberOf test success and account is " + $account.getName() );
end
  /**
   * 字段约束符,memberOf
   * @throws Exception
   */
  @Test
  public void testMemberOfRule() throws Exception {
    KnowledgeBase kbase = readKnowledgeBase("Members.drl");
    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
    Customer customer = new Customer();
    Account account1 = new Account();
    account1.setName("碧落");
    Account account2 = new Account();
    account2.setName("黄泉");
    customer.getAccounts().add(account1);
    ksession.insert(customer);
    ksession.insert(account1);
    ksession.insert(account2);
    ksession.fireAllRules();
    logger.close();
  }

matches 、 not matches

package com.sample

import  com.bean.Customer;
import  com.bean.Account;

 rule "Matchs"
    when
       $customer : Customer(name matches "qiye*");
    then
        System.out.println( "Matchs test success and customer is " + $customer.getName() );
end

 rule "not Matchs"
    when
       $customer : Customer(name not matches "qiye*");
    then
        System.out.println( "not Matchs test success and customer is " + $customer.getName() );
end
  /**
   * 字段约束符,memberOf
   * @throws Exception
   */
  @Test
  public void testMatcherRule() throws Exception {
    KnowledgeBase kbase = readKnowledgeBase("Matchs.drl");
    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    Customer customer = new Customer();
    customer.setName("qiyexue");
    Customer customer1 = new Customer();
    customer1.setName("biluo");
    ksession.insert(customer);
    ksession.insert(customer1);
    ksession.fireAllRules();
  }

fact对象代码:http://www.cnblogs.com/qiyexue/p/7822670.html

时间: 2024-08-30 02:48:19

Drools学习笔记3—Conditions / LHS—字段约束连接&字段约束操作符的相关文章

Drools学习笔记2—Conditions / LHS 匹配模式&amp;条件元素

Rule的LHS由条件元素(Conditional Elements-CE)和匹配模式(Patterns)组成 Patterns被用来指示出fact的字段约束 每个约束必须为true才能让RHS的actions fire 测试代码,测试用获取KnowledgeBase方法: /** * 获取KnowledgeBase * @return * @throws Exception */ private static KnowledgeBase readKnowledgeBase(String rul

[Spring Data MongoDB]学习笔记--建立数据库的连接

1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoDbFactory { DB getDb() throws DataAccessException; DB getDb(String dbName) throws DataAccessException; } 然后我们可以继续用MongoDbFactory来创建MongoTemplate的实例. pu

C++ Primer 学习笔记_54_类与数据抽象 --复制构造函数、赋值操作符

复制控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,需要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数:具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式的使用复制构造函数:当将该类型的对象传递给函数或者从函数返回该类型的对象时,将隐式使用复制构造函数.     析构函数:作为构造函数的互补,当对象超出作用域或动态分配的对象被删除

python学习笔记-Day8 上(pickle补充、字段、面向对象成员、成员修饰符、特殊方法)

pickle 序列化补充 # pickle load # 现在有两个python程序,调用关系如下 # s1.py class foo: …. Obj = foo(x,y) Pickle.dump(obj, open(‘db’,’wb’)) S2.py # s2.py from s1 import foo pickle.load(db) # s2.py 反序列化加载包含对象,一定要先导入对象对应的类,否则Pickle load将会报错 类多继承关系 有共同父类的继承关系如下 如图,如果我们有两个

ESP8266学习笔记6:ESP8266规范wifi连接操作

一.前言 我整理了从2015年至今关于ESP8266的学习笔记,梳理出来了开发环境.基础功能.进阶学习三大部分.方便自己和他人.可点此查看,欢迎交流. 之前在笔记4<ESP8266的SmartConfig>http://blog.csdn.net/iotisan/article/details/54849410中,做了smartconfig例程的測试. 这个例程是因为DEMO演示的,离商用还有段距离. 几周前,有网友就问我esp8266又一次上电无法自己主动连接之前配置的路由器.这确实是眼下D

Drools学习笔记-01-在eclipse indgo集成Drools5.5

1.1.条件 Drools它是一个基于Java开源规则引擎.因此,使用Drools以及前需要安装在开发机器JDK周边环境,Drools5.5需要JDK版本号的1.5或者更多. 1.2.开发环境搭建 大多数软件学习的第一步就是搭建这个软件的开发环境,Drools也不例外. 本小节的内容就是介绍怎样搭建一个Drools5的开发.执行.调试环境. 首先,通过下面地址下drools 5.5.0Final版本号,下载图中红色边框内两个zip包. http://download.jboss.org/droo

mysql学习笔记(七)—— MySQL内连接和外连接

    MySQL内连接(inner join on) MySQL的内连接使用inner join on,它的效果跟使用where是一样的,如果联结的是两个表,那么需要左右的条件或者说字段是需要完全匹配的. 来看个例子:有两张表customers客户表和orders订单表,外键是cust_id,我们需要知道哪些客户有订单 select customers.cust_id,orders.order_num from customers , orders where customers.cust_i

Oracle学习笔记4 使用Navicat for Oracle 连接Oracle时出现错误:ORA-28547: connection to server failed, probable Oracle Net admin error

出问题到的机器环境: Oracle 11gR2 64bit Navicat for Oracle 11.0.10 根据网上一些大神的做法及个人的一些推测,总结如下: 问题出现的原因:Navicat与Oracle的位数不一致,前者32bit,后者64bit 网上的一些没有起效的做法: 1.修改Oracle中的listener.ora 或者tnsname.ora等配置文件,未能生效: 2.使用Oracle中的oci.dll替换Navicat中的oci.dll,会出现“cannot load oci.

HTML学习笔记 CSS文本及字体及连接及列表 第七节 (原创)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>文本及字体及连接及列表</title> <link rel="stylesheet" href="tzy.css" type="text/css"></head><body