亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開發(fā) > Java > 正文

Spring中的事務(wù)操作、注解及XML配置詳解

2024-07-14 08:43:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

事務(wù)

事務(wù)全稱叫數(shù)據(jù)庫(kù)事務(wù),是數(shù)據(jù)庫(kù)并發(fā)控制時(shí)的基本單位,它是一個(gè)操作集合,這些操作要么不執(zhí)行,要么都執(zhí)行,不可分割。例如我們的轉(zhuǎn)賬這個(gè)業(yè)務(wù),就需要進(jìn)行數(shù)據(jù)庫(kù)事務(wù)的處理。

轉(zhuǎn)賬中至少會(huì)涉及到兩條 SQL 語(yǔ)句:

update Acoount set balance = balance - money where id = 'A';update Acoount set balance = balance + money where id = 'B'

上面這兩條 SQL 就可以要看成是一個(gè)事務(wù),必須都執(zhí)行,或都不執(zhí)行。如何保證呢,一般這樣表示:

# 開啟事務(wù)begin transaction  update Account set balance = balance - money where id = 'A';update Account set balance = balance + money where id = 'B'# 提交事務(wù)commit transaction Exception # 回滾事務(wù) rollback transaction

事務(wù)的特性(筆試的時(shí)候會(huì)有)

Atomic(原子性):事務(wù)中包含的操作被看做一個(gè)邏輯單元,這個(gè)邏輯單元中的操作要么全部成功,要么全部失敗。

 

Consistency(一致性):只有合法的數(shù)據(jù)可以被寫入數(shù)據(jù)庫(kù),否則事務(wù)應(yīng)該將其回滾到最初狀態(tài)。在轉(zhuǎn)賬的時(shí)候不會(huì)出現(xiàn)一當(dāng)少錢了,另一方?jīng)]有增加的情況。

Isolation(隔離性):事務(wù)允許多個(gè)用戶對(duì)同一個(gè)數(shù)據(jù)進(jìn)行并發(fā)訪問(wèn),而不破壞數(shù)據(jù)的正確性和完整性。同時(shí),并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。

Durability(持久性):事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久的,該修改即使出現(xiàn)系統(tǒng)故障也將一直保留,真實(shí)的修改了數(shù)據(jù)庫(kù)。

以上 4 個(gè)屬性常被簡(jiǎn)稱為 acid(酸的)。

事務(wù)并發(fā)的問(wèn)題

臟讀:事務(wù)二讀取到事務(wù)一中已經(jīng)更新但是還沒有提交的數(shù)據(jù),這就是臟讀。

不可重復(fù)讀:一個(gè)事務(wù)兩次讀取同一個(gè)行數(shù)據(jù)結(jié)果不同,因?yàn)橛衅渌氖聞?wù)對(duì)數(shù)據(jù)進(jìn)行了更新。此時(shí)的數(shù)據(jù)即為不可重復(fù)讀數(shù)據(jù)。

幻讀:同一事務(wù)執(zhí)行兩次查詢,結(jié)果不一致,因?yàn)橹虚g有其它的事務(wù)對(duì)數(shù)據(jù)進(jìn)行更改。

如何解決這些問(wèn)題呢?數(shù)據(jù)庫(kù)系統(tǒng)為事務(wù)設(shè)置了 4 種不同的隔離級(jí)別。

事務(wù)隔離級(jí)別

讀未提交(read uncommitted):最低級(jí)別,可能會(huì)導(dǎo)入臟讀。

讀已提交(read committed):可以避免臟讀,只能查詢到已經(jīng)提交的數(shù)據(jù)。且具有良好的性能,但是不能避免不可重復(fù)讀和幻讀。

可重復(fù)讀(repeatable):解決了不可重復(fù)讀,可能會(huì)出現(xiàn)幻讀。

串行化(serializable):通過(guò)加鎖,使同一時(shí)間只能執(zhí)行一個(gè)事務(wù),不出現(xiàn)上述問(wèn)題,但是可能會(huì)導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)。

另外,MySQL 中默認(rèn)的隔離級(jí)別是可重復(fù)讀。Oracle 中默認(rèn)的事務(wù)隔離級(jí)別是讀已提交。

說(shuō)完事務(wù),想想我們?cè)?jīng)為了處理事務(wù)而寫過(guò)的那些代碼。最后在說(shuō)說(shuō) Spring 中是如何處理的,學(xué)完 Spring 再也不用擔(dān)心事務(wù)操作了。

在 JDBC 時(shí)代我們需要這樣手動(dòng)的處理事務(wù)。

// 獲取連接 connconn.setAutoCommit(false); 設(shè)置提交方式為手工提交// 業(yè)務(wù)代碼// 減錢// 加錢conn.commit(); 提交事務(wù)// 出現(xiàn)異常conn.rollback(); 回滾事務(wù)

我們說(shuō)處理事務(wù)那是處理數(shù)據(jù)庫(kù)事務(wù),所以肯定要先有數(shù)據(jù)庫(kù)連接才能說(shuō)事務(wù)的事,而在 Java 中我們連接數(shù)據(jù)庫(kù)無(wú)非就是 JDBC,或是對(duì) JDBC 進(jìn)一步的封裝,比方說(shuō) Hibernate ,Mybatis 或是 Dbutils 這些框架,所以萬(wàn)變不離其宗,就是這么回事,就是看誰(shuí)封裝的好罷了。你們有興趣可以看看它們都是如何封裝的。

Spring 中的如何管理事務(wù)呢

首先,我們知道 Spring 是一個(gè)容器,不同的框架在處理事務(wù)時(shí)用到的對(duì)象不同,原生的 JDBC 使用 Connection ,而 Mybatis 中使用 SqlSession 對(duì)象。而 Spring 為了整合這些不同的框架,定義了一個(gè) PlatformTransactionManager 接口來(lái)統(tǒng)一標(biāo)準(zhǔn),對(duì)不同的框架又有不同的實(shí)現(xiàn)類。

在 Spring 中根據(jù) DAO 層技術(shù)的不同來(lái)選擇不同的事務(wù)處理的對(duì)象,是 JDBC 時(shí)使用 DataSourceTransactionManager,是 Hibernate 時(shí)使用 HibernateTransitionmanager 對(duì)象,核心對(duì)象就是 Transitionmanager。

在 Spring 中管理事務(wù)會(huì)涉及到這幾個(gè)屬性,事務(wù)隔離級(jí)別、是否只讀、事務(wù)的傳播行為,說(shuō)到事務(wù)的傳播行為,指的就是不同的業(yè)務(wù)方法之間相互調(diào)用時(shí),應(yīng)該如何管理事務(wù)。Spring 中一共定義了 7 種傳播行為,無(wú)腦記住使用 required ,表示支持當(dāng)前事務(wù),若是不存在事務(wù),就創(chuàng)建一個(gè)。例如在 A 調(diào)用 B 的時(shí)候,會(huì)首先使用 A 的事務(wù),若 A 沒有事務(wù),則新創(chuàng)建一個(gè),不管 B 有沒有事務(wù)。

下面就是要實(shí)際操作一下,需要有具體的業(yè)務(wù)邏輯,還是那個(gè)轉(zhuǎn)賬的例子。來(lái)看看如何使用 Spring 來(lái)管理事務(wù),有兩種常見的管理方式,我們一種一種的說(shuō)。

使用 XML 配置

1 首先是導(dǎo)包,Spring 涉及的包是真的多,我有一個(gè)省事的方法,可能用到的 jar 包一下子導(dǎo)入。

2 導(dǎo)入新的約束文件,不然在 XML 無(wú)法使用 tx 標(biāo)簽。

3 準(zhǔn)備目標(biāo)對(duì)象和通知并配置。

目標(biāo)對(duì)象 AccountServiceImpl

public class AccountServiceImpl implements AccountService {  private AccountDAO ad;  @Transactional(isolation=Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED,readOnly=false) @Override public void transfer(Integer from, Integer to, Double money) {  ad.decreaseMoney(from, money);  //int i = 1/0;  ad.increaseMoney(to, money); }  public void setAd(AccountDAO ad) { this.ad = ad; }}

在 AOP 中通知即為增強(qiáng)的代碼,而在處理事務(wù)時(shí),要增強(qiáng)的代碼無(wú)非就是開啟事務(wù),提交事務(wù)和回滾事務(wù),所以 Spring 已經(jīng)為我們封裝好了處理事務(wù)的通知,我們只需要配置一下即可。

<!-- 導(dǎo)入 properties 配置文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 配置連接數(shù)據(jù)庫(kù)的核心處理對(duì)象--><bean name="transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref= "dataSource"></property></bean><!-- 配置通知--><tx:advice id="txAdvise" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> </tx:attributes></tx:advice><!-- 配置 AOP ,以達(dá)成自動(dòng)處理事務(wù)的要求--><aop:config> <aop:pointcut expression="execution(* yu.transation.*ServiceImpl.*(..))" id="txPointcut"/>  <aop:advisor advice-ref="txAdvise" pointcut-ref="txPointcut"/></aop:config>  <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" > <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="user" value="${jdbc.user}" ></property> <property name="password" value="${jdbc.password}" ></property></bean><!-- 配置 DAO 層對(duì)象--><bean name="ad" class="yu.transation.AccountDaoImpl"> <property name="dataSource" ref = "dataSource"></property></bean><!-- 配置 Service 層對(duì)象--><bean name = "accountService" class = "yu.transation.AccountServiceImpl"> <property name="ad" ref = "ad"></property></bean>

上面的配置文件中,在配置通知時(shí),我們具體到不同的方法會(huì)有不同的配置,在項(xiàng)目應(yīng)用時(shí),會(huì)使用通配符來(lái)進(jìn)行配置。下面介紹一下使用注解來(lái)處理事務(wù),看起來(lái)會(huì)比較簡(jiǎn)單。

步驟和上面有重復(fù)的部分,需要導(dǎo)包導(dǎo)入約束,接下來(lái)就是配置一下使用注解管理事務(wù)的開關(guān)

使用注解配置

<!-- 打開注解配置 AOP 事務(wù) --><tx:annotation-driven/>

下面是使用注解為 Service 中的方法配置事務(wù)處理的屬性,當(dāng)然,每一個(gè)方法都寫會(huì)比較麻煩,也可以在類上面使用注解,若是某個(gè)方法的處理規(guī)則不一致就單獨(dú)使用注解配置一下。

@Transactional(isolation=Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED,readOnly=false)@Overridepublic void transfer(Integer from, Integer to, Double money) {...}

回顧一下,以上主要說(shuō)了事務(wù)以及 Spring 中處理事務(wù)的方式,而這也正是 AOP 思想在 Spring 中的應(yīng)用,我們可以看到不管是前面說(shuō)的 IoC 還是 AOP 在這里都有體現(xiàn)。

注解的出現(xiàn)是為了替換配置文件,所以我就以配置文件為主,并說(shuō)一下與之對(duì)應(yīng)的注解方式。

Spring 中的配置主要在核心配置文件 applicationContext.xml 中,由不同的標(biāo)簽來(lái)表示,所以首先我們就需要導(dǎo)入各種約束,常用的約束有 bean、context、aop、tx 。

bean 標(biāo)簽是最基本的標(biāo)簽,主要用來(lái)配置各種對(duì)象。

<!--屬性介紹:id: 為對(duì)象命名,唯一性標(biāo)識(shí),不能重復(fù),不能使用特殊字符。name: 和 id 的作用類似,區(qū)別在于可是使用特殊字符,可重復(fù),但是不建議重復(fù)。class: 指定對(duì)象的全類名。init-method: 對(duì)象初始化之后立即執(zhí)行的方法。destroy-method: 對(duì)象銷毀之前執(zhí)行的方法。scope: 對(duì)象的作用范圍,可以設(shè)置單例 singleton 和多例 prototype。默認(rèn)為單例 --><bean name="userService" class="yu.service.UserServiceImpl" > <property name="" value="" ></property> <property name="" ref="" ></property></bean>

對(duì)應(yīng)的注解有以下幾個(gè),但是想要使用注解之前要首先配置一下……

<!-- 打開注解配置,掃描包及其子包 --><context:component-scan base-package="yu"></context:component-scan>

使用注解的時(shí)候,我們可以使用 @Component 來(lái)表示將這個(gè)對(duì)象交由 Spring 管理,@Scope 來(lái)指定對(duì)象的作用域。之后便可以使用 @Resource 來(lái)獲取對(duì)象。

在注冊(cè)對(duì)象的時(shí)候我們可以使用 @Component ,但是若是每一個(gè)對(duì)象都是用這個(gè)注解,不能很好的分辨出對(duì)象屬于哪一層,所以 Spring 又提供了 @Controller @Service @Repository 來(lái)分別表示控制器層,Service 層和 DAO 層的對(duì)象,功能和 @Component 是一模一樣的。

同樣的在為對(duì)象賦值的時(shí)候,我們可以使用注解 @Autowired 來(lái)自動(dòng)獲取容器中的對(duì)象,可是若是有重名的情況就需要另外一個(gè)注解 @Qualifier 來(lái)具體指定叫什么名字,這樣就有點(diǎn)麻煩了,我們一般都是直接使用 @Resource 來(lái)指定對(duì)象。

@Component("user")@Scope("prototype")public class User{ private String name;  @Value(value = "18") // 屬性注入,項(xiàng)目中不用。 private Integer age;  //@Autowired 自動(dòng)裝配 Car 類型變量,同一類型 //@Qualifier("car") 指定具體的是哪一個(gè)。 @Resource(name = "car") // 指名道姓指定是哪個(gè)對(duì)象 private Car car;  ...  @PostConstruct public void init(){ System.out.println("init 方法"); } @PreDestroy public void destroy(){ System.out.println("destory 方法"); }}

aop 相關(guān)的配置和注解

在 Spring 中我們可以自定義通知和切面,下面只是展示了如何配置,但是在具體的業(yè)務(wù)中應(yīng)該不會(huì)出現(xiàn) 5 種通知齊上陣的現(xiàn)象。

<aop:config> <!-- 配置切點(diǎn)--> <aop:pointcut expression="execution(* yu.service.*ServiceImpl.*(..))" id="pc"/>  <aop:aspect ref="myAdvice" >  <!-- 指定名為before方法作為前置通知 -->  <aop:before method="before" pointcut-ref="pc" />  <!-- 后置 -->  <aop:after-returning method="afterReturning" pointcut-ref="pc" />  <!-- 環(huán)繞通知 -->  <aop:around method="around" pointcut-ref="pc" />  <!-- 異常攔截通知 -->  <aop:after-throwing method="afterException" pointcut-ref="pc"/>  <!-- 后置 -->  <aop:after method="after" pointcut-ref="pc"/> </aop:aspect></aop:config>

同樣的,我們也可以使用注解來(lái)達(dá)到自定義配置的方式。同樣的套路,想用注解配置實(shí)現(xiàn) aop,需要打開注解配置 AOP 的開關(guān)。

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

之后就是在通知類中進(jìn)行配置即可。

@Aspect//通知類public class MyAdvice {  // 快速配置切點(diǎn)表達(dá)式,方法直接調(diào)用即可 @Pointcut("execution(* yu.service.*ServiceImpl.*(..))") public void pc(){}  //前置通知 @Before("MyAdvice.pc()") public void before(){  System.out.println("這是前置通知!!"); } //后置通知 @AfterReturning("MyAdvice.pc()") public void afterReturning(){  System.out.println("這是后置通知(如果出現(xiàn)異常不會(huì)調(diào)用)!!"); }

context 主要是和全局有關(guān)的配置

<!-- 打開注解配置對(duì)象,掃描包及其子包 --><context:component-scan base-package="yu"></context:component-scan>   <!-- 導(dǎo)入 properties 配置文件 --><context:property-placeholder location="classpath:db.properties"/> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" > <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="user" value="${jdbc.user}" ></property> <property name="password" value="${jdbc.password}" ></property></bean>

tx 配置事務(wù)管理中的通知

tx 用來(lái)配置通知對(duì)象,而這個(gè)對(duì)象是由 Spring 為我們寫好了,而事務(wù)管理依賴于數(shù)據(jù)庫(kù)連接對(duì)象,所以你能看到 transactionManager 對(duì)象依賴于 dataSource 對(duì)象。

<bean name="transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref= "dataSource"></property></bean> <tx:advice id="txAdvise" transaction-manager="transactionManager"> <tx:attributes>  <tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> </tx:attributes></tx:advice> <aop:config> <aop:pointcut expression="execution(* yu.transation.*ServiceImpl.*(..))" id="txPointcut"/>  <aop:advisor advice-ref="txAdvise" pointcut-ref="txPointcut"/></aop:config>

使用注解配置時(shí)還是需要打開注解配置的開關(guān)

<!-- 打開注解配置 AOP 事務(wù) --><tx:annotation-driven/>

在具體的業(yè)務(wù)方法上或是類上使用注解 @Transactional 來(lái)配置事務(wù)處理的方式。

@Transactional(isolation=Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED,readOnly=false)@Overridepublic void transfer(Integer from, Integer to, Double money) {...}

最后有一個(gè)完美的意外,那就是 import 標(biāo)簽。用于導(dǎo)入其它的配置模塊到主配置文件中。

<!-- 導(dǎo)入其它的 Spring 配置模塊 --><import resource="yu/transation/applicationContext.xml"/>

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产三级视频| 成人啊v在线| 高清精品一区二区三区一区| 操日韩av在线电影| 宅男在线观看免费高清网站| 午夜在线视频一区二区区别| 日韩精品导航| 人人视频精品| 四虎影视永久免费观看| h在线观看网站| 另类av一区二区| 成人免费在线网址| gogogo高清在线观看一区二区| 日本高清久久一区二区三区| 91亚洲精品在线观看| 欧美大波大乳巨大乳| 精品99一区二区三区| 玖玖在线视频| 亚洲色大成网站www| 欧美激情性做爰免费视频| 亚洲福利精品在线| 国产精品无遮挡| 日韩av在线免播放器| 国产自产女人91一区在线观看| 一区二区三区四区久久| 欧美办公室脚交xxxx| 91亚洲国产| 国产精品久久久久久| 久久午夜免费视频| 手机看片日韩av| 国产毛片毛片| 欧美老少配视频| 亚洲区小说区图片区qvod| 久久久免费高清电视剧观看| 亚洲aⅴ日韩av电影在线观看| 在线手机中文字幕| 韩日中文字幕| 少妇人妻大乳在线视频| 韩国av永久免费| 白白色在线观看| 久草在线综合| 奇米视频888| 成人深夜福利| 中文字幕在线播| 中文字幕在线观看视频一区| 风间由美一区二区av101| 国产成人在线视频免费观看| 久久国产精品波多野结衣av| se视频在线观看| 欧美色图久久| 国产欧美啪啪| 黑人巨大国产9丨视频| 国内自拍亚洲| 亚洲欧美网站| 欧美激情精品久久久久久变态| 亚洲在线视频免费观看| 亚洲精品社区| 国产伦精品一区二区三区88av| 成人短视频在线观看免费| 又黄又www的网站| 国产一区二区四区| 黑人巨大精品| 一区二区冒白浆视频| 国产超碰人人爽人人做人人爱| 蜜臀尤物一区二区三区直播| 成人字幕网zmw| 自拍一区在线观看| 蜜桃视频成人m3u8| 在线一区av| 欧美高清视频一区| 久久久www成人免费毛片麻豆| 国产精品入口麻豆电影| 久久综合福利| 日韩av电影免费在线观看| 亚洲天堂影视av| 日本成人在线视频网站| 国产免费一区二区三区香蕉精| 免费黄视频网站| 欧美视频在线播放| 中文字幕中文字幕一区二区| 国产一区二区黄| 中日韩精品视频在线观看| 人人干人人插| 日韩精品电影一区亚洲| 91插插插影院| 亚洲午夜精品一区二区三区| 欧洲精品久久久| 久久国产一区| 中日精品一色哟哟| 91手机在线观看| 一区二区视频播放| 欧美肥妇bbwbbw| 欧美孕妇与黑人巨交| 成午夜精品一区二区三区软件| 亚洲永久免费av| 欧美最猛黑人猛交69| 午夜精品久久久久久久久久久久久| 国产夫绿帽单男3p精品视频| 国产有码一区二区| 久久精品一区二区| 亚洲成a人v欧美综合天堂| 精品国产一区二区三区久久久狼| 韩国三级电影一区二区| 日韩精品一区二区三区视频在线观看| 国产精品亚洲综合久久| 亚洲免费精彩视频| 蜜桃视频免费观看一区| 日本成人在线免费| 情趣视频在线观看| 国产亚洲精品久久久久婷婷瑜伽| 在线日韩精品视频| 色哟哟精品观看| 欧美自拍小视频| 欧美成人免费看| 777精品伊人久久久久大香线蕉| 青春草国产成人精品久久| 中文字幕永久有效| 久久久亚洲天堂| 日本少妇毛茸茸| 精品三级在线看| 成人搞黄视频| 日韩女优制服丝袜电影| 永久亚洲成a人片777777| 日韩欧美色视频| 久久riav二区三区| 欧美成人在线免费视频| 一本到不卡免费一区二区| av网站在线免费看推荐| 国产精品爽爽久久| 97人人爽人人| 免费看欧美女人艹b| 久久av一区二区三区| 伊人色综合久久久天天蜜桃| 久久久精品高清| 一区二区三区四区欧美日韩| 五丁香在线视频| 国产精品一区二区在线| 亚洲国产91视频| 在线观看三级网站| 中文字幕va一区二区三区| 国产黄在线观看免费观看不卡| 欧美电影完整版在线观看| 久久久精品日韩欧美| 中文字幕久久精品| 亚州精品国产精品乱码不99按摩| 国产日韩欧美精品在线观看| 超碰97久久国产精品牛牛| 欧美精品videofree1080p| 成人免费福利视频| 国产一二三四区在线观看| 免费羞羞视频网站| 日本aⅴ大伊香蕉精品视频| 日本aaa视频| 国产精品久久久久久久久久久久| 国产高清日韩| 欧美日韩亚州综合| 老司机精品视频在线播放| 欧美激情一区二区三区p站| 亚洲免费av一区二区三区| 国产麻豆一精品一男同| 天天看天天摸天天操| 香蕉av777xxx色综合一区| 久操手机在线视频| 成人福利视频在线看| 国产又粗又猛又爽又黄| 亚洲狠狠丁香婷婷综合久久久| 在线观看日韩电影| 亚洲AV成人无码网站天堂久久| 亚洲国产精品三区| 一级毛片在线看| 精品欧美一区二区精品久久| 色婷婷久久久| 欧美精选午夜久久久乱码6080| 在线视频1卡二卡三卡| 天堂а√在线中文在线鲁大师| 久久久久免费观看| 无码国模国产在线观看| 99久久99久久综合| 91看片就是不一样| 欧洲生活片亚洲生活在线观看| 久久天堂精品| 欧美精品久久久| 蜜桃视频成人| 女生裸体无遮挡天堂网站免费| 牛牛电影国产一区二区| 欧洲永久精品大片ww免费漫画| 成人片在线播放| 一级日韩一级欧美| 天天摸天天做天天爽水多| 免费在线观看黄色| 色999日韩国产欧美一区二区| 欧美亚洲自偷自偷| 日韩欧美国产一区二区在线播放| 国产精品三级视频| 五月天激情小说| 在线视频一区观看| 亚洲观看黄色网| а√资源新版在线天堂| 亚洲色图欧美制服丝袜另类第一页| 小草在线视频免费播放| 欧美日韩亚洲成人| 欧美午夜精品理论片a级大开眼界| 亚洲天堂免费在线观看视频| 欧美久久精品午夜青青大伊人| 成人福利小视频| 无码av免费精品一区二区三区| 欧美高清视频一区二区三区在线观看| t66y永久入口地址| 亚洲精品之草原avav久久| va亚洲va日韩不卡在线观看| 国产亚洲精品av| 自拍偷拍在线视频| 国产精品一区二区性色av| 91精品国产高清久久久久久久久| 99av国产精品欲麻豆| 亚洲欧美国产一区二区| 成年人三级视频| 精品国产无码在线观看| 综合久久久久综合| 91精品视频免费看| 成人羞羞视频播放网站| 久久激情av| 欧美最近摘花xxxx摘花| 欧美午夜影院在线视频| 亚洲国产美女| 日本一区二区三区在线免费观看| 香蕉久久久久久久| 欧美激情综合五月色丁香| 日韩电影大全网站| 精品久久福利| 久久综合九色综合欧美98| 欧美专区在线| 男女视频免费看| 91精品国产一区二区三区| 国模套图日韩精品一区二区| 免费观看黄色av| 人妻精品一区二区三区| 另类图片亚洲色图| 这里只有精品在线播放| 免费黄色网址在线观看| 高潮一区二区三区乱码| 国产97人人超碰caoprom| 中文字幕乱码无码人妻系列蜜桃| 91豆麻精品91久久久久久| 熟女俱乐部一区二区| 麻豆视频在线观看免费网站黄| 日韩不卡一二三区| 99久久免费国产精品| 99视频精品免费视频| 午夜私人影院在线观看| 国产污片在线观看| 91精品中国老女人| 欧美日韩精品一区二区视频| 性无码专区无码| 国产视频三区| 欧美一级中文字幕| 亚洲女同精品视频| 99精品在线观看视频| 日本黄色免费观看| 欧美91视频| 中文字幕精品综合| 国产精品久久久精品a级小说| 99re在线| 久久精品国产精品亚洲| 亚洲videos| 国产一区二区三区四区五区入口| 精品国产a毛片| 性xxxxfreexxxxx欧美丶| 久久久男人的天堂| 91中文字幕在线播放| 国自在线精品视频| 欧美激情极品| 国产主播在线播放| 五月天六月丁香| 亚洲激情文学| 亚洲污视频在线观看| 亚洲午夜在线观看视频在线| 国产一区二区三区四区五区| 偷拍精品精品一区二区三区| 日本久久91av| 大肉大捧一进一出好爽动态图| 精精国产xxxx视频在线野外| 天天综合天天添夜夜添狠狠添| 亚洲 日韩 国产第一区| 精品一区二区三孕妇视频| 福利在线一区二区| 国偷自产av一区二区三区小尤奈| 精品在线一区二区三区| 91精品国产综合久久久久久漫画| 亚洲一级Av无码毛片久久精品| 韩日在线视频| 成人eeuss影院在线观看| 蜜桃精品视频| 尤物在线精品视频| 久久亚洲国产中v天仙www| 成人在线免费观看黄色| 国产美女久久久久久| 怡红院av亚洲一区二区三区h| 波波电影院一区二区三区| www.大网伊人| 黄色的视频在线免费观看| 国产免费黄网站| 国产男男gay体育生网站| 欧美v亚洲v| 国产中文在线视频| 丝袜美腿精品国产二区| 欧美 中文字幕| 国产精品亚发布| 国产亚洲精品熟女国产成人| 久久伊人精品视频| 精品色999| 亚洲午夜羞羞片| 亚洲一区二三区| 中国黄色一级视频| 久久在线免费观看视频| 亚洲精品综合久久中文字幕| 日韩一级免费| 女人被狂躁到高潮的免费| 在线观看中文av| 一区二区三视频| 久久新电视剧免费观看| 国产午夜精品久久久久久久| 97超碰欧美中文字幕| 从欧美一区二区三区| 欧美在线观看在线观看| 欧美激情日韩图片| 9999国产精品| 日韩欧美精品一区二区|