精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

欧美日本高清视频| 欧美国产精品v| 久久久久久久久久国产精品| 99久久人妻精品免费二区| 男人av在线播放| 国产区在线观看成人精品 | xxxxxx欧美| 国产精品美女久久久久aⅴ国产馆| 91在线中文字幕| www.伊人久久| 亚洲色图国产| 亚洲欧洲中文天堂| 日韩精品国产一区| 99re久久| 福利微拍一区二区| 中文字幕第50页| 欧美男男激情freegay| 国产乱码精品一区二区三区五月婷| 97人人做人人爱| 欧美性生交大片| 欧美在线关看| 日韩欧美久久久| 日本久久久久久久久久久久| 欧美aaa免费| 国产精品日日摸夜夜摸av| 韩国一区二区三区美女美女秀 | 日本欧美加勒比视频| 久久久久成人网| 久久久久麻豆v国产| 婷婷成人综合| 精品欧美一区二区在线观看| 中文字幕在线导航| 色戒汤唯在线| 性做久久久久久免费观看欧美| 自拍偷拍亚洲色图欧美| 精品乱码一区二区三四区视频| 成人福利视频网站| 91视频在线免费观看| 一级片免费网站| 日韩电影网1区2区| 日本在线观看天堂男亚洲 | 成人在线免费看片| 国产精品剧情在线亚洲| 日韩精品久久久| 三级视频网站在线| 99re这里只有精品首页| 官网99热精品| 懂色av蜜臀av粉嫩av分享吧| 国产酒店精品激情| 国产精自产拍久久久久久蜜| 青娱乐在线免费视频| 久久欧美肥婆一二区| 欧美一级大胆视频| 毛片基地在线观看| 欧美一级二区| 国产精品va在线播放我和闺蜜| 亚洲国产成人精品女人久久| 久久久久久一区二区| 日本一区二区不卡| 怡春院在线视频| 美日韩一区二区| 国产精品视频一区二区高潮| 中文字幕一区二区三区四区免费看 | 99热在线只有精品| 国产精品99久久久久久有的能看| 91老司机在线| 不卡的日韩av| www.亚洲国产| 欧美一区激情视频在线观看| 久久久久久青草| 欧美国产成人在线| 综合网五月天| 国内高清免费在线视频| 精品久久久久久国产91| 虎白女粉嫩尤物福利视频| 超薄肉色丝袜脚交一区二区| 欧美日韩精品三区| 中文字幕人妻无码系列第三区| 日韩欧美一级| 日韩精品在线免费播放| 极品人妻videosss人妻| 91久久夜色精品国产按摩| 欧美大奶子在线| 久久露脸国语精品国产91| 久久久久久久波多野高潮日日| 国产精品久久久91| aaa一区二区三区| a亚洲天堂av| 亚洲国产一区二区三区在线| 性欧美video高清bbw| 狠狠色噜噜狠狠狠狠97| xxxx一级片| 国产精品sss在线观看av| 亚洲天堂开心观看| 丰满少妇被猛烈进入一区二区| 最新日韩av| 国产精品一区二区久久久久| 亚洲第一天堂影院| 国产日韩欧美a| 黄色一级片国产| 欧美7777| 精品久久久久久久久久久久包黑料 | 亚洲夂夂婷婷色拍ww47| 日韩免费毛片视频| 中文字幕一区图| 国产一区二区欧美日韩| 久久中文字幕无码| 美国三级日本三级久久99 | 久久看人人摘| 4438全国成人免费| 国产99视频在线| 国产视频一区二区在线| www.国产在线播放| 日本黄色成人| 亚洲欧美国产一本综合首页| 欧美日韩中文字幕在线观看| 奇米888四色在线精品| 狠狠色狠狠色综合人人| 久久99精品久久久久久野外| 一本大道久久a久久综合婷婷| 免费观看黄网站| 久久神马影院| 国产91精品在线播放| 免费av网站在线播放| 亚洲免费在线观看视频| youjizzxxxx18| 在线日本制服中文欧美| 午夜精品蜜臀一区二区三区免费| 国产丝袜视频在线观看| 中文字幕第一区第二区| 国产裸体舞一区二区三区| julia中文字幕一区二区99在线| 日韩中文字幕网站| 男人天堂视频网| 91麻豆123| 国产一级爱c视频| 日韩欧美中文字幕在线视频| 日韩视频第一页| 中文字字幕在线中文乱码| 91蝌蚪porny九色| 国自产拍偷拍精品啪啪一区二区| 538任你躁精品视频网免费| 久久精品中文字幕| 在线观看免费高清视频| 国产精品欧美久久久久一区二区| av免费网站观看| 国内精品视频在线观看| 国产精品久久不能| 91亚洲欧美| 欧美日韩精品免费观看视频| 九九九视频在线观看| 日韩电影免费一区| 伊人久久大香线蕉午夜av| 四虎成人精品一区二区免费网站| 日韩在线观看免费网站| 亚洲中文字幕在线一区| 中文字幕一区二区三中文字幕| mm131亚洲精品| 伊人久久大香线蕉精品组织观看| 91日本视频在线| 超碰个人在线| 精品欧美一区二区三区精品久久| 日韩 欧美 精品| 99久久久久久| 久久综合久久色| 日韩国产一区二区| 91免费看片网站| 欧美人与动牲性行为| 精品免费日韩av| 在线观看黄网站| 国产亚洲午夜高清国产拍精品| www.xxx亚洲| 无码一区二区三区视频| 国产精品久久波多野结衣| 超碰在线视屏| 永久555www成人免费| 国产免费久久久| 亚洲成a天堂v人片| 国产一区二区三区精品在线| 国内精品国产三级国产a久久| 国内精品国产三级国产99| 极品束缚调教一区二区网站| 欧洲一区二区视频| 精品视频在线一区二区| 亚洲成人a**站| 亚洲天堂视频在线播放| 亚洲精品免费在线观看| 国产精品久久AV无码| 久久精品国产一区二区| 久久这里只有精品18| 国产欧美日韩在线观看视频| 成人免费看吃奶视频网站| 国产盗摄精品一区二区酒店| 亚洲天堂开心观看| 亚洲国产精品suv| 在线一区二区三区| 青娱乐国产精品| 欧美激情一区二区三区蜜桃视频| 一个人看的视频www| 久久午夜电影| www.夜夜爱| 欧美一二区在线观看| 国产精品一区二区三区在线观| 日韩一区精品| 久久久久久伊人| 日本美女在线中文版| 日韩精品中文字幕久久臀| a级片免费视频| 在线视频亚洲一区| 国语对白一区二区| 1024精品合集| 国产精品天天干| 成人一区二区视频| gai在线观看免费高清| 免费看亚洲片| 青青青在线视频播放| 亚洲区综合中文字幕日日| 青娱乐一区二区| 欧美大胆视频| 99国内精品久久久久久久软件| 欧美亚洲大片| 91精品国产色综合| 毛片网站在线看| 蜜臀久久99精品久久久无需会员 | 欧亚精品一区| 91视频最新| 成人噜噜噜噜| 国产日韩中文字幕| 欧美日韩尤物久久| 国产精品91免费在线| 免费h视频在线观看| 久久久亚洲天堂| 羞羞网站在线看| 欧美猛交ⅹxxx乱大交视频| 日本不卡三区| 深夜福利91大全| www.在线播放| 亚洲美腿欧美激情另类| 天天色综合久久| 亚洲国产精品久久久久| 免费的黄色av| 亚洲精品久久久久中文字幕欢迎你| 精品国产九九九| 日韩一区二区三区视频| 国产乱淫片视频| 欧美精品精品一区| 国产精品无码专区av免费播放| 欧美日韩成人高清| 91女人18毛片水多国产| 欧美日韩小视频| 92久久精品一区二区| 欧美乱妇20p| 国产裸体永久免费无遮挡| 欧美一区二区久久| www.成人精品| 亚洲精品一区二区三区福利| 老牛影视av牛牛影视av| 亚洲精品久久久久中文字幕欢迎你 | 成人交换视频| 91精品国产综合久久香蕉的用户体验 | 免费日韩视频| www.日日操| 久久福利视频一区二区| 日本美女久久久| 成人av网站在线观看免费| 国产精品久久AV无码| 国产日韩成人精品| 麻豆一区在线观看| 亚洲伊人色欲综合网| 日韩精品――中文字幕| 在线视频你懂得一区| 7777久久亚洲中文字幕| 日韩视频一区二区在线观看| 亚洲精品911| 亚洲免费视频在线观看| 成a人v在线播放| 欧美不卡视频一区发布| 1024在线看片你懂得| 热久久99这里有精品| 国产欧美在线观看免费| 成人av中文| 久久av综合| 91麻豆天美传媒在线| 一本久久综合| 九九热99视频| 99这里只有久久精品视频| 麻豆精品免费视频| 亚洲伦理在线精品| 国产 日韩 欧美 在线| 欧美日韩成人综合| 欧美 日韩 国产 成人 在线 91| 亚洲男女性事视频| 黄网站免费在线观看| 高清亚洲成在人网站天堂| 亚洲精品555| 国产乱码精品一区二区三区卡| 色棕色天天综合网| 日本国产中文字幕| 日本亚洲欧美天堂免费| 深夜视频在线观看| 亚洲国产精品精华液ab| 国产一卡二卡在线| 91超碰这里只有精品国产| 亚洲aⅴ在线观看| 萌白酱国产一区二区| 免费污视频在线一区| 国产亚洲精品自在久久| 国产精品久久久久久久久妇女| 久草资源站在线观看| 国产麻豆一精品一av一免费| 日本二区在线观看| 五月天一区二区| 国产免费无遮挡| 国产亚洲欧美一区| 国产在线看片免费视频在线观看| 成人春色激情网| 精品久久不卡| 一区二区传媒有限公司| 国产精品亚洲成人| 欧美一级特黄高清视频| 色老汉一区二区三区| 天堂中文资源在线观看| 久久99久久99精品中文字幕| 日本成人在线网站| 亚洲韩国在线| 日韩国产在线观看| 伊人网伊人影院| 欧美丝袜美女中出在线| 色丁香婷婷综合久久| 九九久久久久99精品| 高清不卡一区| 一区一区视频| 美女国产一区二区| 老司机精品免费视频| 欧美伊人久久久久久久久影院| 日韩a级作爱片一二三区免费观看| 久久99亚洲热视| 我要色综合中文字幕| 日韩精品一区二区三区电影| 免费在线观看日韩欧美| 最近中文字幕在线mv视频在线| 五月激情丁香一区二区三区| 亚洲精品无码专区| 久久久免费电影| 国产91精品入| 日本午夜激情视频| 91网站视频在线观看| 人妻 日韩精品 中文字幕| 亚洲男人天堂网| 日日夜夜天天综合| 视频一区二区三区在线观看 | 欧美日韩午夜视频在线观看| 五月婷婷丁香网| 欧美在线视频网站| 国产精品亚洲片在线播放| 91av俱乐部| 中文字幕日韩av资源站| 亚洲色图欧美另类| 超碰高清在线| 1000精品久久久久久久久| 久久青青草原一区二区| 男人天堂一区二区| 成人精品gif动图一区| 91影院未满十八岁禁止入内| 夜夜狠狠擅视频| 极品少妇xxxx精品少妇| 成人啪啪免费看| 日韩一区免费视频| 国产在线麻豆精品观看| 国产精品一区二区电影| 亚洲精品福利| 蜜臀av色欲a片无码精品一区| 成人午夜视频在线| 91九色丨porny丨肉丝| 亚洲午夜久久久久久久| 国产一区精品福利| www.xxx麻豆| 国产亚洲欧美在线| 国产日韩欧美视频在线观看| 欧美激情第三页| 国产区精品区| 欧美精品 - 色网| 午夜精品影院在线观看| 成人高清在线| 国产精品99久久久久久久| 丝袜诱惑制服诱惑色一区在线观看| 一级片黄色录像| 亚洲电影在线观看| 99久久er| 精品国产av无码一区二区三区| 久久精品夜夜夜夜久久| 国产女人18毛片水18精| 欧美在线观看网站| 亚洲久久久久| 黄色a一级视频| 日韩一级片网站| 欧亚一区二区| 精品丰满人妻无套内射| 国产精品黄色在线观看| 婷婷在线免费观看|