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

老師又問我 MyBatis 了

開發(fā) 前端
MyBatis(前身是iBatis)是一個支持普通SQL查詢、存儲過程以及高級映射的持久層框架。

[[433479]]

GitHub:https://github.com/nateshao/ssm/tree/master/112-mybatis-hello

1. 什么是MyBatis

什么是MyBatis?

“MyBatis(前身是iBatis)是一個支持普通SQL查詢、存儲過程以及高級映射的持久層框架。

“MyBatis框架也被稱之為ORM(Object/Relation Mapping,即對象關(guān)系映射)框架。所謂的ORM就是一種為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)類型不匹配的技術(shù),它通過描述Java對象與數(shù)據(jù)庫表之間的映射關(guān)系,自動將Java應(yīng)用程序中的對象持久化到關(guān)系型數(shù)據(jù)庫的表中。

ORM框架的工作原理

Hibernate與MyBatis有什么區(qū)別?

Hibernate

  • Hibernate是一個全表映射的框架。
  • 通常開發(fā)者只需定義好持久化對象到數(shù)據(jù)庫表的映射關(guān)系,就可以通過Hibernate提供的方法完成持久層操作。
  • 開發(fā)者并不需要熟練的掌握SQL語句的編寫,Hibernate會根據(jù)制定的存儲邏輯,自動的生成對應(yīng)的SQL,并調(diào)用JDBC接口來執(zhí)行,所以其開發(fā)效率會高于MyBatis。
  • Hibernate也存在一些缺點,例如它在多表關(guān)聯(lián)時,對SQL查詢的支持較差;更新數(shù)據(jù)時,需要發(fā)送所有字段;不支持存儲過程;不能通過優(yōu)化SQL來優(yōu)化性能等。

MyBatis

MyBatis是一個半自動映射的框架。

“半自動”是相對于Hibernate全表映射而言的,MyBatis需要手動匹配提供POJO、SQL和映射關(guān)系,而Hibernate只需提供POJO和映射關(guān)系即可。

與Hibernate相比,雖然使用MyBatis手動編寫SQL要比使用Hibernate的工作量大,但MyBatis可以配置動態(tài)SQL并優(yōu)化SQL,可以通過配置決定SQL的映射規(guī)則,它還支持存儲過程等。對于一些復(fù)雜的和需要優(yōu)化性能的項目來說,顯然使用MyBatis更加合適。

2. MyBatis的下載和使用

下載地址:https://github.com/mybatis/mybatis-3/releases

使用MyBatis框架非常簡單,只需在應(yīng)用程序中引入MyBatis的核心包和lib目錄中的依賴包即可。

注意:如果底層采用的是MySQL數(shù)據(jù)庫,那么還需要將MySQL數(shù)據(jù)庫的驅(qū)動JAR包添加到應(yīng)用程序的類路徑中;如果采用其他類型的數(shù)據(jù)庫,則同樣需要將對應(yīng)類型的數(shù)據(jù)庫驅(qū)動包添加到應(yīng)用程序的類路徑中。

3. MyBatis的工作原理

識記!!!

4. MyBatis入門程序

在實際開發(fā)中,查詢操作通常都會涉及到單條數(shù)據(jù)的精確查詢,以及多條數(shù)據(jù)的模糊查詢。

  • 根據(jù)客戶編號查詢客戶信息。
  • 根據(jù)客戶名模糊查詢客戶信息。

根據(jù)客戶編號查詢客戶信息

MySQL數(shù)據(jù)庫中,創(chuàng)建一個名為mybatis的數(shù)據(jù)庫,在此數(shù)據(jù)庫中創(chuàng)建一個t_customer表,同時預(yù)先插入幾條數(shù)據(jù)。

  1. /* 
  2.  Navicat MySQL Data Transfer 
  3.   
  4.  Source Server         : localhost_3306 
  5.  Source Server Version : 50717 
  6.  Source Host           : localhost:3306 
  7.  Source Database       : mybatis 
  8.   
  9.  Target Server Type    : MYSQL 
  10.  Target Server Version : 50717 
  11.  File Encoding         : 65001 
  12.   
  13.  Date: 2021-10-22 22:24:17 
  14.  */ 
  15.   
  16.  SET FOREIGN_KEY_CHECKS=0; 
  17.   
  18.  -- ---------------------------- 
  19.  -- Table structure for `t_customer` 
  20.  -- ---------------------------- 
  21.  DROP TABLE IF EXISTS `t_customer`; 
  22.  CREATE TABLE `t_customer` ( 
  23.    `id` int(32) NOT NULL AUTO_INCREMENT, 
  24.    `username` varchar(50) DEFAULT NULL
  25.    `jobs` varchar(50) DEFAULT NULL
  26.    `phone` varchar(16) DEFAULT NULL
  27.    PRIMARY KEY (`id`) 
  28.  ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 
  29.   
  30.  -- ---------------------------- 
  31.  -- Records of t_customer 
  32.  -- ---------------------------- 
  33.  INSERT INTO `t_customer` VALUES ('1''aaa''dada''11111111'); 
  34.  INSERT INTO `t_customer` VALUES ('2''jack''teacher''13521210112'); 
  35.  INSERT INTO `t_customer` VALUES ('3''worker''worker''13311111234'); 
  36.  INSERT INTO `t_customer` VALUES ('4''zhangsan''maiyu''10086'); 
  37.  INSERT INTO `t_customer` VALUES ('5''zhangsan''manager''13233334444'); 
  38.  INSERT INTO `t_customer` VALUES ('6''zhangsan''manager''13233334444'); 

在IDEA中,創(chuàng)建一個名為112-mybatis-hello的maven項目,將MyBatis包、以及MySQL數(shù)據(jù)庫的驅(qū)動包一同添加到項目的pom.xml下, 并發(fā)布到類路徑中。

項目結(jié)構(gòu)如下:

pom.xml

  1. <dependencies> 
  2.         <!-- mybatis核心包 --> 
  3.         <dependency> 
  4.             <groupId>org.mybatis</groupId> 
  5.             <artifactId>mybatis</artifactId> 
  6.             <version>3.5.1</version> 
  7.         </dependency> 
  8.         <!-- mysql驅(qū)動包 --> 
  9.         <dependency> 
  10.             <groupId>mysql</groupId> 
  11.             <artifactId>mysql-connector-java</artifactId> 
  12.             <version>5.1.47</version> 
  13.         </dependency> 
  14.         <!-- junit測試包 --> 
  15.         <dependency> 
  16.             <groupId>junit</groupId> 
  17.             <artifactId>junit</artifactId> 
  18.             <version>4.13.1</version> 
  19.             <scope>test</scope> 
  20.         </dependency> 
  21.         <dependency> 
  22.             <groupId>org.junit.jupiter</groupId> 
  23.             <artifactId>junit-jupiter-api</artifactId> 
  24.             <version>5.7.2</version> 
  25.         </dependency> 
  26.  
  27.     </dependencies> 

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.     <!--1.配置環(huán)境 ,默認(rèn)的環(huán)境id為mysql--> 
  6.     <environments default="mysql"
  7.         <!--1.2.配置id為mysql的數(shù)據(jù)庫環(huán)境 --> 
  8.         <environment id="mysql"
  9.             <!-- 使用JDBC的事務(wù)管理 --> 
  10.             <transactionManager type="JDBC" /> 
  11.             <!--數(shù)據(jù)庫連接池 --> 
  12.             <dataSource type="POOLED"
  13.      <property name="driver" value="com.mysql.jdbc.Driver" /> 
  14.      <property name="url"  
  15.                             value="jdbc:mysql://localhost:3306/mybatis?useSSL=false" /> 
  16.      <property name="username" value="root" /> 
  17.      <property name="password" value="123456" /> 
  18.             </dataSource> 
  19.         </environment> 
  20.     </environments> 
  21.     <!--2.配置Mapper的位置 --> 
  22.     <mappers> 
  23.   <mapper resource="mapper/CustomerMapper.xml" /> 
  24.     </mappers> 
  25. </configuration> 

 log4j.properties

  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.     <!--1.配置環(huán)境 ,默認(rèn)的環(huán)境id為mysql--> 
  6.     <environments default="mysql"
  7.         <!--1.2.配置id為mysql的數(shù)據(jù)庫環(huán)境 --> 
  8.         <environment id="mysql"
  9.             <!-- 使用JDBC的事務(wù)管理 --> 
  10.             <transactionManager type="JDBC" /> 
  11.             <!--數(shù)據(jù)庫連接池 --> 
  12.             <dataSource type="POOLED"
  13.      <property name="driver" value="com.mysql.jdbc.Driver" /> 
  14.      <property name="url"  
  15.                             value="jdbc:mysql://localhost:3306/mybatis?useSSL=false" /> 
  16.      <property name="username" value="root" /> 
  17.      <property name="password" value="123456" /> 
  18.             </dataSource> 
  19.         </environment> 
  20.     </environments> 
  21.     <!--2.配置Mapper的位置 --> 
  22.     <mappers> 
  23.   <mapper resource="mapper/CustomerMapper.xml" /> 
  24.     </mappers> 
  25. </configuration> 

CustomerMapper.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. <!-- namespace表示命名空間 --> 
  5. <mapper namespace="com.nateshao.mapper.CustomerMapper"
  6.     <!--根據(jù)客戶編號獲取客戶信息 --> 
  7.  <select id="findCustomerById" parameterType="Integer" 
  8.   resultType="com.nateshao.po.Customer"
  9.   select * from t_customer where id = #{id} 
  10.  </select
  11.   
  12.  <!--根據(jù)客戶名模糊查詢客戶信息列表--> 
  13.  <select id="findCustomerByName" parameterType="String" 
  14.      resultType="com.nateshao.po.Customer"
  15.      <!-- select * from t_customer where username like '%${value}%' --> 
  16.      select * from t_customer where username like concat('%',#{value},'%'
  17.  </select
  18.   
  19.  <!-- 添加客戶信息 --> 
  20.  <insert id="addCustomer" parameterType="com.nateshao.po.Customer"
  21.      insert into t_customer(username,jobs,phone) 
  22.      values(#{username},#{jobs},#{phone}) 
  23.  </insert
  24.   
  25.  <!-- 更新客戶信息 --> 
  26.  <update id="updateCustomer" parameterType="com.nateshao.po.Customer"
  27.      update t_customer set 
  28.      username=#{username},jobs=#{jobs},phone=#{phone} 
  29.      where id=#{id} 
  30.  </update
  31.   
  32.  <!-- 刪除客戶信息 --> 
  33.  <delete id="deleteCustomer" parameterType="Integer"
  34.      delete from t_customer where id=#{id} 
  35.  </delete
  36. </mapper> 

 Customer.java

  1. package com.nateshao.po; 
  2.  
  3. /** 
  4.  * @date Created by 邵桐杰 on 2021/10/22 22:37 
  5.  * @微信公眾號 程序員千羽 
  6.  * @個人網(wǎng)站 www.nateshao.cn 
  7.  * @博客 https://nateshao.gitee.io 
  8.  * @GitHub https://github.com/nateshao 
  9.  * @Gitee https://gitee.com/nateshao 
  10.  * Description: 
  11.  */ 
  12. public class Customer { 
  13.     private Integer id; 
  14.     private String username; 
  15.     private String jobs; 
  16.     private String phone; 
  17.  
  18.     @Override 
  19.     public String toString() { 
  20.         return "Customer{" + 
  21.                 "id=" + id + 
  22.                 ", username='" + username + '\'' + 
  23.                 ", jobs='" + jobs + '\'' + 
  24.                 ", phone='" + phone + '\'' + 
  25.                 '}'
  26.     } 
  27.  
  28.     public Integer getId() { 
  29.         return id; 
  30.     } 
  31.  
  32.     public void setId(Integer id) { 
  33.         this.id = id; 
  34.     } 
  35.  
  36.     public String getUsername() { 
  37.         return username; 
  38.     } 
  39.  
  40.     public void setUsername(String username) { 
  41.         this.username = username; 
  42.     } 
  43.  
  44.     public String getJobs() { 
  45.         return jobs; 
  46.     } 
  47.  
  48.     public void setJobs(String jobs) { 
  49.         this.jobs = jobs; 
  50.     } 
  51.  
  52.     public String getPhone() { 
  53.         return phone; 
  54.     } 
  55.  
  56.     public void setPhone(String phone) { 
  57.         this.phone = phone; 
  58.     } 

MyBatisTest.java

  1. package com.nateshao.test; 
  2.  
  3. import com.nateshao.po.Customer; 
  4. import org.apache.ibatis.io.Resources; 
  5. import org.apache.ibatis.session.SqlSession; 
  6. import org.apache.ibatis.session.SqlSessionFactory; 
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder; 
  8. import org.junit.jupiter.api.Test; 
  9. import java.io.InputStream; 
  10. import java.util.List; 
  11.  
  12. /** 
  13.  * @date Created by 邵桐杰 on 2021/10/22 22:41 
  14.  * @微信公眾號 程序員千羽 
  15.  * @個人網(wǎng)站 www.nateshao.cn 
  16.  * @博客 https://nateshao.gitee.io 
  17.  * @GitHub https://github.com/nateshao 
  18.  * @Gitee https://gitee.com/nateshao 
  19.  * Description: Mybatis 測試 CRUD 
  20.  */ 
  21.  
  22. public class MybatisTest { 
  23.  
  24.     /** 
  25.      * 根據(jù)客戶編號查詢客戶信息 
  26.      * 
  27.      * @throws Exception 
  28.      */ 
  29.     @Test 
  30.     public void findCustomerByIdTest() throws Exception { 
  31.         // 1、讀取配置文件 
  32.         String resource = "mybatis-config.xml"
  33.         InputStream inputStream = 
  34.                 Resources.getResourceAsStream(resource); 
  35.         // 2、根據(jù)配置文件構(gòu)建SqlSessionFactory 
  36.         SqlSessionFactory sqlSessionFactory = 
  37.                 new SqlSessionFactoryBuilder().build(inputStream); 
  38.         // 3、通過SqlSessionFactory創(chuàng)建SqlSession 
  39.         SqlSession sqlSession = sqlSessionFactory.openSession(); 
  40.         // 4、SqlSession執(zhí)行映射文件中定義的SQL,并返回映射結(jié)果 
  41.         Customer customer = sqlSession.selectOne("com.nateshao.mapper" 
  42.                 + ".CustomerMapper.findCustomerById", 1); 
  43.         // 打印輸出結(jié)果 
  44.         System.out.println(customer.toString()); 
  45.         // 5、關(guān)閉SqlSession 
  46.         sqlSession.close(); 
  47.     } 
  48.  
  49.     /** 
  50.      * 根據(jù)用戶名稱來模糊查詢用戶信息列表 
  51.      * 
  52.      * @throws Exception 
  53.      */ 
  54.     @Test 
  55.     public void findCustomerByNameTest() throws Exception { 
  56.         // 1、讀取配置文件 
  57.         String resource = "mybatis-config.xml"
  58.         InputStream inputStream = Resources.getResourceAsStream(resource); 
  59.         // 2、根據(jù)配置文件構(gòu)建SqlSessionFactory 
  60.         SqlSessionFactory sqlSessionFactory = 
  61.                 new SqlSessionFactoryBuilder().build(inputStream); 
  62.         // 3、通過SqlSessionFactory創(chuàng)建SqlSession 
  63.         SqlSession sqlSession = sqlSessionFactory.openSession(); 
  64.         // 4、SqlSession執(zhí)行映射文件中定義的SQL,并返回映射結(jié)果 
  65.         List<Customer> customers = sqlSession.selectList("com.nateshao.mapper" 
  66.                 + ".CustomerMapper.findCustomerByName""j"); 
  67.         for (Customer customer : customers) { 
  68.             //打印輸出結(jié)果集 
  69.             System.out.println(customer); 
  70.         } 
  71.         // 5、關(guān)閉SqlSession 
  72.         sqlSession.close(); 
  73.     } 
  74.  
  75.     /** 
  76.      * 添加客戶 
  77.      * 
  78.      * @throws Exception 
  79.      */ 
  80.     @Test 
  81.     public void addCustomerTest() throws Exception { 
  82.         // 1、讀取配置文件 
  83.         String resource = "mybatis-config.xml"
  84.         InputStream inputStream = Resources.getResourceAsStream(resource); 
  85.         // 2、根據(jù)配置文件構(gòu)建SqlSessionFactory 
  86.         SqlSessionFactory sqlSessionFactory = 
  87.                 new SqlSessionFactoryBuilder().build(inputStream); 
  88.         // 3、通過SqlSessionFactory創(chuàng)建SqlSession 
  89.         SqlSession sqlSession = sqlSessionFactory.openSession(); 
  90.         // 4、SqlSession執(zhí)行添加操作 
  91.         // 4.1創(chuàng)建Customer對象,并向?qū)ο笾刑砑訑?shù)據(jù) 
  92.         Customer customer = new Customer(); 
  93.         customer.setUsername("rose"); 
  94.         customer.setJobs("student"); 
  95.         customer.setPhone("13333533092"); 
  96.         // 4.2執(zhí)行SqlSession的插入方法,返回的是SQL語句影響的行數(shù) 
  97.         int rows = sqlSession.insert("com.nateshao.mapper" 
  98.                 + ".CustomerMapper.addCustomer", customer); 
  99.         // 4.3通過返回結(jié)果判斷插入操作是否執(zhí)行成功 
  100.         if (rows > 0) { 
  101.             System.out.println("您成功插入了" + rows + "條數(shù)據(jù)!"); 
  102.         } else { 
  103.             System.out.println("執(zhí)行插入操作失敗!!!"); 
  104.         } 
  105.         // 4.4提交事務(wù) 
  106.         sqlSession.commit(); 
  107.         // 5、關(guān)閉SqlSession 
  108.         sqlSession.close(); 
  109.     } 
  110.  
  111.     /** 
  112.      * 更新客戶 
  113.      * 
  114.      * @throws Exception 
  115.      */ 
  116.     @Test 
  117.     public void updateCustomerTest() throws Exception { 
  118.         // 1、讀取配置文件 
  119.         String resource = "mybatis-config.xml"
  120.         InputStream inputStream = Resources.getResourceAsStream(resource); 
  121.         // 2、根據(jù)配置文件構(gòu)建SqlSessionFactory 
  122.         SqlSessionFactory sqlSessionFactory = 
  123.                 new SqlSessionFactoryBuilder().build(inputStream); 
  124.         // 3、通過SqlSessionFactory創(chuàng)建SqlSession 
  125.         SqlSession sqlSession = sqlSessionFactory.openSession(); 
  126.         // 4、SqlSession執(zhí)行更新操作 
  127.         // 4.1創(chuàng)建Customer對象,對對象中的數(shù)據(jù)進行模擬更新 
  128.         Customer customer = new Customer(); 
  129.         customer.setId(4); 
  130.         customer.setUsername("rose"); 
  131.         customer.setJobs("programmer"); 
  132.         customer.setPhone("13311111111"); 
  133.         // 4.2執(zhí)行SqlSession的更新方法,返回的是SQL語句影響的行數(shù) 
  134.         int rows = sqlSession.update("com.nateshao.mapper" 
  135.                 + ".CustomerMapper.updateCustomer", customer); 
  136.         // 4.3通過返回結(jié)果判斷更新操作是否執(zhí)行成功 
  137.         if (rows > 0) { 
  138.             System.out.println("您成功修改了" + rows + "條數(shù)據(jù)!"); 
  139.         } else { 
  140.             System.out.println("執(zhí)行修改操作失敗!!!"); 
  141.         } 
  142.         // 4.4提交事務(wù) 
  143.         sqlSession.commit(); 
  144.         // 5、關(guān)閉SqlSession 
  145.         sqlSession.close(); 
  146.     } 
  147.  
  148.     /** 
  149.      * 刪除客戶 
  150.      * 
  151.      * @throws Exception 
  152.      */ 
  153.     @Test 
  154.     public void deleteCustomerTest() throws Exception { 
  155.         // 1、讀取配置文件 
  156.         String resource = "mybatis-config.xml"
  157.         InputStream inputStream = Resources.getResourceAsStream(resource); 
  158.         // 2、根據(jù)配置文件構(gòu)建SqlSessionFactory 
  159.         SqlSessionFactory sqlSessionFactory = 
  160.                 new SqlSessionFactoryBuilder().build(inputStream); 
  161.         // 3、通過SqlSessionFactory創(chuàng)建SqlSession 
  162.         SqlSession sqlSession = sqlSessionFactory.openSession(); 
  163.         // 4、SqlSession執(zhí)行刪除操作 
  164.         // 4.1執(zhí)行SqlSession的刪除方法,返回的是SQL語句影響的行數(shù) 
  165.         int rows = sqlSession.delete("com.nateshao.mapper" 
  166.                 + ".CustomerMapper.deleteCustomer", 4); 
  167.         // 4.2通過返回結(jié)果判斷刪除操作是否執(zhí)行成功 
  168.         if (rows > 0) { 
  169.             System.out.println("您成功刪除了" + rows + "條數(shù)據(jù)!"); 
  170.         } else { 
  171.             System.out.println("執(zhí)行刪除操作失敗!!!"); 
  172.         } 
  173.         // 4.3提交事務(wù) 
  174.         sqlSession.commit(); 
  175.         // 5、關(guān)閉SqlSession 
  176.         sqlSession.close(); 
  177.     } 

總結(jié)

讀取配置文件

根據(jù)配置文件構(gòu)建SqlSessionFactory

通過SqlSessionFactory創(chuàng)建SqlSession

使用SqlSession對象操作數(shù)據(jù)庫

關(guān)閉SqlSession

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

2021-10-30 18:56:12

Spring工作框架

2023-07-18 19:11:21

配置信令系統(tǒng)

2021-09-09 18:12:22

內(nèi)存分段式網(wǎng)絡(luò)

2018-09-28 05:25:53

TopK算法代碼

2020-12-11 09:24:19

Elasticsear存儲數(shù)據(jù)

2020-04-22 11:19:07

貪心算法動態(tài)規(guī)劃

2018-11-01 13:49:23

桶排序排序面試

2018-10-28 22:37:00

計數(shù)排序排序面試

2020-09-24 14:40:55

Python 開發(fā)編程語言

2017-12-28 10:44:08

JavaScript瀏覽器網(wǎng)頁

2014-07-23 10:19:02

小米4

2022-10-17 10:13:58

谷歌云游戲

2020-03-31 16:02:23

戴爾

2023-03-10 08:24:27

OOMdump線程

2023-10-30 22:23:12

Cacherkube版本

2022-12-07 07:35:20

B站裁員隱情

2021-07-22 07:50:47

刪庫系統(tǒng)數(shù)據(jù)

2019-05-27 08:09:43

WiFi無線信道上網(wǎng)

2020-08-26 08:18:39

數(shù)據(jù)索引查詢

2021-04-06 06:23:18

MVCC并發(fā)事務(wù)
點贊
收藏

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

久久精品99久久久香蕉| 日本道免费精品一区二区三区| 91精品中国老女人| 免费无遮挡无码永久在线观看视频 | 91亚洲国产成人精品一区二区三| 欧美一二三视频| 在线观看天堂av| 视频精品一区| 欧美自拍偷拍一区| 日韩欧美视频免费在线观看| 日本一卡二卡四卡精品| 美国欧美日韩国产在线播放| 欧美激情中文网| 成人一级片免费看| 鲁大师精品99久久久| 欧美日韩和欧美的一区二区| 免费不卡av在线| 日本最黄一级片免费在线| 成人精品视频.| 国产自产女人91一区在线观看| 黄色一级片免费看| 久久国产电影| 精品无码久久久久久国产| 波多野结衣在线免费观看| 夜鲁夜鲁夜鲁视频在线播放| 亚洲精品国产a| 日韩偷拍一区二区| 亚洲欧美日韩免费| 国产成人在线看| 国产精品一区二区三| 97久久久久久久| 亚洲婷婷在线| 草民午夜欧美限制a级福利片| 日本一区二区三区网站| 日韩一二三区在线观看| 欧美精品乱码久久久久久| 91免费视频网站在线观看| 黄色污污视频在线观看| 综合久久久久久| 亚洲欧洲另类精品久久综合| 免费福利在线观看| av资源网一区| 成人免费视频观看视频| 136福利视频导航| 免费高清在线视频一区·| 欧美在线视频网站| 亚洲欧美精品一区二区三区| aⅴ色国产欧美| 久久久女女女女999久久| 人妻人人澡人人添人人爽| 欧美aaaa视频| 久久精品中文字幕电影| 免费成人深夜夜行网站| 首页国产精品| 久久精品国产成人精品| 欧美爱爱免费视频| 不卡在线一区| 久久激情五月丁香伊人| 天海翼在线视频| 图片小说视频色综合| 色偷偷av亚洲男人的天堂| 中文字幕网站在线观看| 欧美禁忌电影| 在线观看日韩视频| 呻吟揉丰满对白91乃国产区| 天天揉久久久久亚洲精品| 一区二区三区视频在线| 国产又色又爽又高潮免费| 久久在线视频| 欧美精品激情视频| 天天综合天天干| 日韩激情一区二区| 国产美女高潮久久白浆| 国产xxxx在线观看| 成人小视频在线观看| 国产青春久久久国产毛片| 污污视频在线观看网站| 久久精品视频免费| 亚洲精品一区二| 成人av福利| 午夜精品视频一区| 日本成人黄色网| 国产精久久一区二区| 精品国产精品网麻豆系列 | 国产又黄又大又爽| 国产精品 欧美精品| 精品乱码一区二区三区| yw在线观看| 亚洲精品成人在线| 色综合久久久久无码专区| 快播电影网址老女人久久| 7777精品伊人久久久大香线蕉完整版 | 免费涩涩18网站入口| 日本精品在线播放| 亚洲图片欧美日产| 欧产日产国产v| 久久一区二区三区超碰国产精品| 91精品视频专区| 香蕉视频免费看| 国产精品国产自产拍在线| 99久久免费观看| 97人人做人人爽香蕉精品| 精品久久久久久综合日本欧美| theav精尽人亡av| 亚洲综合色站| 国产精品福利小视频| 成人久久久精品国产乱码一区二区| 国产色产综合色产在线视频| www.日本三级| 色999韩欧美国产综合俺来也| 精品黑人一区二区三区久久 | 制服丝袜中文字幕第一页| 国产亚洲精品美女久久| 日韩视频免费大全中文字幕| 婷婷激情五月网| 国产福利一区二区三区视频| 亚洲a∨一区二区三区| 暧暧视频在线免费观看| 欧美精品久久99| 亚洲人成人无码网www国产| 亚洲深深色噜噜狠狠爱网站| 茄子视频成人在线| 欧美 日韩 国产 在线| 亚洲伦理在线精品| 天天插天天操天天射| 亚洲aa在线| 国产91精品久久久久久久| 亚洲精品国产一区二| 亚洲人亚洲人成电影网站色| 亚洲一区在线不卡| 免费看日本一区二区| 亚州国产精品久久久| 亚洲成人一级片| 亚洲精品伦理在线| 久久6免费视频| 97视频精品| 国产精品色午夜在线观看| 免费一级在线观看播放网址| 午夜国产精品影院在线观看| 手机免费看av片| 影音先锋久久| 国产精品日韩一区二区| 欧美6一10sex性hd| 日韩一区二区三区电影| 欧美激情图片小说| 狠狠v欧美v日韩v亚洲ⅴ| 影音先锋欧美资源| 国产精品国产亚洲精品| 久久视频这里只有精品| 国产丰满美女做爰| 一区二区欧美国产| www.啪啪.com| 国产精品免费看| 欧美成人一区二区在线| 久久青青视频| 永久免费看mv网站入口亚洲| 中文字幕人妻色偷偷久久| 国产精品蜜臀av| 亚洲天堂av一区二区三区| 欧美国内亚洲| 春色成人在线视频| 欧美办公室脚交xxxx| 亚洲男人的天堂在线| 在线观看你懂的网站| 国产精品看片你懂得| 国产又黄又猛的视频| 午夜日韩在线| 国产欧美日韩一区| 亚洲成人人体| 精品久久久av| 免费av网站在线播放| 欧美性猛交xxxx乱大交极品| 少妇精品无码一区二区免费视频| 韩日av一区二区| 久久久久久久久久久99| 奇米影视777在线欧美电影观看| 26uuu亚洲伊人春色| 91大神xh98hx在线播放| 日韩欧美亚洲一区二区| 国产做受高潮漫动| 欧美国产乱子伦| 久久久久无码精品| 亚洲影音一区| 最新视频 - x88av| 亚洲三级精品| 91在线看www| 黄色亚洲网站| 欧美疯狂xxxx大交乱88av| 日韩国产福利| 日韩一区二区三区视频在线观看| 成人免费区一区二区三区| 中文av一区二区| 黄色在线免费播放| 久久精品噜噜噜成人av农村| 欧洲精品一区二区三区久久| 日韩久久视频| 久久久久久亚洲精品不卡4k岛国 | 青青草91视频| 97超碰人人澡| 婷婷亚洲五月色综合| 开心色怡人综合网站| av日韩在线免费观看| 欧美重口另类videos人妖| 岛国中文字幕在线| 国产亚洲精品va在线观看| 性色av蜜臀av| 欧美日韩情趣电影| 六月丁香婷婷综合| 亚洲亚洲精品在线观看| 熟女少妇a性色生活片毛片| 91网站在线观看视频| 人妻av一区二区三区| 久久电影国产免费久久电影| 国产男女无遮挡| 欧美国产91| 欧美性受黑人性爽| 欧美偷拍综合| 免费成人在线观看av| 一区二区中文字幕在线观看| 成人黄色av网站| 日本美女久久| 国产精品白丝jk喷水视频一区 | 精品亚洲综合| 日韩av在线网址| 日本免费不卡视频| 精品黑人一区二区三区久久 | 精品欧美一区二区三区免费观看| 亚洲精品日产精品乱码不卡| 亚洲欧洲综合网| 国产精品美女www爽爽爽| 尤物视频最新网址| 99久久精品情趣| 三级视频网站在线观看| 成人精品视频一区| 少妇精品无码一区二区三区| 成人在线一区二区三区| 波多野结衣三级视频| 国产精品一区二区黑丝| 香蕉视频xxx| 国产精品一区二区你懂的| 色18美女社区| 国产乱码精品1区2区3区| 97人人模人人爽人人澡| 国产麻豆一精品一av一免费| 日韩精品――色哟哟| 国产乱码精品一区二区三区忘忧草 | 丝袜情趣国产精品| 视频一区二区三区不卡| 色偷偷亚洲男人天堂| 天堂地址在线www| 久久色免费在线视频| av在线free| 欧美高清视频在线观看| 黄网站在线观| 91精品国产乱码久久久久久久久| 日韩影院在线| 国产精品国产自产拍高清av水多 | 蜜桃狠狠色伊人亚洲综合网站| 欧美黑人巨大videos精品| 久久亚洲免费| sdde在线播放一区二区| 一区二区视频在线免费| 91成人超碰| 久久99久久99精品| 欧美一级视频| 国产视频手机在线播放| 久久99精品国产麻豆不卡| 精品人妻一区二区三| 成人v精品蜜桃久久一区| 国产亚洲无码精品| 亚洲国产精华液网站w| 欧洲第一无人区观看| 精品日本高清在线播放 | 日韩视频在线永久播放| 天堂中文在线资源| 亚洲欧美第一页| 日本韩国在线视频爽| 欧美激情综合亚洲一二区| a日韩av网址| 成人中文字幕+乱码+中文字幕| 18国产精品| 欧洲亚洲一区| 亚洲精品国产偷自在线观看| 欧美 日韩 国产 高清| 免费成人在线视频观看| 欧洲成人午夜精品无码区久久| 久久久久久毛片| 精品国产精品国产精品| 黄网站色欧美视频| 一区二区三区www污污污网站| 亚洲精品在线免费观看视频| yiren22综合网成人| 久久久久久久999精品视频| 日本欧美一区| 国产亚洲欧美一区二区| 999视频精品| 日本免费不卡一区二区| 国产综合色精品一区二区三区| 捆绑裸体绳奴bdsm亚洲| 亚洲日本乱码在线观看| www.久久久久久久| 精品粉嫩超白一线天av| 在线激情小视频| 欧洲成人午夜免费大片| www.爱久久| 亚洲 欧洲 日韩| 视频一区二区中文字幕| 亚洲美女精品视频| 国产精品国产三级国产专播品爱网| 丰满少妇乱子伦精品看片| 日韩欧美一区二区在线视频| 91精彩在线视频| 日韩免费在线看| 红杏一区二区三区| 国产午夜精品视频一区二区三区| 免费成人你懂的| 成人性生交大免费看| 亚洲sss视频在线视频| 99久久夜色精品国产亚洲| 最近2019中文字幕mv免费看 | 色哟哟一一国产精品| 日本道免费精品一区二区三区| 婷婷色在线视频| 欧美精品videossex88| 国产午夜亚洲精品一级在线| 亚洲高清123| 日韩av中文在线观看| 中文字幕在线免费看线人| 亚洲国产精品影院| 亚洲精品视频网| 欧美成人精品在线| 亚洲一区二区三区久久久| 无码免费一区二区三区免费播放 | 91网站免费入口| 狠狠色狠狠色综合日日五| 国产综合视频在线| 久久伊人91精品综合网站| 国产高清精品二区| 久久精品国产精品亚洲精品色| 久久成人久久爱| 蜜桃av.com| 6080日韩午夜伦伦午夜伦| 尤物视频在线免费观看| 国产精品自拍偷拍| 日韩精品不卡一区二区| 天堂av在线网站| 国产精品毛片大码女人| 一级视频在线播放| 日韩中文字幕不卡视频| 国产极品嫩模在线观看91精品| 亚洲精品永久www嫩草| 免费在线观看一区二区三区| 又色又爽的视频| 欧美一区在线视频| 欧美四级在线| 精品一区二区日本| 久久久噜噜噜| 丁香激情五月少妇| 91麻豆精品国产91久久久久久| 亚洲性图自拍| 国偷自产av一区二区三区小尤奈| 国产九九精品| 国产精品久久久视频| 91精品中文字幕一区二区三区| 青青青国内视频在线观看软件| 国产亚洲精品久久飘花| 久久综合狠狠| 少妇视频一区二区| 日韩免费福利电影在线观看| 涩涩av在线| 亚洲在线不卡| 成人福利视频在线| 无码人妻久久一区二区三区| 日韩在线观看免费全| 国产精品男女| 中文字幕在线观看第三页| 亚洲少妇屁股交4| 无码精品人妻一区二区| 国产精品久久久久久久久久| 91精品国产91久久久久久黑人| 国产又粗又长又爽| 欧美日韩不卡在线| 2021中文字幕在线| 午夜精品一区二区在线观看的 | 久久精品国产亚洲av久| 91麻豆精品国产91久久久 | 国产精品伦子伦| 欧美日韩在线免费视频| 国产精品国精产品一二| 日韩精品久久一区二区三区| 国产成人在线网站| www.亚洲激情| 97视频色精品| 亚洲女同另类| 老熟妇一区二区| 亚洲成人av片| 亚洲欧美久久精品| 免费国产成人av| 午夜在线成人av| 成人影院www在线观看|