3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Drools 规则引擎一文读懂

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Drools 规则引擎一文读懂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、Drools 簡介

電商平臺的促銷活動

規則引擎

Drools 簡介

二、Drools 快速入門?

電商平臺促銷積分規則

開發實現

三、Drools 規則引擎構成及其核心類

Drools規則引擎構成

Drools規則引擎概念

四、Drools 基礎語法

規則文件構成

?規則體語法結構

規則注釋

Pattern模式匹配

規則比較操作符

操作步驟?

執行指定規則?

關鍵字

?五、Drools 規則屬性 attributes

enabled屬性?

dialect屬性

salience屬性?

no-loop屬性

?lock-on-active屬性

activation-group屬性

agenda-group屬性

auto-focus屬性

timer屬性

date-effective屬性

date-expires屬性

六、Drools高級語法

?global全局變量

query查詢

?function函數

條件-LHS加強

復合值限制in/not in

條件元素eval

條件元素not

條件元素exists

規則繼承

結果-RHS

insert方法

update方法

modify方法

retract/delete方法

RHS加強

halt

getWorkingMemory

getRule

規則文件編碼規范

七、WorkBench

?WorkBench簡介

配置 Tomcat

啟動服務器

WorkBench使用?

創建空間、項目

創建數據對象和drl文件

設置KieBase+KieSession

代碼使用?


一、Drools 簡介

電商平臺的促銷活動

????????小明是一家互聯網公司的軟件工程師,他們公司為了吸引新用戶經常會搞活動,小明常常為了做活動加班加點很煩躁,這不今天呀又來了一個活動需求,我們大家一起幫他看看。

????????活動規則是根據用戶購買訂單的金額給用戶送相應的積分,購買的越多送的積分越多,用戶可以使用積分來兌換相應的商品,我們這次活動的力度很大,肯定會吸引很多的用戶參加,產品經理小王興高采烈唾液橫飛的對小明講到。小明心想,又tm來這套,這次需求又要變更多少次呢?表面上還的配合,說趕緊把規則給我們吧,早點開發早點上線,小王說這次需求老簡單啦,估計你們兩個小時就搞定了,不信你看需求文檔。

100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分

小明一看,這需求果然簡單呀,作為一個工作了兩三年的程序員來講,這不就是小case,半天搞定,送積分的核心代碼如下:

public void execute() throws Exception { List<Order> orderList = getInitData();for (int i=0; i<orderList.size(); i++){ Order order = orderList.get(i); if (order.getAmout() <= 100){ order.setScore(0); addScore(order); }else if(order.getAmout() > 100 && order.getAmout() <= 500){ order.setScore(100); addScore(order); }else if(order.getAmout() > 500 && order.getAmout() <= 1000){ order.setScore(500); addScore(order); }else{ order.setScore(1000); addScore(order); } } }

????????上線運行了半天之后,財務部的小財突然監測到活動賬戶的金額大為減少,發現產品做活動竟然沒有通知到他,非常不爽,于是給領導小馬說,這樣大規模的活動,對公司財務有壓力,領導小馬權衡了一番說,這樣吧活動繼續,但是金額翻倍再送積分,于是規則變成了這樣:200元以下不給積分,1000元以下給100積分…

????????小明看領導都發話了,沒辦法改呀,不過也簡單,就是將里面的值都翻了倍,在投產上去,只是挨了不少測試的白眼。

????????活動又進行了一天,運營人員通過后臺監控發現提到2倍以后,用戶積極性變的很差,活動效果不理想,和領導商議了一下,改為最初規則的1.5倍,及150元一下不給積分,750元以下給100積分… 小明這時候的心情大概是這樣子的,一萬個下圖動物狂奔而過。

????????沒辦法還得改不是,當然這次小明可學乖了,將這些數據(多少元送多少分)存到了數據庫中,當老板再改主意的時候,只要改一下數據庫的值就可以了,小明為自己的明聰明到有點小高興。?

核心代碼:

public void execute() throws Exception { List<Order> orderList = getInitData();List<int> values = getTableValues();for (int i=0; i<orderList.size(); i++){ Order order = orderList.get(i); if (order.getAmout() <= values.get(0)){ order.setScore(values.get(3)); addScore(order); }else if(order.getAmout() > values.get(0) && order.getAmout() <= values.get(1)){ order.setScore(values.get(4)); addScore(order); }else if(order.getAmout() > values.get(1) && order.getAmout() <= values.get(2)){ order.setScore(values.get(5)); addScore(order); }else{ order.setScore(values.get(6)); addScore(order); } } }

????????正當小明得意洋洋的打了個最新版本投產上線之后,產品經理小王說積分規則層次太少了,由以前的4組變成8組,小明此刻的心情:kao …

????????小明想這樣下去非得被他們弄死,必須要找找有什么技術可以將活動規則和代碼解耦,不管規則如何變化,執行端不用動。小明搜了半天還真有這樣的東西,那就是規則引擎,那么規則引擎到底是什么東西呢?我們來看看。

規則引擎

????????規則引擎:全稱為業務規則管理系統,英文名為BRMS。規則引擎的主要思想是將應用程序中的業務決策部分分離出來,并使用預定義的語義模塊編寫業務決策(業務規則),由用戶或 開發者在需要時進行配置、管理。需要注意的是規則引擎并不是一個具體的技術框架,而是指的一類系統,即業務規則管理系統。

????????java開源的規則引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最為廣泛并且開源的是Drools。

主要應用場景:

????????對于一些存在比較復雜的業務規則并且業務規則會頻繁變換的系統比較適合使用規則引擎,如下:

  • 風控系統-------風險貸款、風險評估
  • 反欺詐項目-----銀行貸款、征信驗證
  • 決策平臺-------財務計算
  • 電商平臺------滿減、打折、加價購

Drools 簡介

????????Drools 是用 Java 語言編寫的開放源碼規則引擎,使用 Rete 算法對所編寫的規則求值。Drools 允許使用聲明方式表達業務邏輯。可以使用非 XML 的本地語言編寫規則,從而便于學習和理解。并且,還可以將 Java 代碼直接嵌入到規則文件中,這令 Drools 的學習更加吸引人。

Drools 還具有其他優點:

  • 非常活躍的社區支持
  • 易用
  • 快速的執行速度
  • 在 Java 開發人員中流行
  • 與 Java Rule Engine API(JSR 94)兼容

Drools 是業務邏輯集成平臺,被分為4個項目:

  • Drools Guvnor (BRMS/BPMS):業務規則管理系統
  • Drools Expert (rule engine):規則引擎,drools的核心部分
  • Drools Flow (process/workflow):工作流引擎
  • Drools Fusion (cep/temporal reasoning):事件處理

官網:http://www.drools.org/#
官方文檔:http://www.drools.org/learn/documentation.html

在項目中使用drools 時,即可以單獨使用也可以整合spring使用,如果是單獨使用僅需要導入以下maven 依賴即可。

<!--添加規則引擎依賴--><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.73.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-mvel</artifactId><version>7.73.0.Final</version></dependency>

Drools API 開發步驟如下:

二、Drools 快速入門?

電商平臺促銷積分規則

100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分

開發實現

第一步:創建Maven項目,添加Drools 規則引擎依賴。

<!--添加規則引擎依賴--><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.73.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-mvel</artifactId><version>7.73.0.Final</version></dependency><!--添加單元測試工具類--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

第二步:根據drools要求創建resources/META-INF/kmodule.xml 配置文件

需要有一個配置文件告訴代碼規則文件drl 在哪里,在drools中這個文件就是kmodule.xml。

<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://www.drools.org/xsd/kmodule"><!--name:指定kbase 名稱,可以是任意但必須唯一packages:指定規則文件存放目錄,依據實際情況進行填寫default:指定當前的kbase 是否為默認--><kbase name="rules" packages="rules" default="true"><!--name:指定ksession名稱,可以是任意但必須唯一default:指定ksession 是否為默認--><ksession name="ksession-rules" default="true"/></kbase> </kmodule>

第三步:創建業務實體對象

package com.zzg.model;public class Order implements java.io.Serializable {private int amount; //訂單金額private int score; //訂單積分@Overridepublic String toString() {return "Order{" +"amount=" + amount +", score=" + score +'}';}public int getAmount() {return amount;}public void setAmount(int amount) {this.amount = amount;}public int getScore() {return score;}public void setScore(int score) {this.score = score;} }

第四步:創建規則文件,在resources/rules/score-rules.drl

package rules;import com.zzg.model.Order;// 100 元以下不加分 rule "score_1" when$order:Order(amount<100); then$order.setScore(0);System.out.println("觸發100元以下,不加積分"); end // 100-500 元, 加100積分 rule "score_2" when$order:Order(amount>100 && amount <= 500); then$order.setScore(100);System.out.println("觸發100-500 元, 加100積分"); end // 500-10000 元, 加500積分 rule "score_3" when$order:Order(amount>500 && amount <= 1000); then$order.setScore(500);System.out.println("觸發500-1000 元, 加500積分"); end // 大于1000 元, 加1000積分 rule "score_4" when$order:Order(amount>1000); then$order.setScore(1000);System.out.println("觸發大于1000 元, 加1000積分"); end

第五步:單元測試

package com.zzg;import com.zzg.model.Order; import org.junit.Test; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession;public class TestDrools {@Testpublic void test1() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象Order order = new Order();order.setAmount(100);// 第四步kieSession.insert(order);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();System.out.println("指定規則引擎后的結果:" + order.getScore());} }

效果截圖:

23:01:01.112 [main] INFO org.drools.compiler.kie.builder.impl.KieContainerImpl - End creation of KieBase: rules 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is now HALTING 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is now INACTIVE 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now DISPOSED 指定規則引擎后的結果:0

三、Drools 規則引擎構成及其核心類

Drools規則引擎構成

drools規則引擎由以下幾部分構成:

  • Working Memory(工作內存)
  • Rules(規則庫)
  • Inference?Engine(推理引擎)

其中Inference Engine(t推理引擎)又包含如下:

  • Pattern Match(匹配器)具體匹配那一個規則,由它來完成
  • Agenda(議程)
  • Execution Engine(執行引擎)

Drools規則引擎概念

Working Memory:工作內存,drools規則引擎會從Working Memory中獲取數據并和規則文件中定義的規則進行模式匹配,所以我們開發的應用程序只需要將我們的數據插入到Working Memory中即可,例如本案例中我們調用kieSession.insert(order)就是將order對象插入到了工作內存中。

Fact:事實,是指在drools 規則應用當中,將一個普通的JavaBean插入到Working Memory后的對象就是Fact對象,例如本案例中的Order對象就屬于Fact對象。Fact對象是我們的應用和規則引擎進行數據交互的橋梁或通道。

Rules:規則庫,我們在規則文件中定義的規則都會被加載到規則庫中。

Pattern Matcher:匹配器,將Rule Base中的所有規則與Working Memory中的Fact對象進行模式匹配,匹配成功的規則將被激活并放入Agenda中。

Agenda:議程,用于存放通過匹配器進行模式匹配后被激活的規則。

四、Drools 基礎語法

規則文件構成

drl是Drools Rule Language的縮寫

一套完整的規則文件內容構成如下:

關鍵字描述
package包名,只限于邏輯上的管理,同一個包名下的查詢或者函數可以直接調用
import用于導入類或者靜態方法
global全局變量
function自定義函數
query查詢
rule end規則體

?規則體語法結構

一個規則通常包含三個部分:屬性部分(attribute)、條件部分(LHS)和結果部分(RHS)

語法結構體:

rule "ruleName"attributeswhenLHS thenRHS end

rule:關鍵字,表示規則開始,參數為規則的唯一名稱。

attributes:規則屬性,是rule與when之間的參數,為可選項。

when:關鍵字,后面跟規則的條件部分。

LHS(Left Hand Side):是規則的條件部分的通用名稱。它由零個或多個條件元素組成。如果LHS為空,則它將被視為始終為true的條件元素。 (左手邊)

then:關鍵字,后面跟規則的結果部分。

RHS(Right Hand Side):是規則的后果或行動部分的通用名稱。 (右手邊)

end:關鍵字,表示一個規則結束。

規則注釋

在drl形式的規則文件中使用注釋和Java類中使用注釋一致,分為單行注釋和多行注釋。

單行注釋用"//"進行標記,多行注釋以"/"開始,以"/"結束。如下示例:

//規則rule1的注釋,這是一個單行注釋 rule "rule1"whenthenSystem.out.println("rule1觸發"); end/* 規則rule2的注釋, 這是一個多行注釋 */ rule "rule2"whenthenSystem.out.println("rule2觸發"); end

Pattern模式匹配

????????Drools中的匹配器可以將Rule Base中的所有規則與Working Memory中的Fact對象進行模式匹配,那么我們就需要在規則體的LHS部分定義規則并進行模式匹配。LHS部分由一個或者多個條件組成,條件又稱為pattern。

語法:

pattern的語法結構為:綁定變量名:Object(Field約束)

其中綁定變量名可以省略,通常綁定變量名的命名一般建議以$開始。如果定義了綁定變量名,就可以在規則體的RHS部分使用此綁定變量名來操作相應的Fact對象。Field約束部分是需要返回true或者false的0個或多個表達式。

入門案例中:

package rules;import com.zzg.model.Order;// 100 元以下不加分 rule "score_1" when$order:Order(amount<100); then$order.setScore(0);System.out.println("觸發100元以下,不加積分"); end

通過上面的例子我們可以知道,匹配的條件為:

1、工作內存中必須存在Order這種類型的Fact對象-----類型約束

2、Fact對象的price屬性值必須小于100------屬性約束

以上條件必須同時滿足當前規則才有可能被激活。

綁定變量既可以用在對象上,也可以用在對象的屬性上。入門案例如下:

// 100-500 元, 加100積分 rule "score_2" when$order:Order($fieldAmount:amount > 100 && amount <= 500); thenSystem.out.println("$fieldAmount=" + $fieldAmount);$order.setScore(100);System.out.println("觸發100-500 元, 加100積分"); end

LHS部分還可以定義多個pattern,多個pattern之間可以使用and或者or進行連接,也可以不寫,默認連接為and。

規則比較操作符

Drools提供的比較操作符,如下表:

符號說明
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于
contains檢查一個Fact對象的某個屬性值是否包含一個指定的對象值
not contains檢查一個Fact對象的某個屬性值是否不包含一個指定的對象值
memberOf判斷一個Fact對象的某個屬性是否在一個或多個集合中
not memberOf判斷一個Fact對象的某個屬性是否不在一個或多個集合中
matches判斷一個Fact對象的屬性是否與提供的標準的Java正則表達式進行匹配
not matches判斷一個Fact對象的屬性是否不與提供的標準的Java正則表達式進行匹配

操作步驟?

第一步:創建實體類,用于測試比較操作符

package com.zzg.model;import java.util.List;public class ComparisonEntity implements java.io.Serializable {/*** 名字集合*/private String names;/*** 字符串集合*/private List<String> list;@Overridepublic String toString() {return "ComparisonEntity{" +"names='" + names + '\'' +", list=" + list +'}';}public String getNames() {return names;}public void setNames(String names) {this.names = names;}public List<String> getList() {return list;}public void setList(List<String> list) {this.list = list;} }

第二步:在/resources/rules下創建規則文件comparison.drl

package rulesimport com.zzg.model.ComparisonEntity;/*用于測試Drools提供的比較操作符 *///測試比較操作符contains rule "rule_comparison_contains"whenComparisonEntity(names contains "張三")ComparisonEntity(list contains names)thenSystem.out.println("規則rule_comparison_contains觸發"); end//測試比較操作符not contains rule "rule_comparison_notContains"whenComparisonEntity(names not contains "張三")ComparisonEntity(list not contains names)thenSystem.out.println("規則rule_comparison_notContains觸發"); end//測試比較操作符memberOf rule "rule_comparison_memberOf"whenComparisonEntity(names memberOf list)thenSystem.out.println("規則rule_comparison_memberOf觸發"); end//測試比較操作符not memberOf rule "rule_comparison_notMemberOf"whenComparisonEntity(names not memberOf list)thenSystem.out.println("規則rule_comparison_notMemberOf觸發"); end//測試比較操作符matches rule "rule_comparison_matches"whenComparisonEntity(names matches "張.*")thenSystem.out.println("規則rule_comparison_matches觸發"); end//測試比較操作符not matches rule "rule_comparison_notMatches"whenComparisonEntity(names not matches "張.*")thenSystem.out.println("規則rule_comparison_notMatches觸發"); end

第三步:編寫單元測試

@Testpublic void test2() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象ComparisonEntity comparisonEntity = new ComparisonEntity();comparisonEntity.setNames("張三");List<String> list = new ArrayList<>();list.add("張三");list.add("李四");comparisonEntity.setList(list);// 第四步kieSession.insert(comparisonEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

效果截圖:

09:52:42.457 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES 規則rule_comparison_contains觸發 規則rule_comparison_memberOf觸發 規則rule_comparison_matches觸發 09:52:42.488 [main] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is now HALTING 09:52:42.488 [main] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is now INACTIVE 09:52:42.488 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now DISPOSED

執行指定規則?

????????在調用規則代碼時,滿足條件的規則都會被執行。那么如果我們只想執行其中的某個規則如何實現呢?

????????Drools給我們提供的方式是通過規則過濾器來實現執行指定規則。對于規則文件不用做任何修改,只需要修改Java代碼即可,如下:

//通過規則過濾器實現只執行指定規則 kieSession.fireAllRules(new kieSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule 名稱"));

關鍵字

Drools的關鍵字分為:硬關鍵字(Hard keywords)和軟關鍵字(Soft keywords)。

硬關鍵字是我們在規則文件中定義包名或者規則名時明確不能使用的,否則程序會報錯。軟關鍵字雖然可以使用,但是不建議使用。

硬關鍵字包括:true false null

軟關鍵字包括:lock-on-active date-effective date-expires no-loop auto-focus activation-group agenda-group ruleflow-group entry-point duration package import dialect salience enabled attributes rule extend when then template query declare function global eval not in or and exists forall accumulate collect from action reverse result end over init

示例:

rule true //不可以

rule "true" 可以

?五、Drools 規則屬性 attributes

前面我們已經知道了規則體的構成如下:

rule "ruleName"attributeswhenLHSthenRHS end

本章節就是針對規則體的attributes屬性部分進行講解。Drools中提供的屬性如下表(部分屬性):

屬性名說明
salience指定規則執行優先級
dialect指定規則使用的語言類型,取值為java和mvel
enabled指定規則是否啟用
date-effective指定規則生效時間
date-expires指定規則失效時間
activation-group激活分組,具有相同分組名稱的規則只能有一個規則觸發
agenda-group議程分組,只有獲取焦點的組中的規則才有可能觸發
timer定時器,指定規則觸發的時間
auto-focus自動獲取焦點,一般結合agenda-group一起使用
no-loop防止死循環,防止自己更新規則再次觸發
lock-on-activeno-loop增強版本。可防止別人更新規則再次出發

enabled屬性?

enabled屬性對應的取值為true和false,默認值為true。

用于指定當前規則是否啟用,如果設置的值為false則當前規則無論是否匹配成功都不會觸發

第一步:創建實體類,用于測試屬性attributes

package com.zzg.model;public class AttributesEnabledEntity implements java.io.Serializable {private int num;@Overridepublic String toString() {return "AttributesEnabledEntity{" +"num=" + num +'}';}public int getNum() {return num;}public void setNum(int num) {this.num = num;} }

第二步:在/resources/rules下創建規則文件attributes-rules.drl

package rules;import com.zzg.model.AttributesEnabledEntity;/*用于測試Drools 屬性:enabled *///測試enabled rule "rule_attributes_enabled"enabled falsewhenAttributesEnabledEntity(num > 10)thenSystem.out.println("規則rule_attributes_enabled觸發"); end

第三步:編寫單元測試

@Testpublic void test4() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象AttributesEnabledEntity enabledEntity = new AttributesEnabledEntity();enabledEntity.setNum(11);// 第四步kieSession.insert(enabledEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

dialect屬性

dialect屬性用于指定當前規則使用的語言類型,取值為java和mvel,默認值為java。

注:mvel是一種基于java語法的表達式語言。

雖然mvel吸收了大量的java語法,但作為一個表達式語言,還是有著很多重要的不同之處,以達到更高的效率,比如:mvel像正則表達式一樣,有直接支持集合、數組和字符串匹配的操作符。

除了表達式語言外,mvel還提供了用來配置和構造字符串的模板語言。

mvel2.x表達式包含以下部分的內容:屬性表達式,布爾表達式,方法調用,變量賦值,函數定義

salience屬性?

????????salience屬性用于指定規則的執行優先級,取值類型為Integer數值越大越優先執行。每個規則都有一個默認的執行順序,如果不設置salience屬性,規則體的執行順序為由上到下。

attributes-rules.drl文件添加如下內容:

/*用于測試Drools 屬性:salience */rule "rule_attributes_salience_1"salience 10whenAttributesEnabledEntity(flag == true)thenSystem.out.println("規則 rule_attributes_salience_1 觸發"); endrule "rule_attributes_salience_2"salience 20whenAttributesEnabledEntity(flag == true)thenSystem.out.println("規則 rule_attributes_salience_2 觸發"); endrule "rule_attributes_salience_3"salience 1whenAttributesEnabledEntity(flag == true)thenSystem.out.println("規則 rule_attributes_salience_3 觸發"); end

AttributesEnabledEntity 類新增boolean 類型(flag字段)

private boolean flag;

效果截圖:

10:39:16.506 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES 規則 rule_attributes_salience_2 觸發 規則 rule_attributes_salience_1 觸發 規則 rule_attributes_salience_3 觸發

no-loop屬性

????????no-loop屬性用于防止死循環,當規則通過update之類的函數修改了Fact對象時,可能使當前規則再次被激活從而導致死循環。取值類型為Boolean,默認值為false。測試步驟如下:

attributes-rules.drl文件添加如下內容:

/*用于測試Drools 屬性:no-loop */rule "rule_attributes_noloop"//no-loop truewhen$attributesNoLoopEntity:AttributesEnabledEntity(num > 1)thenupdate($attributesNoLoopEntity)System.out.println("規則 rule_attributes_noloop 觸發"); end

第二步:編寫單元測試

@Testpublic void test4() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象AttributesEnabledEntity enabledEntity = new AttributesEnabledEntity();enabledEntity.setNum(11);enabledEntity.setFlag(true);// 第四步kieSession.insert(enabledEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

通過控制臺可以看到,由于我們沒有設置no-loop屬性的值,所以發生了死循環。接下來設置no-loop的值為true再次測試則不會發生死循環。

?lock-on-active屬性

lock-on-active這個屬性,可以限制當前規則只會被執行一次,包括當前規則的重復執行不是本身觸發的。取值類型為Boolean,默認值為false。測試步驟如下:

attributes-rules.drl文件添加如下內容:

/*用于測試Drools 屬性:lock-on-active */rule "rule_attributes_lock_on_active_1"no-loop truewhen$attributesLockOnActiveEntity:AttributesEnabledEntity(num > 1)thenupdate($attributesLockOnActiveEntity)System.out.println("規則 rule_attributes_lock_on_active_1 觸發"); endrule "rule_attributes_lock_on_active_2"no-loop truelock-on-active truewhen$attributesLockOnActiveEntity:AttributesEnabledEntity(num > 1)thenupdate($attributesLockOnActiveEntity)System.out.println("規則 rule_attributes_lock_on_active_2 觸發"); end

編寫單元測試:

@Testpublic void test4() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象AttributesEnabledEntity enabledEntity = new AttributesEnabledEntity();enabledEntity.setNum(11);enabledEntity.setFlag(true);// 第四步kieSession.insert(enabledEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

????????no-loop的作用是限制因為modify等更新操作導致規則重復執行,但是有一個限定條件,是當前規則中進行更新導致當前規則重復執行。而不是防止其他規則更新相同的fact對象,導致當前規則更新,lock-on-active可以看作是no-loop的加強版,不僅能限制自己的更新,還能限制別人的更新造成的死循環。

activation-group屬性

activation-group屬性是指激活分組,取值為String類型。具有相同分組名稱的規則只能有一個規則被觸發。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesActivationGroupEntity/*用于測試Drools 屬性: activation-group */rule "rule_attributes_activation_group_1"activation-group "customGroup"when$attributesActivationGroupEntity:AttributesActivationGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_activation_group_1 觸發"); endrule "rule_attributes_activation_group_2"activation-group "customGroup"when$attributesActivationGroupEntity:AttributesActivationGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_activation_group_2 觸發"); end

編寫單元測試:

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesActivationGroupEntity attributesActivationGroupEntity = new AttributesActivationGroupEntity();attributesActivationGroupEntity.setNum(20);kieSession.insert(attributesActivationGroupEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

????????通過控制臺可以發現,上面的兩個規則因為屬于同一個分組,所以只有一個觸發了。同一個分組中的多個規則如果都能夠匹配成功,具體哪一個最終能夠被觸發可以通過salience屬性確定。

agenda-group屬性

agenda-group屬性為議程分組,屬于另一種可控的規則執行方式。用戶可以通過設置agenda-group來控制規則的執行,只有獲取焦點的組中的規則才會被觸發。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesAgendaGroupEntity/*用于測試Drools 屬性: agenda-group */rule "rule_attributes_agenda_group_1"agenda-group "customAgendaGroup1"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_agenda_group_1 觸發"); endrule "rule_attributes_agenda_group_2"agenda-group "customAgendaGroup1"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_agenda_group_2 觸發"); endrule "rule_attributes_activation_group_3"agenda-group "customAgendaGroup2"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_activation_group_3 觸發"); endrule "rule_attributes_agenda_group_4"agenda-group "customAgendaGroup2"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_agenda_group_4 觸發"); end

編寫單元測試:

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesAgendaGroupEntity attributesAgendaGroupEntity = new AttributesAgendaGroupEntity();attributesAgendaGroupEntity.setNum(20);kieSession.insert(attributesAgendaGroupEntity);kieSession.getAgenda().getAgendaGroup("customAgendaGroup2").setFocus();// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

通過控制臺可以看到,只有獲取焦點的分組中的規則才會觸發。與activation-group不同的是,activation-group定義的分組中只能夠有一個規則可以被觸發,而agenda-group分組中的多個規則都可以被觸發。

auto-focus屬性

auto-focus屬性為自動獲取焦點,取值類型為Boolean,默認值為false。一般結合agenda-group屬性使用,當一個議程分組未獲取焦點時,可以設置auto-focus屬性來控制。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesAutoFocusEntity/*用于測試Drools 屬性: auto-focus */rule "rule_attributes_auto_focus_1"agenda-group "customAgendaGroup1"when$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_1 觸發"); endrule "rule_attributes_auto_focus_2"agenda-group "customAgendaGroup1"when$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_2 觸發"); endrule "rule_attributes_auto_focus_3"agenda-group "customAgendaGroup2" // auto-focus truewhen$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_3 觸發"); endrule "rule_attributes_auto_focus_4"agenda-group "customAgendaGroup2"when$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_4 觸發"); end

編寫單元測試

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesAutoFocusEntity attributesAutoFocusEntity = new AttributesAutoFocusEntity();attributesAutoFocusEntity.setNum(20);kieSession.insert(attributesAutoFocusEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

通過控制臺可以看到,設置auto-focus屬性為true的規則都觸發了。

注意:同一個組,只要有個設置auto-focus true 其他的設置不設置都無所謂啦。都會起作用的。

timer屬性

timer屬性可以通過定時器的方式指定規則執行的時間,使用方式有兩種:

方式一:timer (int:??)

此種方式遵循java.util.Timer對象的使用方式,第一個參數表示幾秒后執行,第二個參數表示每隔幾秒執行一次,第二個參數為可選。

方式二:timer(cron:?)

此種方式使用標準的unix cron表達式的使用方式來定義規則執行的時間。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesTimerEntity/*用于測試Drools 屬性: timer */rule "rule_attributes_timer_1"timer(5s 2s)when$attributesTimerEntity:AttributesTimerEntity(num > 1)thenSystem.out.println("規則 rule_attributes_timer_1 觸發"); endrule "rule_attributes_timer_2"timer(cron:0/1 * * * * ?)when$attributesTimerEntity:AttributesTimerEntity(num > 1)thenSystem.out.println("規則 rule_attributes_timer_2 觸發"); end

編寫單元測試:

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesTimerEntity attributesTimerEntity = new AttributesTimerEntity();attributesTimerEntity.setNum(20);kieSession.insert(attributesTimerEntity);kieSession.fireUntilHalt();Thread.sleep(10000);kieSession.halt(); // 關閉kieSession.dispose();

注意:如果規則中有用到了timer屬性,匹配規則需要調用kieSession.fireUntilHalt();這里涉及一個規則引擎的執行模式和線程問題,關于具體細節,我們后續討論。

date-effective屬性

date-effective屬性用于指定規則的生效時間,即只有當前系統時間大于等于設置的時間或者日期規則才有可能觸發。默認日期格式為:dd-MMM-yyyy。用戶也可以自定義日期格式。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesDateEffectiveEntity/*用于測試Drools 屬性: date-effective */rule "rule_attributes_date_effective" // date-effective "20-七月-2021"date-effective "2021-02-20"when$attributesDateEffectiveEntity:AttributesDateEffectiveEntity(num > 1)thenSystem.out.println("規則 rule_attributes_date_effective 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesDateEffectiveEntity attributesDateEffectiveEntity = new AttributesDateEffectiveEntity();attributesDateEffectiveEntity.setNum(20);kieSession.insert(attributesDateEffectiveEntity); // 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

注意:需要在VM參數上加上日期格式:-Ddrools.dateformat=yyyy-MM-dd,在生產環境所在規則引擎的JVM設置中,也需要設置此參數,以保證開發和生產的一致性。

date-expires屬性

date-expires屬性用于指定規則的失效時間,即只有當前系統時間小于設置的時間或者日期規則才有可能觸發。默認日期格式為:dd-MMM-yyyy。用戶也可以自定義日期格式。

第一步:編寫規則文件/resource/rules/dateexpires.drl

package rules import com.zzg.model.AttributesDateExpiresEntity/*用于測試Drools 屬性: date-expires */rule "rule_attributes_date_expires"date-expires "2021-06-20"when$attributesDateExpiresEntity:AttributesDateExpiresEntity(num > 1)thenSystem.out.println("規則 rule_attributes_date_expires 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesDateExpiresEntity attributesDateExpiresEntity = new AttributesDateExpiresEntity();attributesDateExpiresEntity.setNum(20);kieSession.insert(attributesDateExpiresEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

注意:需要在VM參數上加上日期格式:-Ddrools.dateformat=yyyy-MM-dd,在生產環境所在規則引擎的JVM設置中,也需要設置此參數,以保證開發和生產的一致性。

六、Drools高級語法

我們已經知道了一套完整的規則文件內容構成如下:

關鍵字描述
package包名,只限于邏輯上的管理,同一個包名下的查詢或者函數可以直接調用
import用于導入類或者靜態方法
global全局變量
function自定義函數
query查詢
rule end規則體

?global全局變量

global關鍵字用于在規則文件中定義全局變量,它可以讓應用程序的對象在規則文件中能夠被訪問。可以用來為規則文件提供數據或服務。

語法結構為:global 對象類型 對象名稱

在使用global定義的全局變量時有兩點需要注意:

1、如果對象類型為包裝類型時,在一個規則中改變了global的值,那么只針對當前規則有效,對其他規則中的global不會有影響。可以理解為它是當前規則代碼中的global副本,規則內部修改不會影響全局的使用。

2、如果對象類型為集合類型或JavaBean時,在一個規則中改變了global的值,對java代碼和所有規則都有效。

第一步:編寫規則文件

package rules import com.zzg.model.GlobalEntity/*用于測試Drools 全局變量 : global */global java.lang.Integer globalCount global java.util.List globalListrule "rule_global_1"when$globalEntity:GlobalEntity(num > 1)thenSystem.out.println("規則 rule_global_1 開始...");globalCount++ ;globalList.add("張三");globalList.add("李四");System.out.println(globalCount);System.out.println(globalList);System.out.println("規則 rule_global_1 結束..."); endrule "rule_global_2"when$globalEntity:GlobalEntity(num > 1)thenSystem.out.println("規則 rule_global_2 開始...");System.out.println(globalCount);System.out.println(globalList);System.out.println("規則 rule_global_2 結束..."); end

編寫單元測試

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 GlobalEntity globalEntity = new GlobalEntity(); globalEntity.setNum(20);ArrayList<Object> globalList = new ArrayList<>();Integer globalCount = 10; kieSession.setGlobal("globalCount", 10); kieSession.setGlobal("globalList", globalList);kieSession.insert(globalEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

query查詢

query查詢提供了一種查詢working memory中符合約束條件的Fact對象的簡單方法。它僅包含規則文件中的LHS部分,不用指定“when”和“then”部分并且以end結束。

語法結構如下:

query 查詢的名稱(可選參數)LHS end

編寫規則文件

package rules import com.zzg.model.QueryEntity/*用于測試Drools 方法: query *///無參查詢 query "query_1"$queryEntity:QueryEntity(age>20) end//有參查詢 query "query_2"(Integer qAge,String qName)$queryEntity:QueryEntity(age > qAge && name == qName) end

編寫單元測試

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 QueryEntity queryEntity1= new QueryEntity(); QueryEntity queryEntity2= new QueryEntity(); QueryEntity queryEntity3= new QueryEntity();queryEntity1.setName("張三").setAge(10); queryEntity2.setName("李四").setAge(20); queryEntity3.setName("王五").setAge(30);kieSession.insert(queryEntity1); kieSession.insert(queryEntity2); kieSession.insert(queryEntity3);QueryResults results1 = kieSession.getQueryResults("query_1"); QueryResults results2 = kieSession.getQueryResults("query_2", 1, "張三");for (QueryResultsRow queryResultsRow : results1) {QueryEntity queryEntity = (QueryEntity) (queryResultsRow.get("$queryEntity"));System.out.println(queryEntity);}for (QueryResultsRow queryResultsRow : results2) {QueryEntity queryEntity = (QueryEntity) (queryResultsRow.get("$queryEntity"));System.out.println(queryEntity);} // 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

?function函數

function關鍵字用于在規則文件中定義函數,就相當于java類中的方法一樣。可以在規則體中調用定義的函數。使用函數的好處是可以將業務邏輯集中放置在一個地方,根據需要可以對函數進行修改。

函數定義的語法結構如下:

function 返回值類型 函數名(可選參數){ //邏輯代碼}

編寫規則文件/resources/rules/function.drl

package rules import com.zzg.model.FunctionEntity/*用于測試Drools 方法: function *///定義一個 假發 方法 function Integer add(Integer num){return num+10; }rule "function"when$functionEntity:FunctionEntity(num>20)thenInteger result = add($functionEntity.getNum());System.out.println(result); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 FunctionEntity functionEntity = new FunctionEntity(); functionEntity.setNum(30);kieSession.insert(functionEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

條件-LHS加強

前面我們已經知道了在規則體中的LHS部分是介于when和then之間的部分,主要用于模式匹配,只有匹配結果為true時,才會觸發RHS部分的執行。本章節我們會針對LHS部分學習幾個新的用法。

復合值限制in/not in

復合值限制是指超過一種匹配值的限制條件,類似于SQL語句中的in關鍵字。Drools規則體中的LHS部分可以使用in或者not in進行復合值的匹配。

語法結構如下:

Object(field in (比較值1,比較值2...))

編寫規則文件

package rules import com.zzg.model.LhsInEntity/*用于測試Drools LHS: in not in */rule "lhs_in"when$lhsInEntity:LhsInEntity(name in ("張三","李四","王五"))thenSystem.out.println("規則 lhs_in 觸發"); endrule "lhs_not_in"when$lhsInEntity:LhsInEntity(name not in ("張三","李四","王五"))thenSystem.out.println("規則 lhs_not_in 觸發"); end

條件元素eval

eval用于規則體的LHS部分,并返回一個Boolean類型的值。

語法結構如下:

eval(表達式)

編寫規則文件

package rules import com.zzg.model.LhsEvalEntity/*用于測試Drools LHS: in not in */rule "lhs_eval"when$lhsInEntity:LhsEvalEntity(age > 10) and eval(2>1)thenSystem.out.println("規則 lhs_eval 觸發"); end

條件元素not

not用于判斷Working Memory中是否存在某個Fact對象,如果不存在則返回true,如果存在則返回false。

語法結構如下:

not Object(可選屬性約束)

編寫規則文件

package rules import com.zzg.model.LhsNotEntity/*用于測試Drools LHS: not */rule "lhs_not"whennot $lhsNotEntity:LhsNotEntity(age > 10)thenSystem.out.println("規則 lhs_not 觸發"); end

條件元素exists

exists的作用與not相反,用于判斷Working Memory中是否存在某個Fact對象,如果存在則返回true,不存在則返回false。

語法結構如下:

exists Object(可選屬性約束)

編寫規則文件

package rules import com.zzg.model.LhsEvalEntity/*用于測試Drools LHS: exists */rule "lhs_exists"whenexists $lhsInEntity:LhsEvalEntity(age > 10)thenSystem.out.println("規則 lhs_eval 觸發"); end

疑問:在LHS部分進行條件編寫時并沒有使用exists也可以達到判斷Working Memory中是否存在某個符合條件的Fact元素的目的,那么我們使用exists還有什么意義?

兩者的區別:當向Working Memory中加入多個滿足條件的Fact對象時,使用了exists的規則執行一次,不使用exists的規則會執行多次。

規則繼承

規則之間可以使用extends關鍵字進行規則條件部分的繼承,類似于java類之間的繼承。

結果-RHS

規則文件的RHS部分的主要作用是通過插入,刪除或修改工作內存中的Fact數據,來達到控制規則引擎執行的目的。Drools提供了一些方法可以用來操作工作內存中的數據,操作完成后規則引擎會重新進行相關規則的匹配,原來沒有匹配成功的規則在我們修改數據完成后有可能就會匹配成功了。

insert方法

insert方法的作用是向工作內存中插入數據,并讓相關的規則重新匹配。

編寫規則文件

package rules import com.zzg.model.RhsInsertEntity/*用于測試Drools RHS: insert */rule "rhs_insert_1"when$rhsInsertEntity:RhsInsertEntity(age <= 10)thenRhsInsertEntity rhsInsertEntity = new RhsInsertEntity();rhsInsertEntity.setAge(15);insert(rhsInsertEntity);System.out.println("規則 rhs_insert_1 觸發"); endrule "rhs_insert_2"when$rhsInsertEntity:RhsInsertEntity(age <=20 && age>10)thenRhsInsertEntity rhsInsertEntity = new RhsInsertEntity();rhsInsertEntity.setAge(25);insert(rhsInsertEntity);System.out.println("規則 rhs_insert_2 觸發"); endrule "rhs_insert_3"when$rhsInsertEntity:RhsInsertEntity(age > 20 )thenSystem.out.println("規則 rhs_insert_3 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsInsertEntity rhsInsertEntity = new RhsInsertEntity(); rhsInsertEntity.setAge(5);kieSession.insert(rhsInsertEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺輸出可以發現,3個規則都觸發了,這是因為首先進行規則匹配時只有第一個規則可以匹配成功,但是在第一個規則中向工作內存中插入了一個數據導致重新進行規則匹配,此時第二個規則可以匹配成功。在第二個規則中同樣向工作內存中插入了一個數據導致重新進行規則匹配,那么第三個規則就出發了。

update方法

update方法的作用是更新工作內存中的數據,并讓相關的規則重新匹配。?(要避免死循環)

編寫規則文件

package rules import com.zzg.model.RhsUpdateEntity/*用于測試Drools RHS: update */rule "rhs_update_1"when$rhsUpdateEntity:RhsUpdateEntity(age <= 10)then$rhsUpdateEntity.setAge(15);update($rhsUpdateEntity);System.out.println("規則 rhs_update_1 觸發"); endrule "rhs_update_2"when$rhsUpdateEntity:RhsUpdateEntity(age <=20 && age>10)then$rhsUpdateEntity.setAge(25);update($rhsUpdateEntity);System.out.println("規則 rhs_update_2 觸發"); endrule "rhs_update_3"when$rhsUpdateEntity:RhsUpdateEntity(age > 20 )thenSystem.out.println("規則 rhs_update_3 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsUpdateEntity rhsUpdateEntity = new RhsUpdateEntity(); rhsUpdateEntity.setAge(5);kieSession.insert(rhsUpdateEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺的輸出可以看到規則文件中定義的三個規則都觸發了。

在更新數據時需要注意防止發生死循環。

modify方法

modify方法的作用跟update一樣,是更新工作內存中的數據,并讓相關的規則重新匹配。只不過語法略有區別?(要避免死循環)

編寫規則文件

package rules import com.zzg.model.RhsModifyEntity/*用于測試Drools RHS: modify */rule "rhs_modify_1"when$rhsModifyEntity:RhsModifyEntity(age <= 10)thenmodify($rhsModifyEntity){setAge(15)}System.out.println("規則 rhs_modify_1 觸發"); endrule "rhs_modify_2"when$rhsModifyEntity:RhsModifyEntity(age <=20 && age>10)thenmodify($rhsModifyEntity){setAge(25)}System.out.println("規則 rhs_modify_2 觸發"); endrule "rhs_modify_3"when$rhsModifyEntity:RhsModifyEntity(age > 20 )thenSystem.out.println("規則 rhs_modify_3 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsModifyEntity rhsModifyEntity = new RhsModifyEntity(); rhsModifyEntity.setAge(5);kieSession.insert(rhsModifyEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺的輸出可以看到規則文件中定義的三個規則都觸發了。

在更新數據時需要注意防止發生死循環。

retract/delete方法

retract方法的作用是刪除工作內存中的數據,并讓相關的規則重新匹配。

編寫規則文件

package rules import com.zzg.model.RhsRetractEntity/*用于測試Drools RHS: retract */rule "rhs_retract_1"when$rhsRetractEntity:RhsRetractEntity(age <= 10)then // retract($rhsRetractEntity);System.out.println("規則 rhs_retract_1 觸發"); endrule "rhs_retract_2"when$rhsRetractEntity:RhsRetractEntity(age <= 10)thenSystem.out.println("規則 rhs_retract_2 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsRetractEntity rhsRetractEntity = new RhsRetractEntity(); rhsRetractEntity.setAge(5);kieSession.insert(rhsRetractEntity); // 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺輸出可以發現,只有第一個規則觸發了,因為在第一個規則中將工作內存中的數據刪除了導致第二個規則并沒有匹配成功。

RHS加強

RHS部分是規則體的重要組成部分,當LHS部分的條件匹配成功后,對應的RHS部分就會觸發執行。一般在RHS部分中需要進行業務處理。

在RHS部分Drools為我們提供了一個內置對象,名稱就是drools。本小節我們來介紹幾個drools對象提供的方法。

halt

halt方法的作用是立即終止后面所有規則的執行

編寫規則文件

package rules import com.zzg.model.RhsHaftEntity/*用于測試Drools RHS: haft */rule "rhs_haft_1"when$rhsHaftEntity:RhsHaftEntity(age <= 10)thendrools.halt();System.out.println("規則 rhs_haft_1 觸發"); endrule "rhs_haft_2"when$rhsHaftEntity:RhsHaftEntity(age <= 20)thenSystem.out.println("規則 rhs_haft_2 觸發"); end

getWorkingMemory

getWorkingMemory方法的作用是返回工作內存對象。

rule "rhs_get_working_memory_1"when$rhsDroolsMethodsEntity:RhsDroolsMethodsEntity(age <= 10)thenSystem.out.println(drools.getWorkingMemory());System.out.println("規則 rhs_get_working_memory_1 觸發"); end

getRule

getRule方法的作用是返回規則對象。

rule "rhs_rule_2"when$rhsDroolsMethodsEntity:RhsDroolsMethodsEntity(age <=20)thenSystem.out.println(drools.getRule());System.out.println("規則 rhs_rule_2 觸發"); end

規則文件編碼規范

我們在進行drl類型的規則文件編寫時盡量遵循如下規范:

  • 所有的規則文件(.drl)應統一放在一個規定的文件夾中,如:/rules文件夾
  • 書寫的每個規則應盡量加上注釋。注釋要清晰明了,言簡意賅
  • 同一類型的對象盡量放在一個規則文件中,如所有Student類型的對象盡量放在一個規則文件中
  • 規則結果部分(RHS)盡量不要有條件語句,如if(...),盡量不要有復雜的邏輯和深層次的嵌套語句
  • 每個規則最好都加上salience屬性,明確執行順序
  • Drools默認dialect為"Java",盡量避免使用dialect "mvel"

七、WorkBench

?WorkBench簡介

WorkBench是KIE組件中的元素,也稱為KIE-WB,是Drools-WB與JBPM-WB的結合體。它是一個可視化的規則編輯器。WorkBench其實就是一個war包。

WorkBench經過幾次版本迭代,已經不提供tomcat啟動的war包,綜合考慮,本課程仍然采用 tomcat版本作為演示。

環境:

  • apache-tomcat-9.0.29
  • kie-drools-wb-7.6.0.Final-tomcat8 下載地址:Drools - Download

說明:

準備jar包:需要放到tomcat lib中,否則啟動失敗

具體安裝步驟:

配置 Tomcat

1.修改tomcat-user.xml,添加用戶

<?xml version="1.0" encoding="UTF-8"?> <tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><!--定義admin角色--><role rolename="admin"/><!--定義一個用戶,用戶名為kie,密碼為kie,對應的角色為admin角色--><user username="kie-web" password="kie-web123" roles="admin"/><user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/> </tomcat-users>

2.修改server.xml

<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- SingleSignOn valve, share authentication between web applicationsDocumentation at: /docs/config/valve.html --><!--<Valve className="org.apache.catalina.authenticator.SingleSignOn" />--><!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Valve className="org.kie.integration.tomcat.JACCValve"/></Host>

3.復制jar到tomcat根目錄的lib下面:

kie-tomcat-integration-7.10.0.Final.jar javax.security.jacc-api-1.5.jar slf4j-api-1.7.25.jar

4.復制 kie-drools-wb-7.6.0.Final-tomcat8.war 到tomcat webapp下面并修改成kie-web.war

啟動服務器

啟動tomcat

訪問http://localhost:8080/kie-web,可以看到WorkBench的登錄頁面。使用前面創建的kie-web/kie-web123登錄

登錄成功后進入系統首頁:

WorkBench使用?

創建空間、項目

首頁中點擊 project,創建空間

?

我們創建一個 ityml 的工作空間。點擊 Save,保存。

?點擊工作空間當中的 ityml,進入空間

點擊Add Project添加項目

成功后,我們可以看見下圖

?左上角的導航條,可以在空間和project之間切換

創建數據對象和drl文件

切換到pro1項目內,點擊 Create New Assert

選中數據對象:

?輸入Order,點擊確定,成功后跳轉如下頁面

?

Order相當于我們代碼中的實體類,在左側 Project Explorer視圖中,可以看見項目結構

接下來添加字段,點擊添加字段按鈕:

?ID 位置,輸入java bean的字段,標簽是備注信息,類型選擇對應的字段類型,保存,點擊創建,關閉彈窗,點擊創建并繼續,可以繼續創建。

點擊右上角的保存,至此,一個數據對象我們就創建完成,可以在源代碼中查看代碼內容。

接下來我們創建一個drl文件,創建過程跟創建bean類似,drl文件內容如下

package com.ityml.pro1;rule "rule_1"when$order:Order(age > 10)thenSystem.out.print("rule run..."); end

保存之后,點擊導航條回到項目主頁

設置KieBase+KieSession

項目首頁點擊Settings

選擇知識庫跟會話

?

彈出窗口,輸入Kiebase名稱即可,我們以kb1為例

?同理,我們補充完軟件包信息,添加只是會話,即kiesession

?操作完成后,不要忘記保存,此時,我們可在Project Explorer視圖中,resource/META-INF/kmodule.xml中看見如下信息

<kmodule xmlns="http://www.drools.org/xsd/kmodule" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><kbase name="kb1" default="false" eventProcessingMode="stream" equalsBehavior="identity" packages="com.ityml.pro1"><ksession name="ks1" type="stateful" default="true" clockType="realtime"/></kbase> </kmodule>

導航回到項目首頁,進行編譯發布

發布成功后,我們可以在maven倉庫中看到對應的jar

?

也可以訪問:http://localhost:8080/kie-web/maven2/com/ityml/pro1/1.0.0/pro1-1.0.0.jar?驗證是否發布成功.

代碼使用?

@Testpublic void test() throws Exception{//通過此URL可以訪問到maven倉庫中的jar包//URL地址構成:http://ip地址:Tomcat端口號/WorkBench工程名/maven2/坐標/版本號/xxx.jarString url = "http://localhost:8080/kie-web/maven2/com/ityml/pro1/1.0.0/pro1-1.0.0.jar";KieServices kieServices = KieServices.Factory.get();UrlResource resource = (UrlResource) kieServices.getResources().newUrlResource(url);//認證resource.setUsername("kie-web");resource.setPassword("kie-web123");resource.setBasicAuthentication("enabled");KieRepository repository = kieServices.getRepository();//通過輸入流讀取maven倉庫中的jar包數據,包裝成KieModule模塊添加到倉庫中KieModule kieModule = repository.addKieModule(kieServices.getResources().newInputStreamResource(resource.getInputStream()));KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());KieSession session = kieContainer.newKieSession();Order order = new Order();order.setName("張三");order.setAge(30);session.insert(order);session.fireAllRules();session.dispose();}

本文參考資料:

Drools規則引擎?

總結

以上是生活随笔為你收集整理的Drools 规则引擎一文读懂的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

精品日本一区二区三区在线观看 | 熟妇人妻中文av无码 | 久久视频在线观看精品 | 国产成人av免费观看 | 无码国内精品人妻少妇 | 午夜不卡av免费 一本久久a久久精品vr综合 | 在线观看国产午夜福利片 | 国产亚洲视频中文字幕97精品 | 国产婷婷色一区二区三区在线 | 国产精品人人妻人人爽 | 日本乱人伦片中文三区 | 婷婷综合久久中文字幕蜜桃三电影 | 国产成人人人97超碰超爽8 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 无码免费一区二区三区 | 任你躁国产自任一区二区三区 | 玩弄人妻少妇500系列视频 | √天堂资源地址中文在线 | 18禁止看的免费污网站 | 日韩视频 中文字幕 视频一区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 午夜福利不卡在线视频 | 欧美真人作爱免费视频 | 中文字幕无码免费久久9一区9 | 国产精品久久久久久久影院 | 亚洲综合无码久久精品综合 | 日本高清一区免费中文视频 | 婷婷五月综合激情中文字幕 | 丝袜人妻一区二区三区 | 久久综合给合久久狠狠狠97色 | 欧美日韩久久久精品a片 | 国产精品无码mv在线观看 | 好爽又高潮了毛片免费下载 | 精品国产一区av天美传媒 | 激情人妻另类人妻伦 | 亚洲阿v天堂在线 | 精品无码一区二区三区爱欲 | 国产精品人妻一区二区三区四 | 红桃av一区二区三区在线无码av | 在线看片无码永久免费视频 | 日韩精品无码一区二区中文字幕 | 好爽又高潮了毛片免费下载 | 国产特级毛片aaaaaa高潮流水 | 99久久久无码国产aaa精品 | 激情综合激情五月俺也去 | 女人被爽到呻吟gif动态图视看 | 国内精品一区二区三区不卡 | 午夜丰满少妇性开放视频 | 国产免费久久久久久无码 | 国产极品美女高潮无套在线观看 | 日韩精品一区二区av在线 | 国产成人精品一区二区在线小狼 | 99麻豆久久久国产精品免费 | 精品一区二区不卡无码av | 色五月丁香五月综合五月 | 国产农村妇女高潮大叫 | 国产精品99爱免费视频 | 国产熟妇高潮叫床视频播放 | 久久婷婷五月综合色国产香蕉 | 天天做天天爱天天爽综合网 | 激情人妻另类人妻伦 | 国产精品多人p群无码 | 丰满少妇人妻久久久久久 | 成人无码精品1区2区3区免费看 | 亚洲精品成人福利网站 | 内射老妇bbwx0c0ck | 日本精品人妻无码77777 天堂一区人妻无码 | 国产无遮挡又黄又爽又色 | 成人免费视频视频在线观看 免费 | 中文字幕乱码中文乱码51精品 | 十八禁视频网站在线观看 | 夜夜躁日日躁狠狠久久av | 中文字幕人成乱码熟女app | 99精品久久毛片a片 | 久久亚洲日韩精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | av人摸人人人澡人人超碰下载 | 天海翼激烈高潮到腰振不止 | 亚洲国精产品一二二线 | 精品国产一区二区三区四区 | 国产卡一卡二卡三 | 少妇无码一区二区二三区 | 天天拍夜夜添久久精品大 | 夫妻免费无码v看片 | 欧美 亚洲 国产 另类 | 两性色午夜免费视频 | 精品国产成人一区二区三区 | 18无码粉嫩小泬无套在线观看 | 亚洲 a v无 码免 费 成 人 a v | 中文字幕无码免费久久99 | 小鲜肉自慰网站xnxx | 国产又爽又猛又粗的视频a片 | 日本一卡二卡不卡视频查询 | 97人妻精品一区二区三区 | 国产超级va在线观看视频 | 免费国产成人高清在线观看网站 | 亚洲熟妇色xxxxx欧美老妇y | 蜜桃无码一区二区三区 | 日韩精品乱码av一区二区 | 久久久久久亚洲精品a片成人 | 乱中年女人伦av三区 | 午夜时刻免费入口 | 午夜精品久久久久久久久 | 欧美人与物videos另类 | 国产成人午夜福利在线播放 | 亚洲一区av无码专区在线观看 | 国产成人综合色在线观看网站 | 亚洲乱码国产乱码精品精 | 色窝窝无码一区二区三区色欲 | 亚洲成色www久久网站 | 乱人伦人妻中文字幕无码 | 无遮挡国产高潮视频免费观看 | 鲁大师影院在线观看 | 欧美怡红院免费全部视频 | 亚洲人成无码网www | av香港经典三级级 在线 | 亚洲精品成人福利网站 | 国产成人精品视频ⅴa片软件竹菊 | 国产综合久久久久鬼色 | 少妇愉情理伦片bd | 内射爽无广熟女亚洲 | 一本无码人妻在中文字幕免费 | 无码乱肉视频免费大全合集 | 中文字幕无码视频专区 | v一区无码内射国产 | 中文字幕无线码免费人妻 | 日日夜夜撸啊撸 | 国产成人无码午夜视频在线观看 | 领导边摸边吃奶边做爽在线观看 | 亚洲成色www久久网站 | 黑人玩弄人妻中文在线 | 日韩欧美中文字幕在线三区 | a在线观看免费网站大全 | 一本大道伊人av久久综合 | 日本爽爽爽爽爽爽在线观看免 | 欧美国产日韩亚洲中文 | 无码乱肉视频免费大全合集 | 国产免费无码一区二区视频 | 久久亚洲精品中文字幕无男同 | 人人爽人人爽人人片av亚洲 | 欧美xxxxx精品 | 日韩精品无码一区二区中文字幕 | 中文字幕无码热在线视频 | 中文字幕精品av一区二区五区 | 国产亚洲精品久久久久久久久动漫 | 无套内谢的新婚少妇国语播放 | www国产亚洲精品久久网站 | 国产精品丝袜黑色高跟鞋 | 亚洲精品国产第一综合99久久 | 欧美刺激性大交 | 97精品国产97久久久久久免费 | 乱码午夜-极国产极内射 | 高潮毛片无遮挡高清免费 | 亚洲综合另类小说色区 | 一本无码人妻在中文字幕免费 | 狠狠亚洲超碰狼人久久 | 夜先锋av资源网站 | 又粗又大又硬毛片免费看 | 综合激情五月综合激情五月激情1 | 熟妇人妻无乱码中文字幕 | 免费播放一区二区三区 | 伦伦影院午夜理论片 | 久青草影院在线观看国产 | 麻豆人妻少妇精品无码专区 | 欧美 日韩 亚洲 在线 | 亚洲日本在线电影 | 精品少妇爆乳无码av无码专区 | 亚洲国产欧美国产综合一区 | 国产午夜亚洲精品不卡 | 国产精品无码久久av | 日本爽爽爽爽爽爽在线观看免 | 国产乱码精品一品二品 | 亚洲乱码国产乱码精品精 | 亚洲精品一区二区三区在线 | 国产精品高潮呻吟av久久 | 人人妻人人澡人人爽精品欧美 | 亚洲日本va中文字幕 | 亚洲 另类 在线 欧美 制服 | 欧美性生交活xxxxxdddd | 日日摸夜夜摸狠狠摸婷婷 | 免费乱码人妻系列无码专区 | 夜精品a片一区二区三区无码白浆 | 1000部夫妻午夜免费 | 国产在线一区二区三区四区五区 | 麻豆国产97在线 | 欧洲 | 国产女主播喷水视频在线观看 | 欧美放荡的少妇 | 人妻少妇精品无码专区二区 | 国产精品a成v人在线播放 | 欧美黑人性暴力猛交喷水 | 桃花色综合影院 | 四虎国产精品免费久久 | 亚洲爆乳精品无码一区二区三区 | 日韩视频 中文字幕 视频一区 | 露脸叫床粗话东北少妇 | 国产成人精品无码播放 | 2019午夜福利不卡片在线 | 国产内射爽爽大片视频社区在线 | 噜噜噜亚洲色成人网站 | 亚洲欧美日韩成人高清在线一区 | 国产乱人偷精品人妻a片 | 国产成人精品一区二区在线小狼 | 欧美色就是色 | 亚洲国产av美女网站 | 国产内射爽爽大片视频社区在线 | 疯狂三人交性欧美 | 国产乱人无码伦av在线a | 国产女主播喷水视频在线观看 | 中文字幕无码免费久久9一区9 | 亚洲区欧美区综合区自拍区 | 无码福利日韩神码福利片 | 国产精品-区区久久久狼 | 装睡被陌生人摸出水好爽 | 亚洲人成无码网www | 国产真人无遮挡作爱免费视频 | 男人扒开女人内裤强吻桶进去 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 大色综合色综合网站 | 波多野结衣 黑人 | 中文字幕无码av激情不卡 | 性史性农村dvd毛片 | 欧美日本免费一区二区三区 | 亚洲aⅴ无码成人网站国产app | 性欧美videos高清精品 | 久久久精品456亚洲影院 | 天下第一社区视频www日本 | 国产三级久久久精品麻豆三级 | 99久久人妻精品免费一区 | 超碰97人人做人人爱少妇 | 牲交欧美兽交欧美 | 中文无码成人免费视频在线观看 | 日韩亚洲欧美精品综合 | 亚洲精品中文字幕久久久久 | 性啪啪chinese东北女人 | 国产激情艳情在线看视频 | 欧美人与动性行为视频 | 宝宝好涨水快流出来免费视频 | 鲁大师影院在线观看 | 97人妻精品一区二区三区 | 真人与拘做受免费视频一 | 日本爽爽爽爽爽爽在线观看免 | 亚洲精品国产精品乱码不卡 | 欧美黑人巨大xxxxx | 精品国精品国产自在久国产87 | 国产亚洲tv在线观看 | 精品亚洲韩国一区二区三区 | 国产精品人妻一区二区三区四 | 国产 浪潮av性色四虎 | 亚洲国产精华液网站w | 国产在线aaa片一区二区99 | 亚洲中文字幕无码中文字在线 | 亚洲 日韩 欧美 成人 在线观看 | 未满小14洗澡无码视频网站 | 成人性做爰aaa片免费看不忠 | 色欲人妻aaaaaaa无码 | 亚洲热妇无码av在线播放 | 在线观看国产一区二区三区 | 日韩精品a片一区二区三区妖精 | 亚洲色偷偷男人的天堂 | 在教室伦流澡到高潮hnp视频 | 午夜免费福利小电影 | 暴力强奷在线播放无码 | 国精产品一品二品国精品69xx | 国产真实乱对白精彩久久 | 亚洲精品国产第一综合99久久 | 国产麻豆精品一区二区三区v视界 | 国产精品沙发午睡系列 | 色婷婷久久一区二区三区麻豆 | 精品欧美一区二区三区久久久 | 久久综合香蕉国产蜜臀av | 人妻体内射精一区二区三四 | 97久久国产亚洲精品超碰热 | 青草视频在线播放 | 中文精品久久久久人妻不卡 | 丰满人妻翻云覆雨呻吟视频 | 一本无码人妻在中文字幕免费 | 久久亚洲a片com人成 | 中文字幕人妻无码一区二区三区 | 无码人妻av免费一区二区三区 | 精品国产av色一区二区深夜久久 | 国产成人精品久久亚洲高清不卡 | 无码国模国产在线观看 | 久久久久久亚洲精品a片成人 | 无码av最新清无码专区吞精 | 日本精品少妇一区二区三区 | 国产极品视觉盛宴 | 国产成人亚洲综合无码 | 精品一二三区久久aaa片 | 一本大道久久东京热无码av | 国产精品久久久久久亚洲影视内衣 | 精品欧洲av无码一区二区三区 | 亚洲综合无码一区二区三区 | 亚洲国产精华液网站w | 人人澡人摸人人添 | 成人三级无码视频在线观看 | 欧美 亚洲 国产 另类 | 偷窥日本少妇撒尿chinese | 日本在线高清不卡免费播放 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久久久久九九精品久 | 亚洲国产精品毛片av不卡在线 | 国内综合精品午夜久久资源 | 亚洲国产精品美女久久久久 | 久久国产精品精品国产色婷婷 | 在教室伦流澡到高潮hnp视频 | 亚洲国产欧美日韩精品一区二区三区 | 十八禁视频网站在线观看 | 亚洲精品国产品国语在线观看 | 中文字幕 亚洲精品 第1页 | 日日躁夜夜躁狠狠躁 | 成在人线av无码免费 | 最近的中文字幕在线看视频 | 欧美精品无码一区二区三区 | 久久精品99久久香蕉国产色戒 | 无码人妻精品一区二区三区下载 | 无码人妻出轨黑人中文字幕 | 久久99精品久久久久婷婷 | 国产亚洲美女精品久久久2020 | 午夜无码人妻av大片色欲 | 欧美变态另类xxxx | 色综合天天综合狠狠爱 | 亚洲综合精品香蕉久久网 | 永久免费观看国产裸体美女 | 国产亚av手机在线观看 | 一区二区三区乱码在线 | 欧洲 | 亚洲啪av永久无码精品放毛片 | 精品欧美一区二区三区久久久 | 亚洲国产精品美女久久久久 | 免费看少妇作爱视频 | 欧美 亚洲 国产 另类 | 国产av久久久久精东av | 亚洲国产欧美日韩精品一区二区三区 | 激情人妻另类人妻伦 | av香港经典三级级 在线 | 婷婷丁香五月天综合东京热 | av小次郎收藏 | 特黄特色大片免费播放器图片 | 国产午夜手机精彩视频 | 熟妇女人妻丰满少妇中文字幕 | 国产热a欧美热a在线视频 | 一个人看的www免费视频在线观看 | 女人和拘做爰正片视频 | 国产精品无码一区二区三区不卡 | 美女张开腿让人桶 | 乌克兰少妇性做爰 | 中文字幕无线码 | 青春草在线视频免费观看 | 99久久婷婷国产综合精品青草免费 | 波多野42部无码喷潮在线 | 国产又爽又黄又刺激的视频 | 伊人久久大香线焦av综合影院 | 伊人久久大香线蕉午夜 | 国产一区二区三区四区五区加勒比 | 欧美国产亚洲日韩在线二区 | 国产卡一卡二卡三 | 亚洲一区二区三区偷拍女厕 | 一区二区三区高清视频一 | 18精品久久久无码午夜福利 | 午夜丰满少妇性开放视频 | 欧美精品一区二区精品久久 | 精品无码成人片一区二区98 | 蜜臀av无码人妻精品 | 中文字幕色婷婷在线视频 | 国产精品无码一区二区三区不卡 | 性做久久久久久久久 | 少妇邻居内射在线 | 国产又爽又猛又粗的视频a片 | 97精品人妻一区二区三区香蕉 | 又大又黄又粗又爽的免费视频 | 国产麻豆精品一区二区三区v视界 | 色婷婷av一区二区三区之红樱桃 | 精品国产青草久久久久福利 | 久久久成人毛片无码 | 狠狠噜狠狠狠狠丁香五月 | 久久久国产一区二区三区 | 亚洲欧洲无卡二区视頻 | 曰韩无码二三区中文字幕 | 国产亚洲精品久久久久久国模美 | 国产一区二区三区四区五区加勒比 | 亚洲精品综合五月久久小说 | 精品欧洲av无码一区二区三区 | 波多野结衣aⅴ在线 | 亚洲国产精品无码一区二区三区 | 久久精品国产一区二区三区肥胖 | 久久无码专区国产精品s | 久久无码中文字幕免费影院蜜桃 | 日日麻批免费40分钟无码 | av在线亚洲欧洲日产一区二区 | 天海翼激烈高潮到腰振不止 | 亚洲精品综合五月久久小说 | 99国产精品白浆在线观看免费 | 亚洲 日韩 欧美 成人 在线观看 | 久久精品视频在线看15 | 日本xxxx色视频在线观看免费 | 久久综合久久自在自线精品自 | 中文字幕无码日韩欧毛 | 麻豆md0077饥渴少妇 | 一本无码人妻在中文字幕免费 | 自拍偷自拍亚洲精品10p | 97久久超碰中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 沈阳熟女露脸对白视频 | 日韩精品久久久肉伦网站 | 亚洲日本va午夜在线电影 | 国产疯狂伦交大片 | 成 人影片 免费观看 | 亚洲精品中文字幕 | 久久精品中文字幕一区 | 国产亲子乱弄免费视频 | 日本又色又爽又黄的a片18禁 | 天天躁夜夜躁狠狠是什么心态 | 精品国产成人一区二区三区 | 午夜精品久久久久久久久 | 久久国产劲爆∧v内射 | 天堂亚洲2017在线观看 | 久久精品国产亚洲精品 | 波多野结衣一区二区三区av免费 | 天堂无码人妻精品一区二区三区 | 国产成人午夜福利在线播放 | a片免费视频在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 国产人妻人伦精品 | 久久精品国产一区二区三区肥胖 | 国产真实夫妇视频 | 亚洲熟熟妇xxxx | 99久久精品国产一区二区蜜芽 | 国产精品99久久精品爆乳 | 人人妻人人藻人人爽欧美一区 | 又色又爽又黄的美女裸体网站 | 少妇人妻av毛片在线看 | 无码午夜成人1000部免费视频 | 免费无码的av片在线观看 | 好男人社区资源 | 2020最新国产自产精品 | 色婷婷香蕉在线一区二区 | 精品人妻人人做人人爽夜夜爽 | 国产乱人伦偷精品视频 | 特黄特色大片免费播放器图片 | 久久综合九色综合欧美狠狠 | 亚洲 a v无 码免 费 成 人 a v | 高潮毛片无遮挡高清免费 | 国产午夜无码视频在线观看 | 国产又爽又猛又粗的视频a片 | 国产精品亚洲一区二区三区喷水 | 国产猛烈高潮尖叫视频免费 | 性色欲情网站iwww九文堂 | 精品无人区无码乱码毛片国产 | 亚洲国产av精品一区二区蜜芽 | 国产午夜亚洲精品不卡下载 | 天堂在线观看www | 亚洲精品成人福利网站 | 久久亚洲国产成人精品性色 | 中文字幕乱妇无码av在线 | 久久综合给合久久狠狠狠97色 | 最新版天堂资源中文官网 | 欧美变态另类xxxx | 色综合久久久久综合一本到桃花网 | 色综合久久中文娱乐网 | 在线а√天堂中文官网 | 国产亚洲美女精品久久久2020 | 夜夜高潮次次欢爽av女 | 夜夜高潮次次欢爽av女 | 一本色道婷婷久久欧美 | 日产精品99久久久久久 | 最新国产乱人伦偷精品免费网站 | 荡女精品导航 | 亚洲日本va午夜在线电影 | 少女韩国电视剧在线观看完整 | 久久aⅴ免费观看 | 亚洲乱码国产乱码精品精 | 精品无码国产一区二区三区av | 国产乱子伦视频在线播放 | 婷婷五月综合激情中文字幕 | 青草青草久热国产精品 | 无码一区二区三区在线 | 强奷人妻日本中文字幕 | 奇米影视7777久久精品人人爽 | 亚洲人成网站色7799 | 白嫩日本少妇做爰 | 日韩精品一区二区av在线 | 欧美性猛交内射兽交老熟妇 | 中文字幕人妻丝袜二区 | 国产一区二区不卡老阿姨 | 无码精品人妻一区二区三区av | 亚洲va中文字幕无码久久不卡 | 亚洲精品国产品国语在线观看 | 丰满人妻被黑人猛烈进入 | 色五月丁香五月综合五月 | 未满小14洗澡无码视频网站 | 中文字幕av伊人av无码av | 沈阳熟女露脸对白视频 | 噜噜噜亚洲色成人网站 | 特黄特色大片免费播放器图片 | 老熟妇乱子伦牲交视频 | 日日夜夜撸啊撸 | 九一九色国产 | 成人女人看片免费视频放人 | 漂亮人妻洗澡被公强 日日躁 | 51国偷自产一区二区三区 | 天干天干啦夜天干天2017 | 野狼第一精品社区 | 久久久久久久人妻无码中文字幕爆 | 欧美一区二区三区 | 午夜福利一区二区三区在线观看 | 国产精品鲁鲁鲁 | 国产婷婷色一区二区三区在线 | 性欧美大战久久久久久久 | av香港经典三级级 在线 | 综合网日日天干夜夜久久 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产97人人超碰caoprom | 精品国产乱码久久久久乱码 | 大色综合色综合网站 | 高清无码午夜福利视频 | 无码国产乱人伦偷精品视频 | 撕开奶罩揉吮奶头视频 | 欧美人妻一区二区三区 | 大胆欧美熟妇xx | 男女下面进入的视频免费午夜 | 呦交小u女精品视频 | 亚洲国产精品无码一区二区三区 | 欧美日韩久久久精品a片 | 成人影院yy111111在线观看 | 亚洲第一网站男人都懂 | 久久99热只有频精品8 | 成人av无码一区二区三区 | 超碰97人人做人人爱少妇 | 国产精品办公室沙发 | 国产艳妇av在线观看果冻传媒 | 伊在人天堂亚洲香蕉精品区 | 精品成人av一区二区三区 | 亚洲中文无码av永久不收费 | 东京热无码av男人的天堂 | 色综合久久久久综合一本到桃花网 | 女人和拘做爰正片视频 | 丰满少妇高潮惨叫视频 | 久青草影院在线观看国产 | 少妇人妻大乳在线视频 | 成在人线av无码免费 | 青青青爽视频在线观看 | 国产精品沙发午睡系列 | 国产亚洲精品久久久久久久 | 一本一道久久综合久久 | 国产色视频一区二区三区 | 无码人妻av免费一区二区三区 | 黑森林福利视频导航 | 疯狂三人交性欧美 | 一本色道久久综合狠狠躁 | 欧美性生交xxxxx久久久 | 国产精品视频免费播放 | 婷婷丁香五月天综合东京热 | 人人妻人人澡人人爽人人精品 | 99视频精品全部免费免费观看 | 色欲综合久久中文字幕网 | 久久人人爽人人爽人人片av高清 | 久久99精品久久久久婷婷 | 中文字幕乱码中文乱码51精品 | 国精品人妻无码一区二区三区蜜柚 | 真人与拘做受免费视频一 | 成 人 网 站国产免费观看 | 一二三四在线观看免费视频 | 一本精品99久久精品77 | 久久精品一区二区三区四区 | 日韩在线不卡免费视频一区 | 亚洲精品成人福利网站 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲一区二区三区国产精华液 | 久久久久久av无码免费看大片 | 在教室伦流澡到高潮hnp视频 | 亚洲国产精品毛片av不卡在线 | 久久这里只有精品视频9 | √天堂中文官网8在线 | 极品尤物被啪到呻吟喷水 | 亚洲综合无码久久精品综合 | 丰满少妇高潮惨叫视频 | 日产精品高潮呻吟av久久 | 国产av人人夜夜澡人人爽麻豆 | 天堂久久天堂av色综合 | 亚洲呦女专区 | 久久久精品国产sm最大网站 | 午夜福利不卡在线视频 | 亚洲国产精品无码久久久久高潮 | 乌克兰少妇性做爰 | 欧美激情一区二区三区成人 | 国产农村乱对白刺激视频 | 对白脏话肉麻粗话av | 亚洲成av人片在线观看无码不卡 | 日本护士xxxxhd少妇 | 色综合久久久无码网中文 | 激情爆乳一区二区三区 | 欧美自拍另类欧美综合图片区 | 性做久久久久久久免费看 | 永久免费精品精品永久-夜色 | 蜜桃av抽搐高潮一区二区 | 国产精品自产拍在线观看 | 亚洲精品一区二区三区四区五区 | 午夜精品一区二区三区的区别 | 国产精品人人爽人人做我的可爱 | 狠狠色丁香久久婷婷综合五月 | 少妇无码av无码专区在线观看 | 亚洲人亚洲人成电影网站色 | 在线播放亚洲第一字幕 | 色婷婷综合中文久久一本 | 国产精品18久久久久久麻辣 | 国产深夜福利视频在线 | 亚洲精品中文字幕久久久久 | 日本熟妇人妻xxxxx人hd | 精品人妻中文字幕有码在线 | 天天av天天av天天透 | 色五月五月丁香亚洲综合网 | 亚洲s色大片在线观看 | 欧美激情一区二区三区成人 | 国产成人精品视频ⅴa片软件竹菊 | 51国偷自产一区二区三区 | 亚欧洲精品在线视频免费观看 | 婷婷丁香五月天综合东京热 | 亚洲自偷自拍另类第1页 | v一区无码内射国产 | 日日天日日夜日日摸 | 爽爽影院免费观看 | 亚洲日韩av一区二区三区中文 | 一区二区三区乱码在线 | 欧洲 | 国产农村妇女高潮大叫 | 国产超碰人人爽人人做人人添 | 99久久人妻精品免费一区 | 亚洲自偷精品视频自拍 | 日本精品人妻无码77777 天堂一区人妻无码 | 无码免费一区二区三区 | 久久久久国色av免费观看性色 | 成熟妇人a片免费看网站 | 免费无码肉片在线观看 | 亚洲第一无码av无码专区 | 在线观看国产午夜福利片 | 国产人妻精品一区二区三区不卡 | av无码电影一区二区三区 | 97夜夜澡人人爽人人喊中国片 | 少妇无码吹潮 | 夜精品a片一区二区三区无码白浆 | 久久午夜无码鲁丝片秋霞 | 亚洲精品久久久久中文第一幕 | 熟妇人妻无码xxx视频 | 欧美xxxx黑人又粗又长 | 欧美日韩久久久精品a片 | 中文字幕av伊人av无码av | 国产av人人夜夜澡人人爽麻豆 | 国产精品第一区揄拍无码 | 欧美精品在线观看 | 欧洲熟妇色 欧美 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲人成影院在线观看 | 国产午夜亚洲精品不卡 | 国产片av国语在线观看 | 理论片87福利理论电影 | 少妇无码一区二区二三区 | 精品成人av一区二区三区 | www国产亚洲精品久久网站 | 亚洲精品无码人妻无码 | 成人aaa片一区国产精品 | 中文字幕中文有码在线 | 男女下面进入的视频免费午夜 | 国产精品国产自线拍免费软件 | 亚洲精品综合五月久久小说 | 欧洲精品码一区二区三区免费看 | 99久久99久久免费精品蜜桃 | 国产激情综合五月久久 | 国产精品久久国产三级国 | 天天爽夜夜爽夜夜爽 | 国产精品对白交换视频 | 国产激情精品一区二区三区 | 国精产品一品二品国精品69xx | 亚洲第一无码av无码专区 | 给我免费的视频在线观看 | 国产精品国产自线拍免费软件 | 扒开双腿吃奶呻吟做受视频 | 欧美日韩久久久精品a片 | 动漫av一区二区在线观看 | 久久视频在线观看精品 | 日韩欧美成人免费观看 | 日韩精品乱码av一区二区 | 特级做a爰片毛片免费69 | 熟妇人妻激情偷爽文 | 老子影院午夜精品无码 | 人人妻人人澡人人爽人人精品浪潮 | 少妇被粗大的猛进出69影院 | 好爽又高潮了毛片免费下载 | 国产精品福利视频导航 | 欧美国产亚洲日韩在线二区 | 日日夜夜撸啊撸 | 中文字幕av伊人av无码av | 人人澡人摸人人添 | 少妇性l交大片欧洲热妇乱xxx | 国产suv精品一区二区五 | 国产高清不卡无码视频 | 成人欧美一区二区三区黑人免费 | 亚洲国产精品久久人人爱 | 精品乱子伦一区二区三区 | 亚洲中文字幕无码中字 | 欧美喷潮久久久xxxxx | 强辱丰满人妻hd中文字幕 | 国产亚洲精品精品国产亚洲综合 | 精品日本一区二区三区在线观看 | 国产激情精品一区二区三区 | 好爽又高潮了毛片免费下载 | 性史性农村dvd毛片 | 久久久中文字幕日本无吗 | 国产真实乱对白精彩久久 | 俺去俺来也在线www色官网 | 自拍偷自拍亚洲精品被多人伦好爽 | 狂野欧美性猛交免费视频 | 亚洲一区二区三区国产精华液 | 88国产精品欧美一区二区三区 | 国产午夜亚洲精品不卡下载 | 日本熟妇人妻xxxxx人hd | 天堂а√在线地址中文在线 | 性欧美疯狂xxxxbbbb | 亚洲成a人片在线观看日本 | 野狼第一精品社区 | 成年女人永久免费看片 | 国产精品18久久久久久麻辣 | 中文字幕人成乱码熟女app | 97资源共享在线视频 | 麻豆国产97在线 | 欧洲 | 天天拍夜夜添久久精品 | 午夜精品久久久久久久久 | 色婷婷av一区二区三区之红樱桃 | 51国偷自产一区二区三区 | 国产亚av手机在线观看 | 无码人妻丰满熟妇区毛片18 | 狂野欧美激情性xxxx | 国产精品久久久久久久9999 | 初尝人妻少妇中文字幕 | 老熟妇仑乱视频一区二区 | 国产精品嫩草久久久久 | 日本在线高清不卡免费播放 | 日本肉体xxxx裸交 | 中文字幕+乱码+中文字幕一区 | 又黄又爽又色的视频 | 国模大胆一区二区三区 | 野狼第一精品社区 | 亚洲成av人片天堂网无码】 | 成人亚洲精品久久久久软件 | 377p欧洲日本亚洲大胆 | 色五月五月丁香亚洲综合网 | 伊人久久大香线蕉午夜 | 欧美三级不卡在线观看 | 无码吃奶揉捏奶头高潮视频 | 免费无码肉片在线观看 | 国产精品久久久久久亚洲毛片 | 成人精品天堂一区二区三区 | 中文无码成人免费视频在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 免费看男女做好爽好硬视频 | 国产成人精品视频ⅴa片软件竹菊 | 一本精品99久久精品77 | 欧美日韩在线亚洲综合国产人 | 在线亚洲高清揄拍自拍一品区 | 国产成人亚洲综合无码 | 真人与拘做受免费视频一 | 精品亚洲韩国一区二区三区 | 久久精品女人天堂av免费观看 | 97se亚洲精品一区 | 久久综合九色综合欧美狠狠 | 天下第一社区视频www日本 | 丰满少妇女裸体bbw | 成人无码影片精品久久久 | 精品 日韩 国产 欧美 视频 | 7777奇米四色成人眼影 | 一区二区三区乱码在线 | 欧洲 | 性开放的女人aaa片 | а√资源新版在线天堂 | 国产人妻人伦精品1国产丝袜 | 亚洲熟女一区二区三区 | 国产内射老熟女aaaa | 国产精品a成v人在线播放 | 国产欧美熟妇另类久久久 | 国产精品免费大片 | 精品成人av一区二区三区 | 我要看www免费看插插视频 | 国产午夜无码视频在线观看 | 亚洲啪av永久无码精品放毛片 | 日日天干夜夜狠狠爱 | 鲁一鲁av2019在线 | 97夜夜澡人人双人人人喊 | 国内老熟妇对白xxxxhd | 国产成人精品三级麻豆 | 51国偷自产一区二区三区 | 国产无av码在线观看 | 午夜成人1000部免费视频 | 少妇厨房愉情理9仑片视频 | 色一情一乱一伦一视频免费看 | 内射后入在线观看一区 | 欧洲美熟女乱又伦 | 久久综合狠狠综合久久综合88 | 欧美乱妇无乱码大黄a片 | 亚洲国产精品久久久天堂 | 日本乱人伦片中文三区 | 野外少妇愉情中文字幕 | 亚洲中文字幕va福利 | 精品无码国产自产拍在线观看蜜 | 亚洲小说图区综合在线 | 国产suv精品一区二区五 | 男人的天堂av网站 | 欧美亚洲国产一区二区三区 | 暴力强奷在线播放无码 | 亚洲无人区午夜福利码高清完整版 | 天天拍夜夜添久久精品大 | 久久精品人人做人人综合试看 | 女人被爽到呻吟gif动态图视看 | 亚洲一区二区三区在线观看网站 | 少妇性荡欲午夜性开放视频剧场 | 国产无套内射久久久国产 | 人妻互换免费中文字幕 | 欧美成人免费全部网站 | √8天堂资源地址中文在线 | 亚洲天堂2017无码中文 | 色一情一乱一伦一区二区三欧美 | 国产成人一区二区三区在线观看 | 国产精品igao视频网 | 亚洲一区二区三区播放 | 亚洲色大成网站www | 欧美人与动性行为视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 色老头在线一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 亚洲人成影院在线无码按摩店 | 亚洲日本在线电影 | 5858s亚洲色大成网站www | 精品国产成人一区二区三区 | 国产综合在线观看 | 亚洲爆乳精品无码一区二区三区 | 久久人妻内射无码一区三区 | 成人综合网亚洲伊人 | 性色欲网站人妻丰满中文久久不卡 | 国产亚洲美女精品久久久2020 | 亚洲天堂2017无码 | 久久久久免费看成人影片 | 无码福利日韩神码福利片 | 麻豆果冻传媒2021精品传媒一区下载 | 国产精品国产三级国产专播 | 久久99精品国产麻豆蜜芽 | 国产精品99爱免费视频 | 亚洲日本va午夜在线电影 | 日本www一道久久久免费榴莲 | √8天堂资源地址中文在线 | 国产后入清纯学生妹 | 午夜无码人妻av大片色欲 | 岛国片人妻三上悠亚 | 国产做国产爱免费视频 | 久久久久成人片免费观看蜜芽 | 人人妻人人澡人人爽欧美一区 | 欧美精品国产综合久久 | 永久黄网站色视频免费直播 | 久久99热只有频精品8 | 老熟妇乱子伦牲交视频 | 日本精品人妻无码77777 天堂一区人妻无码 | 欧美国产亚洲日韩在线二区 | 成人无码精品1区2区3区免费看 | 国产激情精品一区二区三区 | 天堂亚洲2017在线观看 | 精品国产一区二区三区四区在线看 | 亚洲另类伦春色综合小说 | 国产色xx群视频射精 | 男女下面进入的视频免费午夜 | 国产综合久久久久鬼色 | 精品国产精品久久一区免费式 | 色老头在线一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 亚洲午夜久久久影院 | 成人av无码一区二区三区 | 国产av无码专区亚洲a∨毛片 | 亚洲s色大片在线观看 | 亚洲色在线无码国产精品不卡 | 一区二区三区乱码在线 | 欧洲 | 一本久久伊人热热精品中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 九九在线中文字幕无码 | 999久久久国产精品消防器材 | 久久亚洲精品成人无码 | 免费看少妇作爱视频 | 日本免费一区二区三区最新 | 色综合天天综合狠狠爱 | 女高中生第一次破苞av | 天天摸天天透天天添 | 超碰97人人做人人爱少妇 | 婷婷六月久久综合丁香 | 国产婷婷色一区二区三区在线 | 国产熟女一区二区三区四区五区 | 国产精品久久久久久无码 | 色一情一乱一伦一视频免费看 | 亚洲综合无码久久精品综合 | 日韩在线不卡免费视频一区 | 天天摸天天碰天天添 | 永久免费观看美女裸体的网站 | 久久久av男人的天堂 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲a无码综合a国产av中文 | 俄罗斯老熟妇色xxxx | 又大又硬又爽免费视频 | 色婷婷综合激情综在线播放 | 青青青爽视频在线观看 | 色五月丁香五月综合五月 | 亚洲欧洲日本综合aⅴ在线 | 国产精品高潮呻吟av久久4虎 | 日本va欧美va欧美va精品 | 色综合久久网 | 欧美阿v高清资源不卡在线播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 黑人大群体交免费视频 | 婷婷五月综合激情中文字幕 | 亚洲精品一区二区三区婷婷月 | 国产精品美女久久久 | 少妇人妻大乳在线视频 | 在线视频网站www色 | 中文字幕亚洲情99在线 | 麻花豆传媒剧国产免费mv在线 | 最新版天堂资源中文官网 | 久久久久99精品国产片 | 88国产精品欧美一区二区三区 | 日韩av无码一区二区三区 | 四虎国产精品免费久久 | 成人无码精品1区2区3区免费看 | 东京热一精品无码av | 亚洲熟妇色xxxxx欧美老妇 | 超碰97人人做人人爱少妇 | 日韩欧美中文字幕公布 | 国产精品美女久久久网av | 国产明星裸体无码xxxx视频 | 国产在线一区二区三区四区五区 | 国产精品欧美成人 | 亚洲精品一区二区三区四区五区 | 国精品人妻无码一区二区三区蜜柚 | 国产乱人伦偷精品视频 | 国产又粗又硬又大爽黄老大爷视 | 国产乱子伦视频在线播放 | 福利一区二区三区视频在线观看 | 午夜无码区在线观看 | 无码国内精品人妻少妇 | 狠狠色噜噜狠狠狠7777奇米 | 成人片黄网站色大片免费观看 | 国产办公室秘书无码精品99 | 福利一区二区三区视频在线观看 | 亚洲国产精品一区二区第一页 | 丰满人妻一区二区三区免费视频 | 精品久久8x国产免费观看 | 粉嫩少妇内射浓精videos | 国产精品久久久久久久影院 | 九九在线中文字幕无码 | 亚洲大尺度无码无码专区 | 人妻少妇精品视频专区 | av无码不卡在线观看免费 | 亚洲午夜福利在线观看 | 麻豆精产国品 | 免费看少妇作爱视频 | 亚洲一区二区三区国产精华液 | 国产色精品久久人妻 | 午夜精品久久久久久久久 | a国产一区二区免费入口 | 性欧美熟妇videofreesex | 在教室伦流澡到高潮hnp视频 | 狠狠色欧美亚洲狠狠色www | 全球成人中文在线 | 激情内射亚州一区二区三区爱妻 | 亚洲色欲色欲天天天www | 国产xxx69麻豆国语对白 | 2019nv天堂香蕉在线观看 | 丰满少妇女裸体bbw | 亚洲男人av香蕉爽爽爽爽 | 国产高清av在线播放 | 青春草在线视频免费观看 | 精品亚洲成av人在线观看 | 亚洲精品一区二区三区婷婷月 | 综合激情五月综合激情五月激情1 | 色综合久久久无码网中文 | 成人精品一区二区三区中文字幕 | 国产精品va在线观看无码 | 久久久无码中文字幕久... | 午夜福利一区二区三区在线观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产激情精品一区二区三区 | 欧美肥老太牲交大战 | 国产99久久精品一区二区 | 国产香蕉97碰碰久久人人 | 欧美真人作爱免费视频 | 日韩欧美群交p片內射中文 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 精品日本一区二区三区在线观看 | 久久综合久久自在自线精品自 | 免费乱码人妻系列无码专区 | 老熟女乱子伦 | 久久久久亚洲精品男人的天堂 | 野外少妇愉情中文字幕 | 男女作爱免费网站 | 天堂亚洲2017在线观看 | 无码人妻精品一区二区三区不卡 | 无码人妻黑人中文字幕 | 亚洲熟妇色xxxxx欧美老妇y | 中文无码伦av中文字幕 | 亚洲一区二区观看播放 | 国内精品久久毛片一区二区 | 无码中文字幕色专区 | 国产一区二区三区影院 | 麻豆国产人妻欲求不满 | 免费无码的av片在线观看 | 两性色午夜视频免费播放 | 成人亚洲精品久久久久软件 | 最近免费中文字幕中文高清百度 | 国产婷婷色一区二区三区在线 | 中文毛片无遮挡高清免费 | 日本高清一区免费中文视频 | 中文字幕无线码免费人妻 | 亚洲综合无码久久精品综合 | 最近中文2019字幕第二页 | 久久99精品国产麻豆蜜芽 | 国产97色在线 | 免 | 久久久久av无码免费网 | 一本大道久久东京热无码av | 少妇人妻大乳在线视频 | 无码国模国产在线观看 | 精品久久久无码人妻字幂 | 亚洲 激情 小说 另类 欧美 | 亚洲人成人无码网www国产 | 中文字幕无码免费久久99 | 国产精品第一区揄拍无码 | 中文字幕乱码中文乱码51精品 | 日韩少妇内射免费播放 | 久久久中文字幕日本无吗 | 亚洲精品久久久久avwww潮水 | 国产亚洲精品久久久ai换 | 国内揄拍国内精品少妇国语 | 东京热男人av天堂 | 国产精品高潮呻吟av久久 | 图片区 小说区 区 亚洲五月 | 又黄又爽又色的视频 | 中文字幕中文有码在线 | 牲欲强的熟妇农村老妇女视频 | 无码一区二区三区在线 | 国产激情综合五月久久 | 国产精品第一国产精品 | 亚洲精品久久久久久一区二区 | 亚洲精品久久久久avwww潮水 | 亚洲精品一区二区三区四区五区 | 波多野结衣高清一区二区三区 | 99久久久国产精品无码免费 | 乱人伦人妻中文字幕无码 | 久久久久久久女国产乱让韩 | 国产亚av手机在线观看 | 午夜福利试看120秒体验区 | v一区无码内射国产 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产在线精品一区二区三区直播 | 黄网在线观看免费网站 | 正在播放东北夫妻内射 | 国产综合色产在线精品 | 日韩av激情在线观看 | 四虎4hu永久免费 | 国语精品一区二区三区 | 成人av无码一区二区三区 | 久久亚洲日韩精品一区二区三区 | 成熟女人特级毛片www免费 | 好男人社区资源 | 99久久精品日本一区二区免费 | 狂野欧美激情性xxxx | 四十如虎的丰满熟妇啪啪 | 国产精品18久久久久久麻辣 | 无码午夜成人1000部免费视频 | 无码中文字幕色专区 | 少妇无套内谢久久久久 | 在线观看欧美一区二区三区 | 久久综合给合久久狠狠狠97色 | 欧美国产亚洲日韩在线二区 | 国产午夜亚洲精品不卡 | 欧美日韩亚洲国产精品 | 日韩av激情在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产性生大片免费观看性 | 成人片黄网站色大片免费观看 | 久久国语露脸国产精品电影 | 美女极度色诱视频国产 | 欧美国产日韩久久mv | 亚洲熟女一区二区三区 | 三级4级全黄60分钟 | 精品人妻人人做人人爽夜夜爽 | 少妇性荡欲午夜性开放视频剧场 | 欧美人与物videos另类 | 国产精品对白交换视频 | a片免费视频在线观看 | 成 人 免费观看网站 | 精品人妻av区 | 国产精品久久久久影院嫩草 | 波多野42部无码喷潮在线 | 国产精品高潮呻吟av久久4虎 | 奇米影视888欧美在线观看 | 国产激情无码一区二区 | 美女扒开屁股让男人桶 | 天下第一社区视频www日本 | 国精产品一品二品国精品69xx | 成人免费无码大片a毛片 | 亚洲狠狠婷婷综合久久 | 无码人妻av免费一区二区三区 | 欧美 丝袜 自拍 制服 另类 | 日韩精品无码一本二本三本色 | 国产精品美女久久久 | 日产精品99久久久久久 | 国产麻豆精品精东影业av网站 | aⅴ亚洲 日韩 色 图网站 播放 | 麻豆国产丝袜白领秘书在线观看 | 蜜桃无码一区二区三区 | 波多野结衣av一区二区全免费观看 | 中文字幕无线码 | 国产精品久久久久久久9999 | 国产性生交xxxxx无码 | 久久久久se色偷偷亚洲精品av | 蜜臀av无码人妻精品 | 久久综合久久自在自线精品自 | 国产成人一区二区三区别 | 18黄暴禁片在线观看 | 四十如虎的丰满熟妇啪啪 | 免费中文字幕日韩欧美 | 一本大道伊人av久久综合 | 国产激情精品一区二区三区 | √天堂中文官网8在线 | 成在人线av无码免费 | 久久97精品久久久久久久不卡 | 国产69精品久久久久app下载 | 300部国产真实乱 | 人妻中文无码久热丝袜 | 久久亚洲中文字幕精品一区 | 日本乱人伦片中文三区 | 亚洲日韩精品欧美一区二区 | 狠狠亚洲超碰狼人久久 | 一区二区传媒有限公司 | 激情亚洲一区国产精品 | 帮老师解开蕾丝奶罩吸乳网站 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 午夜福利不卡在线视频 | 久久久久se色偷偷亚洲精品av | 最新国产麻豆aⅴ精品无码 | av人摸人人人澡人人超碰下载 | 亚洲中文字幕成人无码 | 少妇厨房愉情理9仑片视频 | 无码纯肉视频在线观看 | 亚洲男人av香蕉爽爽爽爽 | 熟妇人妻无乱码中文字幕 | 一本色道久久综合狠狠躁 | 欧美xxxxx精品 | 久久久亚洲欧洲日产国码αv | 丰满少妇人妻久久久久久 | 久久精品中文字幕一区 | 免费无码一区二区三区蜜桃大 | 夜夜高潮次次欢爽av女 | 亚洲综合伊人久久大杳蕉 | 无码人中文字幕 | 天天av天天av天天透 | 中文精品无码中文字幕无码专区 | 图片区 小说区 区 亚洲五月 | 中文无码成人免费视频在线观看 | 伦伦影院午夜理论片 | 精品欧洲av无码一区二区三区 | 日本一卡二卡不卡视频查询 | 亚洲精品国产品国语在线观看 | 久久久精品456亚洲影院 | 亚洲国产欧美日韩精品一区二区三区 | 国产性生大片免费观看性 | 亚洲码国产精品高潮在线 | 亚洲の无码国产の无码影院 | 欧美日本免费一区二区三区 | 好爽又高潮了毛片免费下载 | 久久久成人毛片无码 | 久久亚洲精品成人无码 | 亚洲欧美中文字幕5发布 | 日本一卡2卡3卡四卡精品网站 | 中文字幕乱码人妻二区三区 | 亚洲成a人片在线观看日本 | 久久久国产一区二区三区 | 精品乱子伦一区二区三区 | 精品aⅴ一区二区三区 | 任你躁国产自任一区二区三区 | 国产乱人无码伦av在线a | 亚洲日本一区二区三区在线 | 午夜精品久久久久久久 | 无码午夜成人1000部免费视频 | 国产精品鲁鲁鲁 | 国精产品一品二品国精品69xx | 亚洲精品成a人在线观看 | 久久国产精品二国产精品 | 99麻豆久久久国产精品免费 | 天天爽夜夜爽夜夜爽 | 狠狠cao日日穞夜夜穞av | 成人片黄网站色大片免费观看 | 伊在人天堂亚洲香蕉精品区 | 亚洲国产精品无码一区二区三区 | 鲁大师影院在线观看 | 久久久久免费看成人影片 | 色综合久久久无码中文字幕 | 亚洲中文字幕久久无码 | 人妻与老人中文字幕 | 妺妺窝人体色www在线小说 | 精品无码一区二区三区的天堂 | 少妇邻居内射在线 | 国产激情一区二区三区 | 麻豆人妻少妇精品无码专区 | 夫妻免费无码v看片 | 十八禁视频网站在线观看 | 国产精品沙发午睡系列 | 国产av无码专区亚洲a∨毛片 | 亚洲国产日韩a在线播放 | 国产色在线 | 国产 | 男女下面进入的视频免费午夜 | 国产av剧情md精品麻豆 | 国产国产精品人在线视 | 在线欧美精品一区二区三区 | 成人亚洲精品久久久久 | 国产真实伦对白全集 | 欧洲熟妇精品视频 | 亚洲爆乳精品无码一区二区三区 | 青青青手机频在线观看 | 人妻少妇精品久久 | 欧美日韩人成综合在线播放 | 夜夜影院未满十八勿进 | 日韩在线不卡免费视频一区 | 国产片av国语在线观看 | 精品人人妻人人澡人人爽人人 | 国产成人综合色在线观看网站 | 亚洲精品综合一区二区三区在线 | 丰满人妻被黑人猛烈进入 | 鲁鲁鲁爽爽爽在线视频观看 | 国产av无码专区亚洲a∨毛片 | 巨爆乳无码视频在线观看 | 大肉大捧一进一出好爽视频 | 日本免费一区二区三区最新 | 国产 精品 自在自线 | 人妻少妇被猛烈进入中文字幕 | 午夜福利电影 | 久久久亚洲欧洲日产国码αv | 国产午夜无码精品免费看 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲理论电影在线观看 | 三上悠亚人妻中文字幕在线 | 天堂久久天堂av色综合 | 免费无码一区二区三区蜜桃大 | 四虎国产精品一区二区 | 67194成是人免费无码 | 97久久国产亚洲精品超碰热 | 蜜臀aⅴ国产精品久久久国产老师 | 日本一区二区三区免费播放 | 日韩精品无码一本二本三本色 | 中文字幕色婷婷在线视频 | 色综合天天综合狠狠爱 | 少妇人妻av毛片在线看 | 粉嫩少妇内射浓精videos | 亚洲色无码一区二区三区 | 在线播放无码字幕亚洲 | 国产成人精品优优av | 色综合天天综合狠狠爱 | 国产精品18久久久久久麻辣 | 国产乱人无码伦av在线a | 天堂在线观看www | 扒开双腿吃奶呻吟做受视频 | 国产亚av手机在线观看 | 中文字幕无码av波多野吉衣 | 十八禁视频网站在线观看 | 又色又爽又黄的美女裸体网站 | 国产成人av免费观看 | 99精品国产综合久久久久五月天 | 99麻豆久久久国产精品免费 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产乱人伦偷精品视频 | 暴力强奷在线播放无码 | 丁香啪啪综合成人亚洲 | 又大又硬又爽免费视频 | 波多野结衣aⅴ在线 | 国产三级久久久精品麻豆三级 | 亚洲精品一区二区三区四区五区 | 国产成人综合在线女婷五月99播放 | 亚洲综合无码久久精品综合 | 精品乱码久久久久久久 | 丰满少妇弄高潮了www | 一区二区三区乱码在线 | 欧洲 | 性生交大片免费看女人按摩摩 | 好爽又高潮了毛片免费下载 | 天堂а√在线地址中文在线 | 美女扒开屁股让男人桶 | 蜜桃无码一区二区三区 | 午夜肉伦伦影院 | 成人一区二区免费视频 | 国产真实夫妇视频 | 一本精品99久久精品77 | 成在人线av无码免费 | 男女下面进入的视频免费午夜 | 色噜噜亚洲男人的天堂 | 国内少妇偷人精品视频 | 又大又硬又黄的免费视频 | 国产亚洲美女精品久久久2020 | 色欲人妻aaaaaaa无码 | 精品熟女少妇av免费观看 | 超碰97人人做人人爱少妇 | 亚拍精品一区二区三区探花 | 日韩精品a片一区二区三区妖精 | 午夜精品久久久久久久 | 无遮无挡爽爽免费视频 | 国产精品人人妻人人爽 | 久久人人爽人人爽人人片av高清 | 亚洲国产一区二区三区在线观看 | 国产精品久久久 | 久久zyz资源站无码中文动漫 | 大肉大捧一进一出视频出来呀 | 最近免费中文字幕中文高清百度 | 成人精品一区二区三区中文字幕 | 国产精品久久久久久亚洲影视内衣 | 国产精品视频免费播放 | 国产精品欧美成人 | 亚洲欧洲日本综合aⅴ在线 | 久久久久成人片免费观看蜜芽 | 国产精品人人妻人人爽 | 久久亚洲中文字幕精品一区 | 色窝窝无码一区二区三区色欲 | yw尤物av无码国产在线观看 | 国产乱子伦视频在线播放 | 国产精品久久国产三级国 | 欧美刺激性大交 | 女人被男人躁得好爽免费视频 | 亚洲成a人片在线观看无码 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美 日韩 人妻 高清 中文 | 亚洲色欲色欲天天天www | 亚洲人成人无码网www国产 | 国产超级va在线观看视频 | 香蕉久久久久久av成人 | 国产无套粉嫩白浆在线 | 欧美阿v高清资源不卡在线播放 | 国产人妖乱国产精品人妖 | 国产精品毛多多水多 | 疯狂三人交性欧美 | 伊人久久大香线蕉午夜 | 男女猛烈xx00免费视频试看 | 午夜精品一区二区三区的区别 | 国产另类ts人妖一区二区 | 久久精品国产精品国产精品污 | 亚洲综合伊人久久大杳蕉 | 欧美老妇与禽交 | 亚洲成av人综合在线观看 | 中文字幕 亚洲精品 第1页 | 人妻无码久久精品人妻 | 日韩人妻系列无码专区 | 青青青爽视频在线观看 | 国产成人亚洲综合无码 | 国内精品人妻无码久久久影院 | 亚洲中文字幕无码中字 | 好屌草这里只有精品 | 日本va欧美va欧美va精品 | 国产综合久久久久鬼色 | 99久久99久久免费精品蜜桃 | 99久久久无码国产精品免费 | 亚洲 日韩 欧美 成人 在线观看 | 精品 日韩 国产 欧美 视频 | 51国偷自产一区二区三区 | 中文字幕 人妻熟女 | 大肉大捧一进一出视频出来呀 | 天天拍夜夜添久久精品大 | 亚洲色欲色欲欲www在线 | 偷窥村妇洗澡毛毛多 | 国产乱人伦偷精品视频 | 美女扒开屁股让男人桶 | 亚洲熟妇色xxxxx欧美老妇y | 2020久久香蕉国产线看观看 | 国产精品视频免费播放 | 国产精品亚洲а∨无码播放麻豆 | 熟女少妇人妻中文字幕 | 中文字幕日产无线码一区 | 又紧又大又爽精品一区二区 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲熟妇色xxxxx欧美老妇y | 国产国语老龄妇女a片 | 国产人妻精品午夜福利免费 | 婷婷五月综合缴情在线视频 | 国产精品亚洲lv粉色 | 精品久久久久久人妻无码中文字幕 | 久久亚洲精品成人无码 | av无码不卡在线观看免费 | 色五月五月丁香亚洲综合网 | 久久综合给合久久狠狠狠97色 | 国产成人精品三级麻豆 | 国产综合在线观看 | 国产婷婷色一区二区三区在线 | 国产又爽又黄又刺激的视频 | 青春草在线视频免费观看 | 国产欧美熟妇另类久久久 | 日本又色又爽又黄的a片18禁 | 激情内射亚州一区二区三区爱妻 | 欧美日韩一区二区免费视频 | 国产乱人偷精品人妻a片 | 伊人久久大香线蕉午夜 | 免费中文字幕日韩欧美 | 亚洲va欧美va天堂v国产综合 | 亚洲熟妇色xxxxx欧美老妇y | 国产亚洲美女精品久久久2020 | 又湿又紧又大又爽a视频国产 | 中文久久乱码一区二区 | 中文字幕av无码一区二区三区电影 | 97夜夜澡人人双人人人喊 | 欧美人与牲动交xxxx | 中文字幕av无码一区二区三区电影 | 国产69精品久久久久app下载 | 精品一区二区三区无码免费视频 | 一个人免费观看的www视频 | 76少妇精品导航 | 色综合久久88色综合天天 | 日本乱偷人妻中文字幕 | 久久 国产 尿 小便 嘘嘘 | 国产精品手机免费 | 亚洲欧洲日本综合aⅴ在线 | 亚洲成a人片在线观看无码3d | 午夜不卡av免费 一本久久a久久精品vr综合 | 中文字幕无码热在线视频 | 人人妻人人澡人人爽人人精品 | 国产9 9在线 | 中文 | 国产精品.xx视频.xxtv | 麻豆精产国品 | 蜜桃视频韩日免费播放 | 精品久久久久久亚洲精品 | 国产suv精品一区二区五 | 99久久精品国产一区二区蜜芽 | 久久午夜夜伦鲁鲁片无码免费 | 日韩在线不卡免费视频一区 | 精品偷自拍另类在线观看 | 亚洲一区二区三区在线观看网站 | 97精品国产97久久久久久免费 | 人妻无码久久精品人妻 | 东京热一精品无码av | 国产乱子伦视频在线播放 | 国产特级毛片aaaaaaa高清 | 国产精品高潮呻吟av久久4虎 | 亚洲七七久久桃花影院 | 少妇高潮喷潮久久久影院 | 亚洲娇小与黑人巨大交 | 一本久道高清无码视频 | 中文字幕av伊人av无码av | 国产乱人伦偷精品视频 | 少妇无码av无码专区在线观看 | 久久无码中文字幕免费影院蜜桃 | 久久精品中文字幕一区 | 99精品视频在线观看免费 | 日本在线高清不卡免费播放 | 午夜理论片yy44880影院 | 理论片87福利理论电影 | 国产成人无码av在线影院 | 国产艳妇av在线观看果冻传媒 | 成人无码视频免费播放 | 超碰97人人做人人爱少妇 | 乱中年女人伦av三区 | 男人扒开女人内裤强吻桶进去 | 国产无遮挡又黄又爽又色 | 人妻中文无码久热丝袜 | 亚洲欧美综合区丁香五月小说 | 久久久精品国产sm最大网站 | 人妻aⅴ无码一区二区三区 | 久久精品国产99久久6动漫 | 久久99国产综合精品 | 日韩欧美中文字幕在线三区 | 中国大陆精品视频xxxx | 精品人妻人人做人人爽 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产精品对白交换视频 | 亚洲综合久久一区二区 | 国产九九九九九九九a片 | 捆绑白丝粉色jk震动捧喷白浆 | 精品国产一区二区三区av 性色 | 亚洲一区二区三区国产精华液 | 免费视频欧美无人区码 | 丰满人妻翻云覆雨呻吟视频 | 久久国产精品萌白酱免费 | 无遮挡国产高潮视频免费观看 | 麻豆精品国产精华精华液好用吗 | 亚洲精品综合五月久久小说 | 久久精品国产99久久6动漫 | 妺妺窝人体色www婷婷 | 18无码粉嫩小泬无套在线观看 | 国产在线一区二区三区四区五区 | 亚洲 激情 小说 另类 欧美 | 人人妻人人澡人人爽欧美一区九九 | 免费无码的av片在线观看 | 午夜精品久久久内射近拍高清 | 桃花色综合影院 | 亚洲欧美中文字幕5发布 | 强奷人妻日本中文字幕 | 日本饥渴人妻欲求不满 | 精品久久久久香蕉网 | 亚洲伊人久久精品影院 | 玩弄人妻少妇500系列视频 | 强辱丰满人妻hd中文字幕 | 亚洲欧洲无卡二区视頻 | 午夜福利一区二区三区在线观看 | 麻豆国产人妻欲求不满 | 一本久久伊人热热精品中文字幕 | 亚洲熟熟妇xxxx | 人妻少妇被猛烈进入中文字幕 | 亚洲国产av美女网站 | √8天堂资源地址中文在线 | 波多野结衣高清一区二区三区 | 亚洲精品中文字幕 | 国产在线aaa片一区二区99 | 国产精华av午夜在线观看 | 亚洲七七久久桃花影院 | 国产又爽又黄又刺激的视频 | 人妻夜夜爽天天爽三区 | 无码帝国www无码专区色综合 | 1000部夫妻午夜免费 | 亚洲а∨天堂久久精品2021 | 日韩精品无码免费一区二区三区 | 在线a亚洲视频播放在线观看 | 久久国产劲爆∧v内射 | 亚洲日韩一区二区三区 | 亚洲国精产品一二二线 | 中文字幕 人妻熟女 | 无遮无挡爽爽免费视频 | 天天躁夜夜躁狠狠是什么心态 | 野外少妇愉情中文字幕 | 成人精品视频一区二区三区尤物 | 嫩b人妻精品一区二区三区 | 日韩人妻无码中文字幕视频 | 久久久久成人精品免费播放动漫 | 国产成人精品久久亚洲高清不卡 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲爆乳精品无码一区二区三区 | 又黄又爽又色的视频 | 国产99久久精品一区二区 | 亚洲日本va中文字幕 | 高中生自慰www网站 | 久久国产精品精品国产色婷婷 | 久久久久成人片免费观看蜜芽 | 免费国产成人高清在线观看网站 | 久久久久久av无码免费看大片 | 欧美人与动性行为视频 | 动漫av网站免费观看 | 欧美自拍另类欧美综合图片区 | 成 人 网 站国产免费观看 | 亚洲成熟女人毛毛耸耸多 | 天堂无码人妻精品一区二区三区 | 中国大陆精品视频xxxx | 亚洲成av人在线观看网址 | 精品久久综合1区2区3区激情 | 国产激情无码一区二区 | 中文字幕av无码一区二区三区电影 | 国产亚洲精品久久久久久大师 | 亚洲熟妇自偷自拍另类 | 天天综合网天天综合色 | 欧美 日韩 人妻 高清 中文 | 东京热无码av男人的天堂 | 日韩av无码中文无码电影 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲国产精华液网站w | 一本无码人妻在中文字幕免费 | 亚洲精品中文字幕乱码 | 国产精品永久免费视频 | 欧美变态另类xxxx | 久久精品人妻少妇一区二区三区 | 亚洲一区二区三区 | 国产免费久久精品国产传媒 | 国产成人无码专区 | 精品国产青草久久久久福利 | 亚洲区欧美区综合区自拍区 | 天天躁日日躁狠狠躁免费麻豆 | 少妇久久久久久人妻无码 | 亚洲精品无码人妻无码 | 日韩成人一区二区三区在线观看 | 久久久久久久女国产乱让韩 | 在线观看免费人成视频 | 欧美阿v高清资源不卡在线播放 | 好爽又高潮了毛片免费下载 | 波多野结衣av一区二区全免费观看 | 女人高潮内射99精品 | 麻豆蜜桃av蜜臀av色欲av | 最新国产乱人伦偷精品免费网站 | 任你躁国产自任一区二区三区 | 无码午夜成人1000部免费视频 | 99精品无人区乱码1区2区3区 | 久久综合狠狠综合久久综合88 | 人人爽人人澡人人人妻 | 牲交欧美兽交欧美 | 蜜臀av无码人妻精品 | 国产精品内射视频免费 | 国产亚洲tv在线观看 | 无码国产乱人伦偷精品视频 | 久久精品中文字幕一区 | 国产国语老龄妇女a片 | 蜜桃视频韩日免费播放 | 夜夜躁日日躁狠狠久久av | 精品少妇爆乳无码av无码专区 | 中文字幕无码免费久久99 | 美女黄网站人色视频免费国产 | 久久人人爽人人爽人人片ⅴ | 色综合久久88色综合天天 | 秋霞特色aa大片 | 无遮无挡爽爽免费视频 | 最新国产麻豆aⅴ精品无码 | 国产网红无码精品视频 | 夫妻免费无码v看片 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品亚洲а∨无码播放麻豆 | 麻豆国产人妻欲求不满谁演的 | 无码av免费一区二区三区试看 | 伊人久久大香线蕉亚洲 | 人妻尝试又大又粗久久 | 一个人看的视频www在线 | 亚洲熟妇自偷自拍另类 | 婷婷丁香六月激情综合啪 | 国产亚洲精品久久久ai换 | 中文字幕 亚洲精品 第1页 | 亚洲熟妇色xxxxx欧美老妇 | 中文字幕人成乱码熟女app | 欧美肥老太牲交大战 | 麻豆av传媒蜜桃天美传媒 | 亚洲精品久久久久久一区二区 | 亚洲日本va午夜在线电影 | 国产无套内射久久久国产 | 国产手机在线αⅴ片无码观看 | 1000部啪啪未满十八勿入下载 | 亚洲男女内射在线播放 | 欧美三级a做爰在线观看 | 麻豆md0077饥渴少妇 | 欧美人与物videos另类 | 88国产精品欧美一区二区三区 | 又大又硬又黄的免费视频 | 久久aⅴ免费观看 | 色狠狠av一区二区三区 | 宝宝好涨水快流出来免费视频 | 国产69精品久久久久app下载 | 乌克兰少妇性做爰 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 少妇一晚三次一区二区三区 | 亚洲狠狠色丁香婷婷综合 | 成熟人妻av无码专区 | 久久精品国产日本波多野结衣 | 国产成人综合美国十次 | 成熟妇人a片免费看网站 | 国产亚洲美女精品久久久2020 | 国产成人综合在线女婷五月99播放 | 亚洲爆乳精品无码一区二区三区 | 小sao货水好多真紧h无码视频 | 精品一区二区三区无码免费视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 在线播放无码字幕亚洲 | ass日本丰满熟妇pics | 又紧又大又爽精品一区二区 | 99精品无人区乱码1区2区3区 | 久久久久成人片免费观看蜜芽 | 动漫av一区二区在线观看 | 蜜桃臀无码内射一区二区三区 | 欧美35页视频在线观看 | 国产av一区二区三区最新精品 | 55夜色66夜色国产精品视频 | 日本一区二区更新不卡 | 国产精品久久久久久久影院 | 久久久久久亚洲精品a片成人 | 国产人妻精品一区二区三区不卡 | 国产色xx群视频射精 | 亚洲 日韩 欧美 成人 在线观看 | 欧美性猛交xxxx富婆 | 两性色午夜视频免费播放 | 欧美人与善在线com | 曰韩少妇内射免费播放 | 亚洲精品中文字幕 | 人妻中文无码久热丝袜 | 狠狠色欧美亚洲狠狠色www | 乱人伦人妻中文字幕无码 | 欧美一区二区三区视频在线观看 | 国产国产精品人在线视 | 午夜肉伦伦影院 | 欧美日韩精品 | 国产欧美精品一区二区三区 | 亚洲欧洲日本综合aⅴ在线 | 国产人成高清在线视频99最全资源 | 国产综合在线观看 | 国产精品亚洲专区无码不卡 | 亚洲人交乣女bbw | 日本在线高清不卡免费播放 |