1. 程式人生 > >Drools學習筆記3—Conditions / LHS—字段約束連接&字段約束操作符

Drools學習筆記3—Conditions / LHS—字段約束連接&字段約束操作符

mem .html 筆記 and exception .get 字段 nbsp 對象

字段約束連接

  • 用於字段約束
  • 對象內部多個約束連接,采用“&&”(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—字段約束連接&字段約束操作符