package com.wyc.drools;
/**
* @author: wyc
* @date: 2019/3/20
*/
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
语法规则实例
Hello world
规则
rule "helloworld"
when
eval(true)
then
System.err.println("hello,world!");
end
测试代码
@Test
public void testHelloWorld() {
kieSession.fireAllRules();
}
输出
hello,world!
条件筛选
规则
rule "user"
when
$u:User(name=="张三",age==18)
then
$u.setName("李四");
System.out.println($u.getName());
end
测试代码
@Test
public void testChangeUserName(){
User user = new User();
user.setAge(18);
user.setName("张三");
kieSession.insert(user);
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("user"));
System.err.println("更改后的姓名:" + user.getName());
}
输出
李四
更改后的姓名:李四
自定义筛选器
规则
rule "customerRule1"
when
eval(true)
then
System.err.println("customerRule1");
end
rule "customerRule2"
when
eval(true)
then
System.err.println("customerRule2");
end
测试代码
@Test
public void testCustomerFilter(){
kieSession.fireAllRules(new CustomerFilter());
}
输出
customerRule1
customerRule2
contains
规则
rule "contains"
when
$s:String()
$u:User(name contains $s)
then
System.err.println("包含");
end
测试代码
@Test
public void testContains(){
User user = new User();
user.setName("张三");
//按照rule中的参数顺序依次insert
kieSession.insert("张三");
kieSession.insert(user);
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("contains"));
}
输出
包含
memberOf
规则
rule "memberOf"
when
$list:List()
$u:User(name memberOf $list)
then
System.err.println("成员属于");
end
测试代码
@Test
public void testMemberOf(){
List<String> names = Stream.of("张三","李四").collect(Collectors.toList());
User user = new User();
user.setName("张三");
kieSession.insert(names);
kieSession.insert(user);
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("memberOf"));
}
输出
成员属于
matches
规则
rule "matches"
when
// 必须使用.
$u:User(name matches "张.*")
then
System.err.println($u.getName());
end
测试代码
@Test
public void testMatches(){
User user = new User();
user.setName("张三");
kieSession.insert(user);
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("matches"));
}