精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

細(xì)說 Spring 整合 Mybatis

開發(fā) 前端
要實現(xiàn)MyBatis與Spring的整合,很明顯需要這兩個框架的JAR包,但是只使用這兩個框架中所提供的JAR包是不夠的,還需要其他的JAR包來配合使用,整合時所需準(zhǔn)備的JAR包具體如下。

[[434252]]

GitHub:https://github.com/nateshao/ssm/tree/master/116-mybatis-spring

1. 整合環(huán)境搭建

“要實現(xiàn)MyBatis與Spring的整合,很明顯需要這兩個框架的JAR包,但是只使用這兩個框架中所提供的JAR包是不夠的,還需要其他的JAR包來配合使用,整合時所需準(zhǔn)備的JAR包具體如下。

Spring框架所需的JAR包

  1. <dependencies> 
  2.    <!-- AOP開發(fā)使用的JAR --> 
  3.     <dependency> 
  4.         <groupId>aopalliance</groupId> 
  5.         <artifactId>aopalliance</artifactId> 
  6.         <version>1.0</version> 
  7.     </dependency> 
  8.  
  9.     <dependency> 
  10.         <groupId>org.aspectj</groupId> 
  11.         <artifactId>aspectjweaver</artifactId> 
  12.         <version>1.9.6</version> 
  13.     </dependency> 
  14.     <dependency> 
  15.         <groupId>org.springframework</groupId> 
  16.         <artifactId>spring-aop</artifactId> 
  17.         <version>5.3.8</version> 
  18.     </dependency> 
  19.     <dependency> 
  20.         <groupId>org.springframework</groupId> 
  21.         <artifactId>spring-aspects</artifactId> 
  22.         <version>5.3.7</version> 
  23.     </dependency> 
  24.     <!-- 4個核心模塊JAR --> 
  25.     <dependency> 
  26.         <groupId>org.springframework</groupId> 
  27.         <artifactId>spring-beans</artifactId> 
  28.         <version>5.3.8</version> 
  29.     </dependency> 
  30.     <dependency> 
  31.         <groupId>org.springframework</groupId> 
  32.         <artifactId>spring-context</artifactId> 
  33.         <version>5.3.8</version> 
  34.     </dependency> 
  35.     <dependency> 
  36.         <groupId>org.springframework</groupId> 
  37.         <artifactId>spring-core</artifactId> 
  38.         <version>5.3.8</version> 
  39.     </dependency> 
  40.  
  41.     <dependency> 
  42.         <groupId>org.springframework</groupId> 
  43.         <artifactId>spring-expression</artifactId> 
  44.         <version>5.3.8</version> 
  45.     </dependency> 
  46.     <!-- JDBC和事務(wù)的JAR --> 
  47.     <dependency> 
  48.         <groupId>org.springframework</groupId> 
  49.         <artifactId>spring-jdbc</artifactId> 
  50.         <version>5.3.8</version> 
  51.     </dependency> 
  52.     <dependency> 
  53.         <groupId>org.springframework</groupId> 
  54.         <artifactId>spring-tx</artifactId> 
  55.         <version>5.3.8</version> 
  56.     </dependency> 
  57.   <dependency> 
  58.             <groupId>commons-logging</groupId> 
  59.             <artifactId>commons-logging</artifactId> 
  60.             <version>1.2</version> 
  61.     </dependency> 
  62. </dependencies> 

 

MyBatis與Spring整合的中間JAR

  1. <!-- MyBatis與Spring整合的中間JAR   --> 
  2. <dependency> 
  3.     <groupId>org.mybatis</groupId> 
  4.     <artifactId>mybatis-spring</artifactId> 
  5.     <version>2.0.6</version> 
  6. </dependency> 

 

數(shù)據(jù)庫驅(qū)動JAR(MySQL)

  1. <dependency> 
  2.     <groupId>mysql</groupId> 
  3.     <artifactId>mysql-connector-java</artifactId> 
  4.     <version>5.1.47</version> 
  5. </dependency> 

 

數(shù)據(jù)源所需JAR(DBCP)

  1. <dependency> 
  2.     <groupId>commons-dbcp</groupId> 
  3.     <artifactId>commons-dbcp</artifactId> 
  4.     <version>1.4</version> 
  5. </dependency> 
  6. <dependency> 
  7.     <groupId>commons-pool</groupId> 
  8.     <artifactId>commons-pool</artifactId> 
  9.     <version>1.6</version> 
  10. </dependency> 

 

編寫配置文件

  • 創(chuàng)建項目116-mybatis-spring,引入maven包

  • 編寫db.properties
  • 編寫Spring配置文件applicationContext.xml
  • 編寫MyBatis配置文件mybatis-config.xml
  • 引入log4j.properties

db.properties

  1. jdbc.driver=com.mysql.jdbc.Driver 
  2. jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false 
  3. jdbc.username=root 
  4. jdbc.password=123456 
  5. jdbc.maxTotal=30 
  6. jdbc.maxIdle=10 
  7. jdbc.initialSize=5 

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" 
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xmlns:context="http://www.springframework.org/schema/context" 
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
  9.     http://www.springframework.org/schema/tx  
  10.     http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 
  11.     http://www.springframework.org/schema/context  
  12.     http://www.springframework.org/schema/context/spring-context-4.3.xsd 
  13.     http://www.springframework.org/schema/aop  
  14.     http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> 
  15.     <!--讀取db.properties --> 
  16.     <context:property-placeholder location="classpath:db.properties"/> 
  17.     <!-- 配置數(shù)據(jù)源 --> 
  18.    <bean id="dataSource"  
  19.             class="org.apache.commons.dbcp2.BasicDataSource"
  20.         <!--數(shù)據(jù)庫驅(qū)動 --> 
  21.         <property name="driverClassName" value="${jdbc.driver}" /> 
  22.         <!--連接數(shù)據(jù)庫的url --> 
  23.         <property name="url" value="${jdbc.url}" /> 
  24.         <!--連接數(shù)據(jù)庫的用戶名 --> 
  25.         <property name="username" value="${jdbc.username}" /> 
  26.         <!--連接數(shù)據(jù)庫的密碼 --> 
  27.         <property name="password" value="${jdbc.password}" /> 
  28.         <!--最大連接數(shù) --> 
  29.         <property name="maxTotal" value="${jdbc.maxTotal}" /> 
  30.         <!--最大空閑連接  --> 
  31.         <property name="maxIdle" value="${jdbc.maxIdle}" /> 
  32.         <!--初始化連接數(shù)  --> 
  33.         <property name="initialSize" value="${jdbc.initialSize}" /> 
  34.    </bean> 
  35.    <!-- 事務(wù)管理器,依賴于數(shù)據(jù)源 -->  
  36.    <bean id="transactionManager" class= 
  37.      "org.springframework.jdbc.datasource.DataSourceTransactionManager"
  38.       <property name="dataSource" ref="dataSource" /> 
  39.    </bean>     
  40.     <!--開啟事務(wù)注解 --> 
  41.    <tx:annotation-driven transaction-manager="transactionManager"/> 
  42.     <!--配置MyBatis工廠 --> 
  43.     <bean id="sqlSessionFactory"  
  44.             class="org.mybatis.spring.SqlSessionFactoryBean"
  45.          <!--注入數(shù)據(jù)源 --> 
  46.          <property name="dataSource" ref="dataSource" /> 
  47.          <!--指定核心配置文件位置 --> 
  48.           <property name="configLocation" value="classpath:mybatis-config.xml"/> 
  49.    </bean> 
  50.     
  51.    <!--實例化Dao --> 
  52.    <bean id="customerDao" class="com.nateshao.dao.impl.CustomerDaoImpl"
  53.    <!-- 注入SqlSessionFactory對象實例--> 
  54.         <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
  55.    </bean> 
  56.    <!-- Mapper代理開發(fā)(基于MapperFactoryBean) --> 
  57.    <!-- <bean id="customerMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
  58.        <property name="mapperInterface" value="com.nateshao.mapper.CustomerMapper" /> 
  59.        <property name="sqlSessionFactory" ref="sqlSessionFactory" />   
  60.    </bean> --> 
  61.    <!-- Mapper代理開發(fā)(基于MapperScannerConfigurer) --> 
  62.    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  63.         <property name="basePackage" value="com.nateshao.mapper" /> 
  64.    </bean> 
  65.     
  66.    <!-- 開啟掃描 -->  
  67.    <context:component-scan base-package="com.nateshao.service" /> 
  68.     
  69. </beans> 

 

 

 

 

mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
  3.     "http://mybatis.org/dtd/mybatis-3-config.dtd"
  4. <configuration> 
  5.     <!--配置別名 --> 
  6.     <typeAliases> 
  7.         <package name="com.nateshao.po" /> 
  8.     </typeAliases> 
  9.     <!--配置Mapper的位置 --> 
  10.  <mappers>  
  11.        <mapper resource="mapper/CustomerMapper.xml" /> 
  12.        <!-- Mapper接口開發(fā)方式 --> 
  13.     <mapper resource="mapper/CustomerMapperInterface.xml" /> 
  14.         
  15.  </mappers> 
  16. </configuration> 

 

 

 

log4j.properties

  1. Global logging configuration 
  2. log4j.rootLogger=ERROR, stdout 
  3. # MyBatis logging configuration... 
  4. log4j.logger.com.nateshao=DEBUG 
  5. # Console output... 
  6. log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
  7. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
  8. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 

這樣一來,環(huán)境加載文件就全了

2. 傳統(tǒng)DAO方式的開發(fā)整合

“采用傳統(tǒng)DAO開發(fā)方式進行MyBatis與Spring框架的整合時,可以使用mybatis-spring包中所提供的SqlSessionTemplate類或SqlSessionDaoSupport類來實現(xiàn)。

  • SqlSessionTemplate:是mybatis-spring的核心類,它負(fù)責(zé)管理MyBatis的SqlSession,調(diào)用MyBatis的SQL方法。當(dāng)調(diào)用SQL方法時,SqlSessionTemplate將會保證使用的SqlSession和當(dāng)前Spring的事務(wù)是相關(guān)的。它還管理SqlSession的生命周期,包含必要的關(guān)閉、提交和回滾操作。
  • SqlSessionDaoSupport:是一個抽象支持類,它繼承了DaoSupport類,主要是作為DAO的基類來使用。可以通過SqlSessionDaoSupport類的getSqlSession()方法來獲取所需的SqlSession。

代碼實現(xiàn)

CustomerDao.java

  1. public interface CustomerDao { 
  2.     // 通過id查詢客戶 
  3.     public Customer findCustomerById(Integer id); 

CustomerDaoImpl.java

  1. public class CustomerDaoImpl extends SqlSessionDaoSupport implements CustomerDao { 
  2.     // 通過id查詢客戶 
  3.     public Customer findCustomerById(Integer id) { 
  4.         return this.getSqlSession().selectOne("com.nateshao.po" 
  5.                 + ".CustomerMapper.findCustomerById", id); 
  6.     } 

CustomerMapperInterface.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  3.     "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  4. <mapper namespace="com.nateshao.po.CustomerMapper"
  5.    <!--根據(jù)id查詢客戶信息 --> 
  6.    <select id="findCustomerById" parameterType="Integer" 
  7.            resultType="customer"
  8.       select * from t_customer where id = #{id} 
  9.    </select
  10. </mapper> 

 

 

測試類 DaoTest.java

  1. package com.nateshao.test; 
  2.  
  3. import com.nateshao.dao.CustomerDao; 
  4. import com.nateshao.mapper.CustomerMapper; 
  5. import com.nateshao.po.Customer; 
  6. import org.junit.Test; 
  7. import org.springframework.context.ApplicationContext; 
  8. import org.springframework.context.support.ClassPathXmlApplicationContext; 
  9.  
  10. /** 
  11.  * @date Created by 邵桐杰 on 2021/10/26 15:12 
  12.  * @微信公眾號 程序員千羽 
  13.  * @個人網(wǎng)站 www.nateshao.cn 
  14.  * @博客 https://nateshao.gitee.io 
  15.  * @GitHub https://github.com/nateshao 
  16.  * @Gitee https://gitee.com/nateshao 
  17.  * Description: 
  18.  */ 
  19. public class DaoTest { 
  20.     @Test 
  21.     public void findCustomerByIdDaoTest() { 
  22.         ApplicationContext act = 
  23.                 new ClassPathXmlApplicationContext("applicationContext.xml"); 
  24.         // 根據(jù)容器中Bean的id來獲取指定的Bean 
  25.         CustomerDao customerDao = 
  26.                 (CustomerDao) act.getBean("customerDao"); 
  27. //      CustomerDao customerDao = act.getBean(CustomerDao.class); 
  28.         Customer customer = customerDao.findCustomerById(1); 
  29.         System.out.println(customer); 
  30.     } 
  31.  
  32.     @Test 
  33.     public void findCustomerByIdMapperTest() { 
  34.         ApplicationContext act = 
  35.                 new ClassPathXmlApplicationContext("applicationContext.xml"); 
  36.         CustomerMapper customerMapper = act.getBean(CustomerMapper.class); 
  37.         Customer customer = customerMapper.findCustomerByIdOne(1); 
  38.         System.out.println(customer); 
  39.     } 

3. Mapper接口方式的開發(fā)整合

“在MyBatis+Spring的項目中,雖然使用傳統(tǒng)的DAO開發(fā)方式可以實現(xiàn)所需功能,但是采用這種方式在實現(xiàn)類中會出現(xiàn)大量的重復(fù)代碼,在方法中也需要指定映射文件中執(zhí)行語句的id,并且不能保證編寫時id的正確性(運行時才能知道)。為此,我們可以使用MyBatis提供的另外一種編程方式,即使用Mapper接口編程。

基于MapperFactoryBean的整合

“MapperFactoryBean是MyBatis-Spring團隊提供的一個用于根據(jù)Mapper接口生成Mapper對象的類,該類在Spring配置文件中使用時可以配置以下參數(shù):

  • mapperInterface:用于指定接口;
  • SqlSessionFactory:用于指定SqlSessionFactory;
  • SqlSessionTemplate:用于指定SqlSessionTemplate。如果與SqlSessionFactory同時設(shè)定,則只會啟用SqlSessionTemplate。

注意!!!

“雖然使用Mapper接口編程的方式很簡單,但是在具體使用時還是需要遵循一些規(guī)范。

  1. Mapper接口的名稱和對應(yīng)的Mapper.xml映射文件的名稱必須一致。
  2. Mapper.xml文件中的namespace與Mapper接口的類路徑相同。
  3. Mapper接口中的方法名和Mapper.xml中定義的每個執(zhí)行語句的id相同。
  4. Mapper接口中方法的輸入?yún)?shù)類型要和Mapper.xml中定義的每個sql的parameterType的類型相同。
  5. Mapper接口方法的輸出參數(shù)類型要和Mapper.xml中定義的每個sql的resultType的類型相同。

“在實際的項目中,DAO層會包含很多接口,如果每一個接口都在Spring配置文件中配置,不但會增加工作量,還會使得Spring配置文件非常臃腫。為此,可以采用自動掃描的形式來配置MyBatis中的映射器——采用MapperScannerConfigurer類。

MapperScannerConfigurer類在Spring配置文件中可以配置以下屬性:

  • basePackage:指定映射接口文件所在的包路徑,當(dāng)需要掃描多個包時可以使用分號或逗號作為分隔符。指定包路徑后,會掃描該包及其子包中的所有文件。
  • annotationClass:指定了要掃描的注解名稱,只有被注解標(biāo)識的類才會被配置為映射器。
  • sqlSessionFactoryBeanName:指定在Spring中定義的SqlSessionFactory的Bean名稱。
  • sqlSessionTemplateBeanName:指定在Spring中定義的SqlSessionTemplate的Bean名稱。如果定義此屬性,則sqlSessionFactoryBeanName將不起作用。
  • markerInterface:指定創(chuàng)建映射器的接口。

MapperScannerConfigurer的使用非常簡單,只需要在Spring的配置文件中編寫如下代碼:

  1. <!-- Mapper代理開發(fā)(基于MapperScannerConfigurer) --> 
  2. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  3.      <property name="basePackage" value="com.nateshao.mapper" /> 
  4. </bean> 

 

通常情況下,MapperScannerConfigurer在使用時只需通過basePackage屬性指定需要掃描的包即可,Spring會自動的通過包中的接口來生成映射器。這使得開發(fā)人員可以在編寫很少代碼的情況下,完成對映射器的配置,從而提高開發(fā)效率。

4. 測試事務(wù)

如何進行事務(wù)測試?

在項目中,Service層既是處理業(yè)務(wù)的地方,又是管理數(shù)據(jù)庫事務(wù)的地方。要對事務(wù)進行測試,首先需要創(chuàng)建Service層,并在Service層編寫添加客戶操作的代碼;然后在添加操作的代碼后,有意的添加一段異常代碼(如int i = 1/0;)來模擬現(xiàn)實中的意外情況;最后編寫測試方法,調(diào)用業(yè)務(wù)層的添加方法。這樣,程序在執(zhí)行到錯誤代碼時就會出現(xiàn)異常。

  1. @Service 
  2. @Transactional 
  3. public class CustomerServiceImpl implements CustomerService { 
  4.     //注解注入CustomerMapper 
  5.     @Autowired 
  6.     private CustomerMapper customerMapper; 
  7.     //添加客戶 
  8.     public void addCustomer(Customer customer) { 
  9.         this.customerMapper.addCustomer(customer); 
  10.         int i=1/0; //模擬添加操作后系統(tǒng)突然出現(xiàn)的異常問題 
  11.     } 

在沒有事務(wù)管理的情況下,即使出現(xiàn)了異常,數(shù)據(jù)也會被存儲到數(shù)據(jù)表中;如果添加了事務(wù)管理,并且事務(wù)管理的配置正確,那么在執(zhí)行上述操作時,所添加的數(shù)據(jù)將不能夠插入到數(shù)據(jù)表中。

總結(jié)

這篇文章首先對MyBatis與Spring框架整合的環(huán)境搭建進行了講解,

然后講解了使用傳統(tǒng)DAO方式的開發(fā)整合,以及基于Mapper接口方式的開發(fā)整合。

 

責(zé)任編輯:武曉燕 來源: 程序員千羽
相關(guān)推薦

2020-11-09 10:16:41

Mybatis

2022-11-15 08:10:23

SpringMyBatis底層

2017-05-12 15:47:15

Spring BootMybatis Ann Web

2009-06-19 10:00:37

Struts和Spri

2009-06-18 15:24:08

Spring OSGi

2016-12-14 09:03:34

springhibernate異常

2021-05-19 09:53:16

SpringbootMyBatisMySQL

2009-07-14 14:41:33

Webwork與Spr

2009-07-17 17:16:48

Spring iBAT

2009-06-01 10:28:03

SpringOSGi整合

2009-06-25 17:13:51

jBPM與Spring

2009-07-14 16:55:32

MyEclipse S

2025-07-02 07:33:02

Spring倒排索引分布式

2009-08-11 09:47:01

Spring整合Str

2022-12-23 08:28:42

策略模式算法

2010-08-03 09:15:05

ScalaSpring

2025-05-09 07:20:02

Spring數(shù)據(jù)庫檢索

2023-06-07 08:08:37

MybatisSpringBoot

2021-06-07 08:39:58

SpringBootMyBatisMapper

2011-07-18 09:48:10

jQuery
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲精品欧美一区二区三区| 精品一区二区三区四区| 黄色录像特级片| 亚洲毛片在线播放| 视频一区中文字幕国产| 色妞色视频一区二区三区四区| 亚洲国产综合av| 亚洲天堂手机| 一区二区三区中文在线| 极品尤物一区二区三区| 在线观看日批视频| 激情久久综合| 色妞欧美日韩在线| 女人被狂躁c到高潮| 99热这里有精品| 精品久久久久久久久久久久久久 | 日韩一二三在线视频播| 黄色性视频网站| av成人在线网站| 色综合久久久久综合体| 日本高清视频免费在线观看| 高清一区二区三区四区| 丝袜美腿高跟呻吟高潮一区| 久久国产精品偷| 亚洲精品成人无码熟妇在线| 美女国产精品久久久| 色哟哟国产精品免费观看| 97精品国产97久久久久久粉红| 殴美一级特黄aaaaaa| 麻豆免费看一区二区三区| 亚洲**2019国产| 成人免费毛片糖心| 人人爱人人干婷婷丁香亚洲| 91久久精品日日躁夜夜躁欧美| 九九久久九九久久| 香蕉视频网站在线观看| gogo大胆日本视频一区| 成人在线精品视频| www.久久网| 亚洲激情偷拍| 欧美成人中文字幕| 久久久久亚洲av无码a片| 久久精品色播| 日韩一级高清毛片| 国产无色aaa| 日韩av中字| 香蕉成人伊视频在线观看| 在线一区亚洲| 91九色在线porn| 久久久91精品国产一区二区精品 | 国产亚洲天堂网| 国内高清免费在线视频| 樱花影视一区二区| 中文字幕中文字幕在线中一区高清 | 免费观看av网站| 91成人入口| 5858s免费视频成人| 啊啊啊国产视频| 日韩精品一区二区三区av| 日韩欧美成人精品| heyzo国产| 蜜桃视频m3u8在线观看| 亚洲国产另类av| 国产女教师bbwbbwbbw| 黄色大片在线播放| 中文在线免费一区三区高中清不卡| 久久99精品久久久久久秒播放器| 亚洲春色一区二区三区| 国产91精品一区二区麻豆网站 | 男的插女的下面视频| 性欧美高清come| 亚洲综合在线免费观看| 妞干网在线播放| 国产丝袜在线观看视频| 亚洲狠狠爱一区二区三区| 2018国产在线| 成入视频在线观看| 欧美性猛交xxxx偷拍洗澡| 久草资源站在线观看| 神马午夜在线视频| 色天天综合久久久久综合片| 日韩在线第三页| 久久人体av| 9191成人精品久久| 中文字幕55页| 国产精品22p| 亚洲剧情一区二区| av网站免费在线看| 日韩在线中文| 欧美人与物videos| 久热这里只有精品在线| 男女精品视频| 国产欧美日韩视频| 国内精品国产成人国产三级| www.亚洲色图| 日韩av电影免费观看| yw在线观看| 亚洲伦在线观看| www.玖玖玖| 欧美日韩亚洲国产| 欧美猛男超大videosgay| 亚洲三级在线视频| 欧美18xxxx| 一区二区三区动漫| 久草视频免费播放| 国产亚洲一级| 国产女精品视频网站免费| 一区二区美女视频| k8久久久一区二区三区 | 欧美一区二区少妇| 国产精品国产三级国产a| 日韩精品一区二区三区四| 成人一级福利| 91精品国产综合久久精品| 三级视频网站在线观看| 国产乱码精品一区二区亚洲| 在线观看国产精品日韩av| 老熟妻内射精品一区| 亚洲人成久久| 国产女精品视频网站免费| 国产毛片一区二区三区va在线| 久久综合九色综合欧美亚洲| 欧美h视频在线观看| 自拍网站在线观看| 欧美一区二区视频在线观看2022| 亚洲色图14p| 亚洲精彩视频| 欧美综合第一页| 国产口爆吞精一区二区| 久久久久国色av免费看影院| 亚洲一区二区四区| 亚洲三级欧美| 欧美va亚洲va国产综合| 在线观看天堂av| 久久久久国产精品午夜一区| ts人妖另类在线| 成人免费看片| 欧美视频一区在线观看| 欧美 变态 另类 人妖| 国产精品a级| 成人亲热视频网站| www.视频在线.com| 精品久久久久久久久中文字幕 | 欧美视频在线第一页| 先锋欧美三级| 亚洲欧美综合精品久久成人| 中文字幕一区二区三区手机版 | 欧美性xxxx在线播放| 成人欧美精品一区二区| 欧美区日韩区| 99re国产视频| fc2ppv国产精品久久| 精品视频在线免费观看| 日本成人午夜影院| 久久精品人人做人人爽电影蜜月| 好吊色欧美一区二区三区四区| 国产三线在线| 精品国产伦一区二区三区观看体验| 男人的午夜天堂| 久久er精品视频| 亚洲综合视频一区| 成人一级视频| 日韩中文字幕在线观看| 亚洲天堂2021av| 国产精品久久久久久久久久免费看| 黄色片视频在线免费观看| 成人自拍在线| 欧美人成在线视频| 少妇精品视频一区二区 | 在线观看久久av| 中文无码av一区二区三区| 国产精品无人区| 色天使在线观看| 亚洲久久久久| 国产精品美女诱惑| 成av人片在线观看www| 亚洲国产精品高清久久久| 男人天堂中文字幕| 91小视频在线免费看| 美女扒开大腿让男人桶| 久久悠悠精品综合网| 日韩av电影在线免费播放| 国产在线观看黄| 欧美日韩一区不卡| 侵犯稚嫩小箩莉h文系列小说| 国产在线麻豆精品观看| 免费一级淫片aaa片毛片a级| 欧美激情影院| 国产成人综合精品| 日本在线看片免费人成视1000| 7777精品伊人久久久大香线蕉完整版 | 91蜜桃视频在线观看| 久久久久久日产精品| 欧美男女交配视频| 国产综合视频| 日本成人三级电影网站| 二吊插入一穴一区二区| 日韩中文字幕不卡视频| 国产强伦人妻毛片| 亚洲久草在线视频| 91精彩刺激对白露脸偷拍| 国产精品毛片在线| 青娱乐一区二区| 国产精品麻豆| 欧美一级视频一区二区| 免费观看成人高潮| 欧美一级在线观看| 久久久久99精品成人片三人毛片| 中文字幕不卡在线| 国产清纯白嫩初高中在线观看性色| 久久在线精品| 国产精品日韩三级| 国产精品免费99久久久| 99在线影院| 成人18视频在线观看| 久久久久国产一区二区三区| 国产在线视频福利| 亚洲精品一区二区三区99 | 欧美精品乱人伦久久久久久| 日韩精品一区二区不卡| 中文字幕亚洲精品在线观看| 国产真实乱人偷精品| 精品一区二区三区在线观看| 日本精品免费视频| 久久成人av| 国产精品久久国产精品| 伦一区二区三区中文字幕v亚洲| 欧美国产日韩一区二区| 91视频在线观看| 亚洲欧美成人精品| 黄色一级a毛片| 91精品国产91久久久久久一区二区| 欧美国产成人精品一区二区三区| 亚洲一区二区三区在线看| www.日本高清视频| 久久综合九色综合欧美98 | 国产精品15p| 91热精品视频| 巨大黑人极品videos精品| 欧美最近摘花xxxx摘花| 久久亚洲资源| 欧美成人免费小视频| 视频三区在线| 色偷偷综合社区| 国产高清在线看| 亚洲日韩欧美视频一区| 无码h黄肉3d动漫在线观看| 日韩一二在线观看| 91丨九色丨丰满| 欧美日韩视频专区在线播放| 免费无码国产精品| 日韩欧美极品在线观看| 日韩欧美三级在线观看| 亚洲制服丝袜在线| 国产在线一卡二卡| 国产精品丝袜一区| 91网站免费视频| 日本一区二区视频在线观看| 国产成人精品无码免费看夜聊软件| aa级大片欧美| 2一3sex性hd| 久久影视一区二区| 精品人妻无码一区二区三区换脸| 菠萝蜜视频在线观看一区| 亚洲久久久久久| 99热这里都是精品| 少妇户外露出[11p]| 91玉足脚交白嫩脚丫在线播放| 在线天堂www在线国语对白| 成人高清视频在线| 双性尿奴穿贞c带憋尿| 久久日韩粉嫩一区二区三区| 欧美多人猛交狂配| 国产欧美精品国产国产专区| 色婷婷粉嫩av| 依依成人综合视频| 日本五十熟hd丰满| 欧美性xxxx极品高清hd直播| 91视频在线视频| 欧美日韩高清影院| 国产人妖一区二区| 日韩欧美一级特黄在线播放| 国产xxxx在线观看| 精品久久久久久久久久久久久久久| 开心激情综合网| 亚洲欧美综合v| 米奇精品一区二区三区| 欧美成人精品一区| 成人一级福利| 国产精品爽爽爽| 欧美三级一区| 久久精品二区| 国产精品99一区二区三| 成人在线视频一区二区三区| 午夜宅男久久久| 182午夜在线观看| 成人免费毛片a| 蜜臀久久99精品久久久久久| 亚洲免费看黄网站| 日本三级一区二区| 欧美日韩国产综合一区二区| 国产极品999| 亚洲视频在线免费看| 91香蕉在线观看| 国产成人avxxxxx在线看| 超碰国产精品一区二页| 精品一区二区久久久久久久网站| 日本一区二区三区视频| 中文字幕日韩精品久久| 亚洲成人在线| 岛国av免费在线| 91尤物视频在线观看| 农村老熟妇乱子伦视频| 一区二区三区免费| 国产免费a视频| 日韩欧美亚洲另类制服综合在线| 天堂av电影在线观看| 久久综合九色九九| 欧美magnet| 国产精品亚洲一区| 99精品视频在线观看播放| 狠狠97人人婷婷五月| 国产一区美女在线| 国产传媒国产传媒| 欧美日韩国产区| 亚洲精品国产精品国自产网站按摩 | 日韩国产高清一区| 在线亚洲成人| 美女被爆操网站| 中文字幕欧美一| 久久久久久无码精品大片| 日韩精品一区二区三区中文不卡| 丁香在线视频| 91av视频在线观看| 91精品日本| 最近免费观看高清韩国日本大全| 日韩成人一级大片| 中文字幕一二三四区| 亚洲精品ww久久久久久p站 | 午夜一区二区三区在线观看| 一级黄色大毛片| 亚洲日本中文字幕免费在线不卡| 成人小电影网站| 精品一区2区三区| 伊人久久亚洲热| 精品少妇人妻av一区二区三区| 亚洲男人电影天堂| 国产乱淫av片免费| 神马国产精品影院av| 欧美暴力调教| 欧美午夜精品久久久久久蜜| 亚洲主播在线| 毛茸茸多毛bbb毛多视频| 黄色一区二区三区| 午夜在线视频免费| 97视频在线观看免费| julia中文字幕一区二区99在线| 鲁丝片一区二区三区| 麻豆9191精品国产| 精品成人av一区二区三区| 一本到不卡精品视频在线观看| 亚欧在线观看视频| 欧美激情亚洲自拍| 97精品资源在线观看| 四虎永久免费网站| 国产精品77777竹菊影视小说| 少妇aaaaa| 欧美成人aa大片| 超碰中文在线| 精品久久蜜桃| 久久黄色影院| 免费在线观看a视频| 在线观看日韩电影| 国产youjizz在线| 97人摸人人澡人人人超一碰| 在线免费高清一区二区三区| 鲁大师私人影院在线观看| 在线看日本不卡| 一本一道波多野毛片中文在线| 国产日韩精品综合网站| 天天超碰亚洲| 欧美性生交xxxxx| 欧美性猛交xxxx乱大交蜜桃 | 欧美经典一区| 成 年 人 黄 色 大 片大 全| 久久久久久久久久久久久夜| 9i精品福利一区二区三区| 国产一区二区久久精品| 久久综合给合| 国内外成人免费激情视频| 中文字幕第一区综合| 国内精品偷拍视频| 97在线看福利| 国产成人三级| 99精品视频免费版的特色功能| 亚洲成人免费观看| 触手亚洲一区二区三区| 亚洲一区二区三区视频播放| 国产综合色产| 国产精品久久久久无码av色戒|