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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

MyBatis_Plus(Spring版本笔记)

發布時間:2024/1/8 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis_Plus(Spring版本笔记) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前言
  • 一、MyBatis-Plus簡介
    • 1.1 簡介
    • 1.2 特性
    • 1.3 支持數據庫
    • 1.4 框架結構
    • 1.5 代碼及文檔地址
  • 二、 入門案例
    • 2.1 開發環境
    • 2.2 創建數據庫和表
      • 2.2.1 創建表
      • 2.2.2 添加數據
    • 2.3 創建maven工程
      • 2.3.1 打包方式 jar
      • 2.3.2 引入依賴
    • 2.4 Spring整合MyBatis
      • 2.4.1 創建實體
      • 2.4.2 創建MyBatis的核心配置文件
      • 2.4.3 創建mapper接口和映射文件
      • 2.4.4 創建jdbc.properties
      • 2.4.5 創建Spring的配置文件
      • 2.4.6 添加日志功能
      • 2.4.7 測試
    • 2.5 加入MyBatis-Plus
      • 2.5.1 創建Mapper接口
      • 2.5.2 測試
      • 2.5.3 結果
    • 2.6 總結
  • 三、基本CRUD
    • 3.1 BaseMapper
    • 3.2 BaseMapper功能測試
    • 3.3 通用Service
      • 3.3.1 IService
      • 3.3.2 創建Service接口和實現類
      • 3.3.3 在spring配置文件中設置自動掃描service的包
      • 3.3.4 測試查詢記錄條數和批量添加
  • 四、常用注解
    • 4.1 @TableName
      • 4.1.1 問題
      • 4.1.2 通過@TableName解決問題
      • 4.1.3 通過GlobalConfig解決問題
    • 4.2 @TableId
      • 4.2.1 問題引出
      • 4.2.2 通過@TableId解決問題
      • 4.2.3 @TableId的value屬性
      • 4.2.4 @TableId的type屬性
      • 4.2.5 雪花算法
    • 4.3 @TableField
    • 4.4 @TableLogic(邏輯刪除)
      • 4.4.1 邏輯刪除
      • 4.4.2 實現邏輯刪除
  • 五、條件構造器和常用接口
    • 5.1 wapper介紹
    • 5.2 QueryWrapper
      • 5.2.1 組裝查詢條件
      • 5.2.2 組裝排序條件
      • 5.2.3 組裝刪除條件
      • 5.2.4 條件的優先級
      • 5.2.5 組裝select子句
      • 5.2.6 實現子查詢
    • 5.3 UpdateWrapper
    • 5.4 condition
    • 5.5 LambdaQueryWrapper
    • 5.6 LambdaUpdateWrapper
  • 六、插件
    • 6.1 分頁插件
      • 6.1.1 添加配置
      • 6.1.2 測試
    • 6.2 xml自定義分頁
      • 6.2.1 UserMapper中定義接口方法
      • 6.2.2 UserMapper.xml中編寫SQL
      • 6.2.3 測試
    • 6.3 樂觀鎖
      • 6.3.1 場景
      • 6.3.2 樂觀鎖與悲觀鎖
      • 6.3.3 模擬修改沖突
      • 6.3.4 樂觀鎖實現流程
      • 6.3.5 Mybatis-Plus實現樂觀鎖
  • 七 、通用枚舉
    • 7.1 數據庫添加字段sex
    • 7.2 創建通用枚舉
    • 7.3 配置掃描通用枚舉
    • 7.4 測試
  • 八、代碼生成器
    • 8.1 引入依賴
    • 8.2 快速生成
  • 九 、MyBatisX插件
    • 9.1 安裝插件
    • 9.2 功能
      • 9.2.1 XML跳轉
      • 9.2.2 快速生成代碼
  • 十、總結


前言

本文主要參考嗶站尚硅谷楊博超講師課件整理而成,屬于自己復習使用。


提示:以下是本篇文章正文內容,下面案例可供參考

一、MyBatis-Plus簡介

1.1 簡介

MyBatis-Plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

愿景
我們的愿景是成為 MyBatis 最好的搭檔,就像魂斗羅中的 1P、2P,基友搭配,效率翻倍。

1.2 特性

  • 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
  • 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
  • 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
  • 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
  • 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
  • 內置分頁插件:基于 MyBatis 物理分頁,開發者無需關心具體操作,配 插件之后,寫分頁等同于普通 List 查詢
  • 分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數據庫
  • 內置性能分析插件:可輸出 SQL 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢

1.3 支持數據庫

任何能使用MyBatis進行 CRUD, 并且支持標準 SQL 的數據庫,具體支持情況如下

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQLSQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb
  • 達夢數據庫,虛谷數據庫,人大金倉數據庫,南大通用(華庫)數據庫,南大通用數據庫,神通數據庫,瀚高數據庫

1.4 框架結構

1.5 代碼及文檔地址

官方地址:http://mp.baomidou.com
代碼發布地址:
Github: https://github.com/baomidou/mybatis-plus
Gitee: https://gitee.com/baomidou/mybatis-plus
文檔發布地址:https://baomidou.com/pages/24112f


二、 入門案例

2.1 開發環境

以maven工程為例,以ssm整合為技術框架。

工具版本
IDEidea 2021.3
JDKJDK1.8
MAVENmaven 3.8.4
MySQLMySQL8.0.25
Spring5.3.1
MyBatis-Plus3.4.3.4

2.2 創建數據庫和表

2.2.1 創建表

CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use `mybatis_plus`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL COMMENT '主鍵ID', `name` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int(11) DEFAULT NULL COMMENT '年齡', `email` varchar(50) DEFAULT NULL COMMENT '郵箱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.2.2 添加數據

INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');

2.3 創建maven工程

2.3.1 打包方式 jar

<packaging>jar</packaging>

2.3.2 引入依賴

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- 連接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!-- junit測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- MySQL驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- lombok用來簡化實體類 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.16</version></dependency><!--MyBatis-Plus的核心依賴--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.4.3.4</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency></dependencies><properties><spring.version>5.3.1</spring.version></properties>

注意:
Spring整合MyBatis,需要MyBatis以及Spring整合MyBatis的依賴:

但是,在以上的依賴列表中,并沒有MyBatis以及Spring整合MyBatis的依賴,因為當我們引入了
MyBatis-Plus的依賴時,就可以間接的引入這些依賴

并且依賴和依賴之間的版本必須兼容,所以我們不能隨便引入其他版本的依賴,以免發生沖突
在官網上有明確提示:

2.4 Spring整合MyBatis

2.4.1 創建實體

public class User {private Long id;private String name;private int age;private String email;public User(Long id, String name, int age, String email) {this.id = id;this.name = name;this.age = age;this.email = email;}public User() {}public Long getId() {return this.id;}public String getName() {return this.name;}public int getAge() {return this.age;}public String getEmail() {return this.email;}public SexEnum getSex() {return this.sex;}public int getIsDeleted() {return this.isDeleted;}public void setId(Long id) {this.id = id;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void setEmail(String email) {this.email = email;}public void setSex(SexEnum sex) {this.sex = sex;}public void setIsDeleted(int isDeleted) {this.isDeleted = isDeleted;}public String toString() {return "User(id=" + this.getId() + ", name=" + this.getName() + ", age=" + this.getAge() + ", email=" + this.getEmail() + ", sex=" + this.getSex() + ", isDeleted=" + this.getIsDeleted() + ")";} }

2.4.2 創建MyBatis的核心配置文件

在resources下創建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration></configuration>

2.4.3 創建mapper接口和映射文件

  • mapper接口:
public interface TestMapper { /** * 查詢所有用戶信息 * @return */ List<User> getAllUser(); }
  • mapper映射文件:
    在resources下的com/atguigu/mp/mapper目錄下創建TestMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.atguigu.mybatisplus.mapper.UserMapper"><!--SQL片段,記錄基礎字段--><!--<sql id="BaseColumns">id,name,age,email</sql>--><!--第一種寫法--><!--List<User> getAllUser();--><select id="getAllUser" resultType="User">select <include refid="BaseColumns"></include> from user</select><!--第二種寫法--><!--List<User> getAllUser();--><select id="getAllUser" resultType="User"><!--select <include refid="BaseColumns"></include> from user-->select id,name,age,email from user</select> </mapper>

2.4.4 創建jdbc.properties

在resources下創建jdbc.properties

jdbc.username=root jdbc.password=5864@WCY jdbc.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false jdbc.driver=com.mysql.cj.jdbc.Driver

2.4.5 創建Spring的配置文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 引入jdbc.properties --><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!-- 配置Druid數據源 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- 配置用于創建SqlSessionFactory的工廠bean --><bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><!-- 設置MyBatis配置文件的路徑(可以不設置) --><property name="configLocation" value="classpath:mybatis-config.xml"></property><!-- 設置數據源 --><property name="dataSource" ref="dataSource"></property><!-- 設置類型別名所對應的包 --><property name="typeAliasesPackage" value="com.atguigu.mybatisplus.pojo"></property><!--設置映射文件的路徑若映射文件所在路徑和mapper接口所在路徑一致,則不需要設置--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/></bean><!--配置mapper接口的掃描配置由mybatis-spring提供,可以將指定包下所有的mapper接口創建動態代理并將這些動態代理作為IOC容器的bean管理--><bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.atguigu.mybatisplus.mapper"></property></bean><!--配置自動掃描的包--><context:component-scan base-package="com.atguigu.mybatisplus.service"></context:component-scan> </beans>

2.4.6 添加日志功能

在resources下創建logback.xml

<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"><!--定義日志文件的存儲地址 logs為當前項目的logs目錄 還可以設置為../logs --><property name="LOG_HOME" value="logs" /><!--控制臺日志, 控制臺輸出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度,%msg:日志消息,%n是換行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}- %msg%n</pattern></encoder></appender><!--myibatis log configure--><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- 日志輸出級別 --><root level="DEBUG"><appender-ref ref="STDOUT" /></root></configuration>

2.4.7 測試

  • 方式一:通過IOC容器
public class MyBatisPlusTest {@Testpublic void testMyBatis(){ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");TestMapper mapper = ac.getBean(TestMapper.class);mapper.getAllUser().forEach(user -> System.out.println(user));} }
  • 方式二 Spring整合junit
//在Spring的環境中進行測試 @RunWith(SpringJUnit4ClassRunner.class) //指定Spring的配置文件 @ContextConfiguration("classpath:applicationContext.xml") public class MyBatisPlusTest {@Autowiredprivate TestMapper testMapper;@Testpublic void testMyBatisBySpring(){testMapper.getAllUser().forEach(user -> System.out.println(user));} }


2.5 加入MyBatis-Plus

Spring整合MyBatis

加入MyBatis-Plus之后

<!-- 此處使用的是MybatisSqlSessionFactoryBean --> <!-- 配置用于創建SqlSessionFactory的工廠bean --><bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><!-- 設置MyBatis配置文件的路徑(可以不設置) --><property name="configLocation" value="classpath:mybatis-config.xml"></property><!-- 設置數據源 --><property name="dataSource" ref="dataSource"></property><!-- 設置類型別名所對應的包 --><property name="typeAliasesPackage" value="com.atguigu.mybatisplus.pojo"></property><!--設置映射文件的路徑若映射文件所在路徑和mapper接口所在路徑一致,則不需要設置--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/></bean>

此處使用的是MybatisSqlSessionFactoryBean
經觀察,目前bean中配置的屬性和SqlSessionFactoryBean一致
MybatisSqlSessionFactoryBean是在SqlSessionFactoryBean的基礎上進行了增強
即具有SqlSessionFactoryBean的基礎功能,又具有MyBatis-Plus的擴展配置
具體配置信息地址(https://baomidou.com/pages/56bac0/#%E5%9F%BA%E6%9C%AC%E9%
85%8D%E7%BD%AE)


2.5.1 創建Mapper接口

public interface UserMapper extends BaseMapper<User> { }

BaseMapper是MyBatis-Plus提供的基礎mapper接口,泛型為所操作的實體類型,其中包含CRUD的各個方法,我們的mapper繼承了BaseMapper之后,就可以直接使用BaseMapper所提供的各種方法,而不需要編寫映射文件以及SQL語句,大大的提高了開發效率

2.5.2 測試

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class MyBatisPlusTest {/*沒有使用mybatis_plus@Testpublic void testMyBatis(){ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");UserMapper mapper = ac.getBean(UserMapper.class);mapper.getAllUser().forEach(user -> System.out.println(user));}*/@Autowiredprivate UserMapper userMapper;/*---------------------------------使用MyBatisPlus之后-------------------------------------*/@Testpublic void testMyBatisPlus(){//查詢所有用戶信息// SELECT id,name,age,email FROM userSystem.out.println(userMapper.selectList(null));}

2.5.3 結果

2.6 總結

在Spring整合MyBatis中加入了MyBatis-Plus后,我們就可以使用MyBatis-Plus所提供的BaseMapper實現CRUD,并不需要編寫映射文件以及SQL語句
但是若要自定義SQL語句,仍然可以編寫映射文件而不造成任何影響。因為MyBatis-Plus只做增強,而不做改變。

三、基本CRUD

3.1 BaseMapper

MyBatis-Plus中的基本CRUD在內置的BaseMapper中都已得到了實現,我們可以直接使用,接口如下:

/*** Mapper 繼承該接口后,無需編寫 mapper.xml 文件,即可獲得CRUD功能* <p>這個 Mapper 支持 id 泛型</p>** @author hubin* @since 2016-01-23*/ public interface BaseMapper<T> extends Mapper<T> {/*** 插入一條記錄** @param entity 實體對象*/int insert(T entity);/*** 根據 ID 刪除** @param id 主鍵ID*/int deleteById(Serializable id);/*** 根據實體(ID)刪除** @param entity 實體對象* @since 3.4.4*/int deleteById(T entity);/*** 根據 columnMap 條件,刪除記錄** @param columnMap 表字段 map 對象*/int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);/*** 根據 entity 條件,刪除記錄** @param queryWrapper 實體對象封裝操作類(可以為 null,里面的 entity 用于生成 where 語句)*/int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 刪除(根據ID 批量刪除)** @param idList 主鍵ID列表(不能為 null 以及 empty)*/int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);/*** 根據 ID 修改** @param entity 實體對象*/int updateById(@Param(Constants.ENTITY) T entity);/*** 根據 whereEntity 條件,更新記錄** @param entity 實體對象 (set 條件值,可以為 null)* @param updateWrapper 實體對象封裝操作類(可以為 null,里面的 entity 用于生成 where 語句)*/int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);/*** 根據 ID 查詢** @param id 主鍵ID*/T selectById(Serializable id);/*** 查詢(根據ID 批量查詢)** @param idList 主鍵ID列表(不能為 null 以及 empty)*/List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);/*** 查詢(根據 columnMap 條件)** @param columnMap 表字段 map 對象*/List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);/*** 根據 entity 條件,查詢一條記錄* <p>查詢一條記錄,例如 qw.last("limit 1") 限制取一條記錄, 注意:多條數據會報異常</p>** @param queryWrapper 實體對象封裝操作類(可以為 null)*/default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {List<T> ts = this.selectList(queryWrapper);if (CollectionUtils.isNotEmpty(ts)) {if (ts.size() != 1) {throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");}return ts.get(0);}return null;}/*** 根據 Wrapper 條件,查詢總記錄數** @param queryWrapper 實體對象封裝操作類(可以為 null)*/Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根據 entity 條件,查詢全部記錄** @param queryWrapper 實體對象封裝操作類(可以為 null)*/List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根據 Wrapper 條件,查詢全部記錄** @param queryWrapper 實體對象封裝操作類(可以為 null)*/List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根據 Wrapper 條件,查詢全部記錄* <p>注意: 只返回第一個字段的值</p>** @param queryWrapper 實體對象封裝操作類(可以為 null)*/List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根據 entity 條件,查詢全部記錄(并翻頁)** @param page 分頁查詢條件(可以為 RowBounds.DEFAULT)* @param queryWrapper 實體對象封裝操作類(可以為 null)*/<P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根據 Wrapper 條件,查詢全部記錄(并翻頁)** @param page 分頁查詢條件* @param queryWrapper 實體對象封裝操作類*/<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); }

3.2 BaseMapper功能測試

//插入@Testpublic void testInsert(){// INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )User user = new User(6,"張三",23,"zhangsan@126.com");int result = userMapper.insert(user);System.out.println("result="+result);}//刪除@Testpublic void testDelete(){//根據Id刪除用戶//DELETE FROM user WHERE id=?int result = userMapper.deleteById(2L);//根據map集合刪除//DELETE FROM user WHERE name = ? AND age = ?Map<String,Object> map = new HashMap<>();map.put("name","張三");map.put("age",23);int result = userMapper.deleteByMap(map);// 根據id批量刪除// DELETE FROM user WHERE id IN ( ? , ? , ? )List<Integer> list = Arrays.asList(1, 2, 3);int result = userMapper.deleteBatchIds(list);System.out.println("result="+result);}//修改@Testpublic void testUpdate(){ // UPDATE user SET name=?, email=? WHERE id=?User user = new User();user.setId(4L);user.setName("李四");user.setEmail("lisi@atguigu.com");int result = userMapper.updateById(user);System.out.println("result="+result);}//查詢@Testpublic void testSelect(){//根據Id查詢用戶 // SELECT id,name,age,email FROM user WHERE id=?User user = userMapper.selectById(5L);System.out.println(user);// SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )List<Integer> list = Arrays.asList(1, 2, 4);List<User> users = userMapper.selectBatchIds(list);users.forEach(System.out::println);Map<String,Object> map = new HashMap<>();map.put("age",23);List<User> users = userMapper.selectByMap(map);users.forEach(System.out::println);}

通過觀察BaseMapper中的方法,大多方法中都有Wrapper類型的形參,此為條件構造器,可針對于SQL語句設置不同的條件,若沒有條件,則可以為該形參賦值null,即查詢(刪除/修改)所有數據


3.3 通用Service

說明:

  • 通用 Service CRUD 封裝IService接口,進一步封裝 CRUD 采用 get 查詢單行 remove 刪除 list 查詢集合 page 分頁 , 前綴命名方式區分 Mapper 層避免混淆
  • 泛型 T 為任意實體對象
  • 建議如果存在自定義通用 Service 方法的可能,請創建自己的 IBaseService 繼承Mybatis-Plus 提供的基類
  • 官網地址:https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3

3.3.1 IService

MyBatis-Plus中有一個接口 IService和其實現類 ServiceImpl,封裝了常見的業務層邏輯

詳情查看源碼IService和ServiceImpl

3.3.2 創建Service接口和實現類

UserService

/** * UserService繼承IService模板提供的基礎功能 */ public interface UserService extends IService<User> {}

UserServiceImpl

/** * ServiceImpl實現了IService,提供了IService中基礎功能的實現 * 若ServiceImpl無法滿足業務需求,則可以使用自定的UserService定義方法,并在實現類中實現 */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}

3.3.3 在spring配置文件中設置自動掃描service的包

在applicationContext.xml中添加掃描組件的配置,掃描業務層組件,用于測試

<context:component-scan base-package="com.atguigu.mybatisplus.service.impl"></context:component-scan>

3.3.4 測試查詢記錄條數和批量添加

//spring測試類寫法一 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class MyBatisServiceTest {@Autowiredprivate UserService userService;@Testpublic void testCount(){//查詢總記錄條數//SELECT COUNT( * ) FROM userlong count = userService.count();System.out.println("總記錄條數" + count);}@Testpublic void testSaveBatch(){//實現新增用戶ArrayList<User> list = new ArrayList<>();// SQL長度有限制,海量數據插入單條SQL無法實行,// 因此MP將批量插入放在了通用Service中實現,而不是通用Mapperfor (int i = 0; i < 100 ; i++) {User user = new User();user.setName("abc"+i);user.setAge(20+i);list.add(user);}//INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? )boolean b = userService.saveBatch(list);System.out.println(b);}}

錯誤:
Duplicate entry ‘0’ for key ‘PRIMARY’
原因:發現了是數據庫表設計不合理導致的;
因為主鍵設置不能為空,因此默認是以"0"來進行填充的。因此在數據插入時數據的主鍵id值被0占據,但由于之前已經有數據了,id為“0”的索引已經被占,在使用就會報這個錯誤,因此我們只需要對表中的主鍵“id”設置成自增即可。

糾正:為什么會出現這個問題,是因為在創建實體類的時候id屬性的類型寫成long了,應該寫成Long不然雪花算法是不會實現的。大小寫要注意。

四、常用注解

4.1 @TableName

經過以上的測試,在使用MyBatis-Plus實現基本的CRUD時,我們并沒有指定要操作的表,只是在Mapper接口繼承BaseMapper時,設置了泛型User,而操作的表為user表:
由此得出結論,MyBatis-Plus在確定操作的表時,由BaseMapper的泛型決定,即實體類型決定,且默認操作的表名和實體類型的類名一致

4.1.1 問題

若實體類類型的類名和要操作的表的表名不一致,會出現什么問題?
我們將表user更名為t_user,測試查詢功能
程序拋出異常,Table ‘mybatis_plus.user’ doesn’t exist,因為現在的表名為t_user,而默認操作的表名和實體類型的類名一致,即user表

4.1.2 通過@TableName解決問題

在實體類類型上添加==@TableName(“t_user”)==,標識實體類對應的表,即可成功執行SQL語句。

4.1.3 通過GlobalConfig解決問題

在開發的過程中,我們經常遇到以上的問題,即實體類所對應的表都有固定的前綴,例如t_tbl_
此時,可以使用MyBatis-Plus提供的全局配置,為實體類所對應的表名設置默認的前綴,那么就不需要在每個實體類上通過@TableName標識實體類對應的表。

在spring配置文件中修改:spring-persist.xml中的sqlsessionfactorybean

<!--使用mybatisplus--><bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><!--指定mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--指定mapper.xml--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/><!--裝配數據源--><property name="dataSource" ref="dataSource"/><!--設置mybatisplus的全局配置,即表的前綴--><property name="globalConfig" ref="globalConfig"></property></bean><bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig"><property name="dbConfig"><bean id="config" class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig"><!--設置實體類所對應的表的前綴--><property name="tablePrefix" value="t_"></property></bean></property></bean>

4.2 @TableId

經過以上的測試,MyBatis-Plus在實現CRUD時,會默認將id作為主鍵列,并在插入數據時,默認基于雪花算法的策略生成id。

4.2.1 問題引出

若實體類和表中表示主鍵的不是id,而是其他字段,例如uid,MyBatis-Plus會自動識別uid為主鍵列嗎?
我們實體類中的屬性id改為uid,將表中的字段id也改為uid,測試添加功能程序拋出異常,Field ‘uid’ doesn’t have a default value,說明MyBatis-Plus沒有將uid作為主鍵賦值

4.2.2 通過@TableId解決問題

在實體類中uid屬性上通過@TableId將其標識為主鍵,即可成功執行SQL語句。

4.2.3 @TableId的value屬性

若實體類中主鍵對應的屬性為id,而表中表示主鍵的字段為uid,此時若只在屬性id上添加注解@TableId,則拋出異常Unknown column ‘id’ in ‘field list’,即MyBatis-Plus仍然會將id作為表的主鍵操作,而表中表示主鍵的是字段uid
此時需要通過@TableId注解的value屬性,指定表中的主鍵字段@TableId(“uid”)或@TableId(value=“uid”)

public class User {//將屬性所對應的字段指定為主鍵// @TableId注解的value屬性用于指定主鍵的字段@TableId("uid")private Long id;

4.2.4 @TableId的type屬性

type屬性用來定義主鍵策略


[1]臨時修改

public class User {//將屬性所對應的字段指定為主鍵// @TableId注解的value屬性用于指定主鍵的字段// @TableId注解的type屬性設置主鍵生成策略// @TableId(value = "uid", type = IdType.AUTO)@TableId("uid")private Long id;

[2] 配置全局配置(全局有效)
在spring-persist.xml中修改。

<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig"><property name="dbConfig"><bean id="config" class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig"><!--設置實體類所對應的表的前綴--><property name="tablePrefix" value="t_"></property><!--設置全局主鍵策略--><property name="idType" value="AUTO"></property></bean></property></bean>

4.2.5 雪花算法






4.3 @TableField

經過以上的測試,我們可以發現,MyBatis-Plus在執行SQL語句時,要保證實體類中的屬性名和表中的字段名一致
如果實體類中的屬性名和字段名不一致的情況,會出現什么問題呢?
a>情況1

若實體類中的屬性使用的是駝峰命名風格,而表中的字段使用的是下劃線命名風格
例如實體類屬性userName,表中字段user_name
此時MyBatis-Plus會自動將下劃線命名風格轉化為駝峰命名風格
相當于在MyBatis中配置

b>情況2

若實體類中的屬性和表中的字段不滿足情況1
例如實體類屬性name,表中字段username
此時需要在實體類屬性上使用@TableField(“username”)設置屬性所對應的字段名

//注意:如果實體類中屬性名為:name,表中字段名也要為:name// 在不加@TableField注解的情況下,表中字段為:user_name 代碼會報錯。//指定屬性對應的字段名//當實體類中是name,表中所對應的字段名是:user_name,可以使用該注解來實現指定屬性對應的字段名@TableField("user_name")private String name;

4.4 @TableLogic(邏輯刪除)

4.4.1 邏輯刪除

邏輯刪除

物理刪除:真實刪除,將對應數據從數據庫中刪除,之后查詢不到此條被刪除的數據
邏輯刪除:假刪除,將對應數據中代表是否被刪除字段的狀態修改為“被刪除狀態”,之后在數據庫中仍舊能看到此條數據記錄
使用場景:可以進行數據恢復

4.4.2 實現邏輯刪除

  • 數據庫中創建邏輯刪除狀態列,設置默認值為0

  • 實體類中添加邏輯刪除屬性

  • //邏輯刪除@TableLogicprivate Integer isDeleted;
  • 測試
    • 測試刪除功能,真正執行的是修改
      UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
    • 測試查詢功能,被邏輯刪除的數據默認不會被查詢
      SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

    五、條件構造器和常用接口

    5.1 wapper介紹

    5.2 QueryWrapper

    5.2.1 組裝查詢條件

    @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class MyBatisPlusWrapperTest {@Autowiredpublic UserMapper userMapper;@Testpublic void test01(){//查詢用戶名包含a,年齡在20到30之間,并且郵箱不為null的用戶信息QueryWrapper<User> queryWrapper = new QueryWrapper<>();//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)queryWrapper.like("user_name","a").between("age",20,30).isNotNull("email");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

    5.2.2 組裝排序條件

    @Testpublic void test02(){//按年齡降序查詢用戶,如果年齡相同則按id升序排列//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,uid ASCQueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("uid");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

    5.2.3 組裝刪除條件

    @Testpublic void test03(){//刪除email為空的用戶QueryWrapper<User> queryWrapper = new QueryWrapper<>();//UPDATE t_user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)//出現這個是因為我們設置了邏輯刪除,即刪除變成了修改,將狀態從0(未刪除狀態)--->1(已刪除狀態);queryWrapper.isNull("email");int result = userMapper.delete(queryWrapper);System.out.println("受影響的行數 : " + result);}

    5.2.4 條件的優先級

    /*** update(User entity,Wrapper<User> updateWrapper)* 第一個參數為修改的內容,第二個參數為設置修改的條件參數1設置修改的字段和值,參數2是查詢符合的條件**/@Testpublic void test04(){//條件包裝器中條件之間默認是and連接。我們不需要手動設置,但是如果是或,我們需要手動設置or.//將(年齡大于20并且用戶名中包含有a)或郵箱為null的用戶信息修改QueryWrapper<User> queryWrapper = new QueryWrapper<>();//UPDATE t_user SET user_name=?, age=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND age > ? OR email IS NULL)queryWrapper.like("user_name","a").gt("age",20).or().isNull("email");User user = new User();user.setName("小明");user.setEmail("test@atguigu.com");int result = userMapper.update(user, queryWrapper);System.out.println("受影響的行數:" + result);} @Testpublic void test05(){//將(年齡大于20或郵箱為null)并且用戶名中包含有a的用戶信息修改//lambda表達式內的邏輯優先運算QueryWrapper<User> queryWrapper = new QueryWrapper<>();//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))queryWrapper.like("user_name","a").and(i ->i.gt("age",20).or().isNull("email"));List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

    5.2.5 組裝select子句

    @Testpublic void test06(){//查詢用戶信息的username和age字段QueryWrapper<User> queryWrapper = new QueryWrapper<>();//SELECT user_name,age FROM t_user WHERE is_deleted=0queryWrapper.select("user_name","age");List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);maps.forEach(System.out::println);}

    5.2.6 實現子查詢

    @Testpublic void test07(){//查詢id小于等于3的用戶信息QueryWrapper<User> queryWrapper = new QueryWrapper<>();//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (uid IN (select uid from t_user where uid <= 3))queryWrapper.inSql("uid","select uid from t_user where uid <= 3");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

    5.3 UpdateWrapper

    @Testpublic void test08(){//將用戶名中包含有a并且(年齡大于20或郵箱為null)的用戶信息修改// 組裝set子句以及修改條件UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();/*寫在一起updateWrapper.set("age",18).set("email","user@atguigu.com").like("user_name","a").and(i ->i.gt("age",20).or().isNull("email"));*///分開寫//UPDATE t_user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))updateWrapper.like("user_name","a").and(i ->i.gt("age",20).or().isNull("email"));updateWrapper.set("user_name","小黑").set("email","abc@atguigu.xom");//這里必須要創建User對象,否則無法應用自動填充。如果沒有自動填充,可以設置為null//UPDATE t_user SET username=?, age=?,email=? WHERE (username LIKE ? AND(age > ? OR email IS NULL))//User user = new User();//user.setName("張三");//int result = userMapper.update(user, updateWrapper);//UPDATE t_user SET age=?,email=? WHERE (username LIKE ? AND (age > ? ORemail IS NULL))int result = userMapper.update(null, updateWrapper);System.out.println("result = " + result);}

    5.4 condition

    在真正開發的過程中,組裝條件是常見的功能,而這些條件數據來源于用戶輸入,是可選的,因此我們在組裝這些條件時,必須先判斷用戶是否選擇了這些條件,若選擇則需要組裝該條件,若沒有選擇則一定不能組裝,以免影響SQL執行的結果。

    思路一:

    @Testpublic void test09(){//定義查詢條件,有可能為null(用戶未輸入或未選擇)String username = null;Integer ageBegin = 20;Integer ageEnd = 30;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (age >= ? AND age <= ?)//StringUtils.isNotBlank()判斷某字符串是否不為空且長度不為0且不由空白符(whitespace)構成if(StringUtils.isNotBlank(username)){queryWrapper.like("user_name","a");}if (ageBegin != null){queryWrapper.ge("age",ageBegin);}if (ageEnd != null){queryWrapper.le("age",ageEnd);}List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

    思路2:

    上面的實現方案沒有問題,但是代碼比較復雜,我們可以使用帶condition參數的重載方法構建查詢條件,簡化代碼的編寫

    @Testpublic void test10(){String username = "a";Integer ageBegin = null;Integer ageEnd = 30;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age <= ?)queryWrapper.like(StringUtils.isNotBlank(username),"user_name","a").ge(ageBegin != null,"age",ageBegin).le(ageEnd != null,"age",ageEnd);List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

    5.5 LambdaQueryWrapper

    @Testpublic void test11(){String username = "a";Integer ageBegin = null;Integer ageEnd = 30;LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age <= ?)queryWrapper.like(StringUtils.isNotBlank(username),User::getName,"a").ge(ageBegin != null,User::getAge,ageBegin).le(ageEnd != null,User::getAge,ageEnd);List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);}

    5.6 LambdaUpdateWrapper

    @Testpublic void test12(){//將用戶名中包含有a并且(年齡大于20或郵箱為null)的用戶信息修改// 組裝set子句以及修改條件LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();/*合在一起updateWrapper.set(User::getAge, 18).set(User::getEmail, "user@atguigu.com").like(User::getName, "a").and(i -> i.lt(User::getAge, 24).or().isNull(User::getEmail));*///分開寫updateWrapper.like(User::getName, "a").and(i -> i.lt(User::getAge, 24).or().isNull(User::getEmail));updateWrapper.set(User::getName,"小黑").set(User::getEmail,"abc@atguigu.com");User user = new User();int result = userMapper.update(user, updateWrapper);System.out.println("受影響的行數:" + result);}

    六、插件

    6.1 分頁插件

    MyBatis Plus自帶分頁插件,只要簡單的配置即可實現分頁功能。

    6.1.1 添加配置

    <!--使用mybatisplus--><bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><!--指定mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--指定mapper.xml--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/><!--裝配數據源--><property name="dataSource" ref="dataSource"/><!--設置mybatisplus的全局配置,即表的前綴--><property name="globalConfig" ref="globalConfig"></property><!--配置插件--><property name="plugins"><array><ref bean="mybatisPlusInterceptor"></ref></array></property></bean><!--配置MyBatis-Plus插件--><bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="interceptors"><list><ref bean="paginationInnerInterceptor"></ref></list></property></bean><!--配置Mybatis-plus分頁插件的bean--><bean id="paginationInnerInterceptor" class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"><!--設置數據庫類型--><property name="dbType" value="MYSQL"></property></bean>

    6.1.2 測試

    @Testpublic void testPage(){//設置分頁參數Page<User> page = new Page<>(2,3);userMapper.selectPage(page,null);List<User> list = page.getRecords();list.forEach(System.out::println);System.out.println("每頁顯示的條數:"+page.getSize());System.out.println("總記錄數:"+page.getTotal());System.out.println("總頁數:"+page.getPages());System.out.println( "當前頁:" + page.getCurrent());System.out.println("是否有下一頁:" + page.hasNext());System.out.println("是否有上一頁:" + page.hasPrevious());}

    測試結果:
    User(id=1, name=Jone, age=18, email=test1@baomidou.com, isDeleted=0) User(id=2,name=Jack, age=20, email=test2@baomidou.com, isDeleted=0) User(id=3, name=Tom,age=28, email=test3@baomidou.com, isDeleted=0) User(id=4, name=Sandy, age=21,email=test4@baomidou.com, isDeleted=0) User(id=5, name=Billie, age=24, email=test5@baomidou.com, isDeleted=0) 當前頁:1 每頁顯示的條數:5 總記錄數:17 總頁數:4 是否有上一
    頁:false 是否有下一頁:true

    6.2 xml自定義分頁

    6.2.1 UserMapper中定義接口方法

    /*** 根據年齡查詢用戶列表,分頁顯示* @param page 分頁對象,xml中可以從里面進行取值,傳遞參數 Page 即自動分頁,必須放在第一位* @param age 年齡* @return*/IPage<User> selectPageVo(@Param("page") Page<User> page , @Param("age") Integer age);}

    6.2.2 UserMapper.xml中編寫SQL

    <!--IPage<User> selectPageVo(@Param("page") Page<User> page , @Param("age") Integer age);--><select id="selectPageVo" resultType="User">select uid,user_name,age,email from t_user where age > #{age}</select>

    6.2.3 測試

    @Testpublic void testPageVo(){Page<User> page = new Page<>(1,5);//第一頁索引為1,不是0userMapper.selectPageVo(page,20);List<User> list = page.getRecords();list.forEach(System.out::println);System.out.println("每頁顯示的條數:"+page.getSize());System.out.println("總記錄數:"+page.getTotal());System.out.println("總頁數:"+page.getPages());System.out.println( "當前頁:" + page.getCurrent());System.out.println("是否有下一頁:" + page.hasNext());System.out.println("是否有上一頁:" + page.hasPrevious());}

    結果:
    User(id=3, name=Tom, age=28, email=test3@baomidou.com, isDeleted=null)
    User(id=4,name=Sandy, age=21,email=test4@baomidou.com, isDeleted=null) User(id=5, name=Billie,age=24, email=test5@baomidou.com, isDeleted=null) User(id=8,name=ybc1, age=21,email=null, isDeleted=null)
    User(id=9, name=ybc2, age=22,email=null, isDeleted=null)
    當前頁:1 每頁顯示的條數:5 總記錄數:12 總頁數:3 是否有上一頁:false 是否有下一頁:true

    6.3 樂觀鎖

    6.3.1 場景

    一件商品,成本價是80元,售價是100元。老板先是通知小李,說你去把商品價格增加50元。小李正在玩游戲,耽擱了一個小時。正好一個小時后,老板覺得商品價格增加到150元,價格太高,可能會影響銷量。又通知小王,你把商品價格降低30元。
    此時,小李和小王同時操作商品后臺系統。小李操作的時候,系統先取出商品價格100元;小王也在操作,取出的商品價格也是100元。小李將價格加了50元,并將100+50=150元存入了數據
    庫;小王將商品減了30元,并將100-30=70元存入了數據庫。是的,如果沒有鎖,小李的操作就完全被小王的覆蓋了。
    現在商品價格是70元,比成本價低10元。幾分鐘后,這個商品很快出售了1千多件商品,老板虧1萬多。

    6.3.2 樂觀鎖與悲觀鎖

    上面的故事,如果是樂觀鎖,小王保存價格前,會檢查下價格是否被人修改過了。如果被修改過了,則重新取出的被修改后的價格,150元,這樣他會將120元存入數據庫。
    如果是悲觀鎖,小李取出數據后,小王只能等小李操作完之后,才能對價格進行操作,也會保證最終的價格是120元。

    6.3.3 模擬修改沖突

    a>數據庫中增加商品表

    CREATE TABLE t_product ( id BIGINT(20) NOT NULL COMMENT '主鍵ID', NAME VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名稱', price INT(11) DEFAULT 0 COMMENT '價格', VERSION INT(11) DEFAULT 0 COMMENT '樂觀鎖版本號', PRIMARY KEY (id) );

    b>添加數據

    INSERT INTO t_product (id, NAME, price) VALUES (1, '外星人筆記本', 100);

    c>添加實體

    */@Data public class Product {private Long id;private String name;private Integer price;}

    d>添加mapper

    public interface ProductMapper extends BaseMapper<Product> {}

    f>測試

    @Testpublic void testProduct01(){//小李查詢價格Product productLi = productMapper.selectById(1);System.out.println("小李查詢的商品價格:" + productLi.getPrice());//小王查詢價格Product productWang = productMapper.selectById(1);System.out.println("小王查詢的商品價格:" + productWang.getPrice());//小李將商品價格+50productLi.setPrice(productLi.getPrice() + 50);productMapper.updateById(productLi);//小王將商品價格-30productWang.setPrice(productWang.getPrice() - 30);int result = productMapper.updateById(productWang);//老板查詢商品價格Product productBoss = productMapper.selectById(1);System.out.println("老板查詢的商品價格為:" + productBoss.getPrice());}

    6.3.4 樂觀鎖實現流程

    數據庫中添加version字段
    取出記錄時,獲取當前version

    SELECT id,`name`,price,`version` FROM product WHERE id=1

    更新時,version + 1,如果where語句中的version版本不對,則更新失敗

    UPDATE product SET price=price+50, `version`=`version` + 1 WHERE id=1 AND `version`=1

    6.3.5 Mybatis-Plus實現樂觀鎖

    [1]修改實體類

    */@Data public class Product {private Long id;private String name;private Integer price;@Versionprivate Integer version;}

    [2]添加樂觀鎖插件配置

    <!--配置MyBatis-Plus插件--><bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="interceptors"><list><ref bean="paginationInnerInterceptor"></ref><ref bean="optimisticLockerInnerInterceptor"></ref></list></property></bean><!--配置樂觀鎖插件--><bean id="optimisticLockerInnerInterceptor" class="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor"></bean>

    [3] 測試修改沖突

    小李查詢商品信息:
    SELECT id,name,price,version FROM t_product WHERE id=?
    小王查詢商品信息:
    SELECT id,name,price,version FROM t_product WHERE id=?
    小李修改商品價格,自動將version+1
    UPDATE t_product SET name=?, price=?, version=? WHERE id=? AND version=?
    Parameters: 外星人筆記本(String), 150(Integer), 1(Integer), 1(Long), 0(Integer)
    小王修改商品價格,此時version已更新,條件不成立,修改失敗
    UPDATE t_product SET name=?, price=?, version=? WHERE id=? AND version=?
    Parameters: 外星人筆記本(String), 70(Integer), 1(Integer), 1(Long), 0(Integer)
    最終,小王修改失敗,查詢價格:150
    SELECT id,name,price,version FROM t_product WHERE id=?

    [4]優化流程

    @Testpublic void testProduct01(){//小李查詢價格Product productLi = productMapper.selectById(1);System.out.println("小李查詢的商品價格:" + productLi.getPrice());//小王查詢價格Product productWang = productMapper.selectById(1);System.out.println("小王查詢的商品價格:" + productWang.getPrice());//小李將商品價格+50productLi.setPrice(productLi.getPrice() + 50);productMapper.updateById(productLi);//小王將商品價格-30productWang.setPrice(productWang.getPrice() - 30);int result = productMapper.updateById(productWang);if (result == 0){//操作失敗,重試Product productNew = productMapper.selectById(1);productNew.setPrice(productNew.getPrice() - 30);productMapper.updateById(productNew);}//老板查詢商品價格Product productBoss = productMapper.selectById(1);System.out.println("老板查詢的商品價格為:" + productBoss.getPrice());}

    七 、通用枚舉

    表中的有些字段值是固定的,例如性別(男或女),此時我們可以使用MyBatis-Plus的通用枚舉來實現。

    7.1 數據庫添加字段sex

    7.2 創建通用枚舉

    */@Getter public enum SexEnum {MALE(1,"男"),FEMALE(2,"女");@EnumValue //將注解所標識的屬性的值存儲到數據庫中private Integer sex;private String sexName;SexEnum(Integer sex, String sexName) {this.sex = sex;this.sexName = sexName;} }

    7.3 配置掃描通用枚舉

    <!--使用mybatisplus--><bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><!--指定mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--指定mapper.xml--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/><!--裝配數據源--><property name="dataSource" ref="dataSource"/><!--設置mybatisplus的全局配置,即表的前綴--><property name="globalConfig" ref="globalConfig"></property><!--配置掃描通用枚舉--><property name="typeEnumsPackage" value="com.atguigu.mybatisplus.enums"></property><!--配置插件--><property name="plugins"><array><ref bean="mybatisPlusInterceptor"></ref></array></property></bean>

    7.4 測試

    @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class MyBatisPlusEnumTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testSexEnum(){User user = new User();user.setName("Enum");user.setAge(20);//設置性別信息為枚舉項,會將@EnumValue注解所標識的屬性值存儲到數據庫// INSERT INTO t_user ( user_name, age, sex, is_deleted ) VALUES ( ?, ?, ?, ? )user.setSex(SexEnum.MALE);userMapper.insert(user);}

    八、代碼生成器

    8.1 引入依賴

    <!--代碼生成器逆向工程依賴--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version></dependency><!--代碼生成器中 freemarker引擎模板需要這個依賴--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency>

    8.2 快速生成

    public class FastAutoGeneratorTest {public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false","root", "5864@WCY").globalConfig(builder -> {builder.author("atguigu") // 設置作者// .enableSwagger() // 開啟 swagger 模式.fileOverride() // 覆蓋已生成文件.outputDir("F://JAVA listen//code//mybatis_plus"); // 指定輸出目錄}).packageConfig(builder -> {builder.parent("com.atguigu") // 設置父包名.moduleName("mybatisplus") // 設置父包模塊名.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "F://JAVA listen//code//mybatis_plus"));// 設置mapperXml生成路徑}).strategyConfig(builder -> {builder.addInclude("t_user") // 設置需要生成的表名.addTablePrefix("t_", "c_"); // 設置過濾表前綴}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker 引擎模板,默認的是Velocity引擎模板.execute();}}

    九 、MyBatisX插件

    MyBatis-Plus為我們提供了強大的mapper和service模板,能夠大大的提高開發效率。
    但是在真正開發過程中,MyBatis-Plus并不能為我們解決所有問題,例如一些復雜的SQL,多表聯查,我們就需要自己去編寫代碼和SQL語句,我們該如何快速的解決這個問題呢,這個時候可以使用MyBatisX插件。
    MyBatisX一款基于 IDEA 的快速開發插件,為效率而生。

    MyBatisX插件用法:https://baomidou.com/pages/ba5b24/

    9.1 安裝插件

    安裝方法:打開 IDEA,進入 File -> Settings -> Plugins -> Browse Repositories,輸入 mybatisx 搜索并安裝

    9.2 功能

    9.2.1 XML跳轉

    當mapper映射文件和mapper很多的時候,可以快速定位并跳轉到對應的類容上。

    9.2.2 快速生成代碼

    [1]首先需要在datasource中進行配置

    [2] 選擇驅動

    [3]可以直接選擇舊版本的驅動,或者按提示下載

    [4] 登錄后選擇數據庫、表,然后點擊右鍵選擇mybatisx。


    [5] 表的基本配置

    [6] 生成的基本配置

    [7]選擇好后會自動幫我們生成各種組件

    [8]如果我們要自定義查詢功能,我們只需要在mapper中寫我們的方法名,插件會自動幫助我們補全方法名并且快速生成相對應的sql語句放在mapper映射文件中。

    十、總結

    mybatsi-plus可以快速幫助我們完成spring和mybatsi的整合及搭建功能。

    總結

    以上是生活随笔為你收集整理的MyBatis_Plus(Spring版本笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

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