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

Posted 七夜·雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Drools学习笔记3—Conditions / LHS—字段约束连接&字段约束操作符的主要内容,如果未能解决你的问题,请参考以下文章

Drools笔记:初识与入门

如何快速学习 Drools 或其他规则引擎 [关闭]

Drools 规则学习

Drools 函数学习

规则引擎Drools介绍使用及SpringBoot整合Drools

drools6.3+spring+Drools Workbench+activemq搭建风险控制系统