日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis(笔记)

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis(笔记) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sVjVvSsH-1609421261302)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230155751713.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-T7eTtpZo-1609421261311)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230155810111.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OR4rnozx-1609421261314)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230155900100.png)]

基礎知識

JDBC Mysql Java基礎 Maven Junit

框架:是有配置文件的。最好的方式:看官網文檔

簡介

什么是 MyBatis?

MyBatis 是一款優秀的持久層框架 它支持定制化 SQL、存儲過程以及高級映射。 MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。 MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。

如何獲得MyBatis?

Maven倉庫<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version> </dependency>github:https://github.com/mybatis/mybatis-3/releases中文文檔:https://mybatis.org/mybatis-3/zh/index.html

1.2、持久化

數據持久化

持久化就是將程序的數據在持久狀態和瞬時狀態轉化的過程 內存:斷電即失 數據庫(JDBC),io文件持久化。 生活:冷藏、罐頭。

為什么需要持久化?

有一些對象,不能讓他丟掉。

1.3、持久層

Dao層、Service層、Controller層…

完成持久化工作的代碼塊 層界限十分明顯

為什么需要Mybatis?

幫助程序員將數據存入到數據庫中。方便傳統的JDBC代碼太復雜了。簡化、框架、自動化。不用Mybatis也可以。更容易上手。技術沒有高低之分優點:簡單易學靈活sql和代碼的分離,提高了可維護性。提供映射標簽,支持對象與數據庫的orm字段關系映射提供對象關系映射標簽,支持對象關系組建維護提供xml標簽,支持編寫動態sql。

最重要的一點:使用的人多!

Spring SpringMVC SpringBoot

第一個Mybatis程序

思路:搭建環境–>導入Mybatis–>編寫代碼–>測試!

搭建環境

搭建數據庫

CREATE DATABASE mybatis;
use mybatis;
CREATE TABLE user(
id INT(20) not null PRIMARY KEY,
name VARCHAR(30) DEFAULT NULL,
pwd VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO user (id,name,pwd) VALUES
(1,‘狂神’,‘123456’),
(2,‘張三’,‘123456’),
(3,‘李四’,‘123890’)

新建項目

新建一個普通的maven項目 刪除src目錄 導入maven依賴 <?xml version="1.0" encoding="UTF-8"?>

4.0.0

<!--父工程--> <groupId>com.rui</groupId> <artifactId>MyBatis-Study</artifactId> <version>1.0-SNAPSHOT</version><!--導入依賴--> <dependencies><!--mysql驅動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.17</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency> </dependencies><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources> </build>

創建一個模塊

&amp xml

編寫mybatis的核心需要轉義配置文件<?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><!--environments配置環境組--><!--default默認環境--><environments default="development"><!--environment單個環境--><environment id="development"><!--transactionManager配置事務管理器--><transactionManager type="JDBC"/><!--配置連接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UFT-8"/><property name="username" value="root"/><property name="password" value="Cc105481"/></dataSource></environment></environments></configuration>

編寫mybatis工具類

package com.rui.utils;import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException; import java.io.InputStream;//sqlSessionFactory—>SessionFactory public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try{ //使用mybatis第一步、獲取sqlSessionFactory對象 String resource = “mybatis-config.xml”; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }catch(IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顧名思義,我們就可以從中獲得 SqlSession 的實例了。 // SqlSession 完全包含了面向數據庫執行 SQL 命令所需的所有方法。 // 你可以通過 SqlSession 實例來直接執行已映射的 SQL 語句。 public static SqlSession getSqlSession(){return sqlSessionFactory.openSession(); } }

編寫代碼

實體類package com.rui.pojo;public class user {private int id;private String name;private String pwd;public user() {}public user(int id, String name, String pwd) {this.id = id;this.name = name;this.pwd = pwd;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "user{" +"id=" + id +", name='" + name + '\'' +", pwd='" + pwd + '\'' +'}';} }Dao接口package com.rui.dao;import com.rui.pojo.User;import java.util.List;public interface UserDao {List<User> getUserList(); }接口實現類由原來的UserImpl轉變為一個Mapper配置文件 <?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.kuang.dao.UserDAo"> <select id="getUserList" resultType="com.kuang.pojo.User"> select * from mybatis.user </select> </mapper>

2.4、測試

注意點:

org.apache.ibatis.binding.BindingException: Type interface com.rui.dao.UserDao is not known to the MapperRegistry.

MapperRegistry是什么?

核心配置文件中注冊mappers

junit測試package com.rui;import com.rui.dao.UserDao; import com.rui.pojo.User; import com.rui.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test;import java.util.List;public class UserDaoTest {@Testpublic void test(){//第一步:獲得SqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserDao mapper = sqlSession.getMapper(UserDao.class);List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}//關閉SqlSessionsqlSession.close();} }可能會遇到的問題:配置文件沒有注冊綁定接口錯誤方法名不對返回類型不對Maven導出資源問題

CRUD

namespace

namespace中的包名要和Dao/mapper接口的包名保持一致

select

選擇查詢語句;

id:就是對應的namespace中的方法名; resultType:Sql語句執行的返回值! parameterType:參數類型!編寫接口package com.rui.dao;import com.rui.pojo.User;import java.util.List;public interface UserMapper {//根據id查詢用戶User getUserById(int id); }編寫對應的mapper中的sql語句<select id="getUserById" resultType="com.rui.pojo.User" parameterType="int">/*定義sql*/select * from mybatis.user where id = #{id};</select>測試@Testpublic void getUserById(){SqlSession sqlSession = MyBatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUserById(1);System.out.println(user);sqlSession.close();}

Insert

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sgtpnsff-1609421261322)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230191728648.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HtENm566-1609421261324)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230191959575.png)]

Update

Delete

注意點:增刪改需要提交事務

分析錯誤

標簽不要匹配錯誤 resource綁定mapper,需要使用路徑! 程序配置文件必須符合規范 NullPointerException,沒有注冊到資源 輸出的xml文件中存在中文亂碼問題 maven資源沒有導出問題

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4sqxOFdI-1609421261325)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230192720390.png)]

萬能Map

假設,我們的實體類,或者數據庫中的表,字段或者參數過多,我們應當考慮使用Map!

//萬能Map
int addUser2(Map<String,Object> map);

<!--對象中的屬性,可以直接取出來 parameterType=傳遞map中的key--> <insert id="addUser2" parameterType="map">insert into mybatis.user (id, name, pwd) values (#{userId},#{userName},#{password}); </insert>int addUser2(Map<String,Object> map);

//萬能map
@Test
public void addUser2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put(“userId”,4);
map.put(“userName”,“王五”);
map.put(“password”,“23333”);
mapper.addUser2(map);
//提交事務
sqlSession.commit();
sqlSession.close();
}

Map傳遞參數,直接在sql中取出key即可!【parameterType=“map”】

對象傳遞參數,直接在sql中取對象的屬性即可!【parameterType=“Object”】

只有一個基本類型參數的情況下,可以直接在sql中取到!

多個參數用Map,或者注解!

思考

模糊查詢怎么寫?

Java代碼執行的時候傳遞通配符%%List<User> userList=mapper.getUserLike("%李%");在sql拼接中使用通配符!select * from mybatis.user where name like "%"#{value}"%"

mybatis解決 1 字節的 UTF-8 序列的字節 1 無效

xmls上的utf-8變為utf8

配置解析xml

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SXCE1SQr-1609421261327)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230203824739.png)]

核心配置文件

mybatis-config.xml MyBatis的配置文件包含了會深深影響MyBatis行為的設置和屬性信息

configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)

環境配置(environments)

MyBatis 可以配置成適應多種環境

不過要記住:盡管可以配置多個環境,但每個 SqlSessionFactory 實例只能選擇一種環境。

學會使用配置多套運行環境!

MyBatis默認的事務管理器就是JDBC,連接池:POOLED

屬性(properties)

我們可以通過properties屬性來實現引用配置文件

這些屬性都是可外部配置且可動態替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來傳遞。【db.properties】

編寫一個配置文件

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?
useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=Cc105481

在核心配置文件中引入

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XOIjXGPl-1609421261328)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201230211034703.png)]

<properties resource="db.properties"><property name="username" value="root"/><property name="password" value="Cc105481"/> </properties>可以直接引入外部文件 可以在其中增加一些屬性配置 如果兩個文件有同一字段,優先使用外部配置文件的!

類型別名(typeAliases)

類型別名是為 Java 類型設置一個短的名字。存在的意義僅在于用來減少類完全限定名的冗余。1. <!--可以給實體類起別名--><typeAliases><typeAlias type="com.rui.pojo.User" alias="User"/></typeAliases>也可以指定一個包名,MyBatis 會在包名下面搜索需要的 Java Bean,比如:2.掃描實體類的包,他的默認別名就為這個類的類名,首字母小寫!<!--可以給實體類起別名--><typeAliases><package name="com.rui.pojo"/></typeAliases>

在實體類比較少的時候,使用第一種方式。

如果實體類十分多,建議使用第二種方式。

第一種可以DIY別名,第二種則不行,如果非要改,需要在實體類(pojo)上增加@Alias注解

@Alias(“author”)
public class Author {

}

映射器(mappers)

MapperRegistry:注冊綁定我們的Mapper文件;

方式一: 【推薦使用】

<!--每一個Mapper.XML都需要在Mybatis核心配置文件中注冊!--> <mappers><mapper resource="com/kuang/dao/UserMapper.xml"/> </mappers>

方式二:使用class文件綁定注冊

<!--每一個Mapper.XML都需要在Mybatis核心配置文件中注冊!--> <mappers><mapper class="com.kuang.dao.UserMapper"/> </mappers>

注意點:

  • 接口和他的Mapper配置文件必須同名!
  • 接口和他的Mapper配置文件必須在同一個包下!

方式三:使用掃描包進行注入綁定

<!--每一個Mapper.XML都需要在Mybatis核心配置文件中注冊!--> <mappers><package name="com.kuang.dao"/> </mappers>

注意點:

  • 接口和他的Mapper配置文件必須同名!
  • 接口和他的Mapper配置文件必須在同一個包下!

練習時間:

  • 將數據庫配置文件外部引入
  • 實體類別名
  • 保證UserMapper 接口 和 UserMapper .xml 改為一致!并且放在同一個包下!

生命周期和作用域

生命周期,和作用域是至關重要的,因為錯誤的使用會導致非常嚴重的并發問題。


SqlSessionFactoryBuilder

一旦創建了SqlSessionFactory,就不再需要它了 局部變量

mybatis運行流程SqlSessionFactory:

可以想象為:數據庫連接池 SqlSessionFactory 一旦被創建就應該在應用的運行期間一直存在,沒有任何理由丟棄它或重新創建另一個實例。 因此SqlSessionFactory的最佳作用域是應用作用域。

SqlSession

連接到連接池的一個請求!SqlSession 的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。用完之后需要趕緊關閉,否則會占用資源SqlSessionFactory

這里的每一個Mapper,就代表一個具體的業務!

xml vs db.properties

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> url=jdbc:mysql://localhost:3306/mybatis? useSSL=true&useUnicode=true&characterEncoding=utf8

解決屬性名和字段名不一致的問題

1、問題

數據庫中的字段

數據庫中的字段

新建一個項目,拷貝之前的,測試實體類字段不一致的情況。

public class User {
private int id;
private String name;
private String pwd;
}

測試錯誤

//select * from mybatis.user where id = #{id}
//類型處理器
//select id,name,pwd from mybatis.user where id = #{id}

解決方法:

起別名

select id,name,pwd as password from mybatis.user where id = #{id}

2、resultMap

結果集映射

id name pwd
id name password

<resultMap id="UserMap" type="User"><!--column數據庫中的字段,property實體類中的屬性-->// <result column="id" property="id"/>// <result column="name" property="name"/><result column="pwd" property="password"/> </resultMap> <select id="getUserById" resultMap="UserMap" parameterType="int">/*定義sql*/select * from mybatis.user where id = #{id};resultMap 元素是 MyBatis 中最重要最強大的元素 ResultMap 的設計思想是,對于簡單的語句根本不需要配置顯式的結果映射,而對于復雜一點的語句只需要描述它們的關系就行了。 ResultMap 最優秀的地方在于,雖然你已經對它相當了解了,但是根本就不需要顯式地用到他們。 如果世界總是這么簡單就好了。

日志

日志工廠

如果一個數據庫操作,出現了異常,我們需要排錯。日志就是最好的助手!

曾經:sout、debug

現在:日志工廠

日志


SLF4J
LOG4J【掌握】
LOG4J2
JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING【掌握】
NO_LOGGING

在Mybatis中具體使用那個日志實現,在設置中設定!

STDOUT_LOGGING標準日志輸出(控制臺)


在mybatis核心配置文件中,配置我們的日志!

日志配置

<settings><setting name="logImpl" value="STDOUT_LOGGING"/> </settings>

Log4j

什么叫log4j

Log4j是Apache的一個開源項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件 我們也可以控制每一條日志的輸出格式 通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。 通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。

1.先導入log4j的包

<dependencies><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency> </dependencies>

2.log4j.properties

#將等級為DEBUG的日志信息輸出到console和file這兩個目的地,console和file的定義在下面的代碼 log4j.rootLogger=DEBUG,console,file#控制臺輸出的相關設置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n#文件輸出的相關設置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n#日志輸出級別 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG

3.配置log4j為日志實現

<settings><setting name="logImpl" value="LOG4J"/> </settings>

4.log4j的使用!直接測試運行剛才的查詢

DEBUG [main] (LogFactory.java:105) - Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl’ adapter.
DEBUG [main] (LogFactory.java:105) - Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl’ adapter.
DEBUG [main] (PooledDataSource.java:353) - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] (PooledDataSource.java:353) - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] (PooledDataSource.java:353) - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] (PooledDataSource.java:353) - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] (JdbcTransaction.java:136) - Opening JDBC Connection
Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
DEBUG [main] (PooledDataSource.java:424) - Created connection 2049051802.
DEBUG [main] (JdbcTransaction.java:100) - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a220c9a]
DEBUG [main] (BaseJdbcLogger.java:143) - ==> Preparing: /定義sql/ select * from mybatis.user where id = ?;
DEBUG [main] (BaseJdbcLogger.java:143) - > Parameters: 1(Integer)
DEBUG [main] (BaseJdbcLogger.java:143) - < Total: 1
User{id=1, name=‘狂神’, password=‘123456’}
DEBUG [main] (JdbcTransaction.java:122) - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a220c9a]
DEBUG [main] (JdbcTransaction.java:90) - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7a220c9a]
DEBUG [main] (PooledDataSource.java:381) - Returned connection 2049051802 to pool.

Disconnected from the target VM, address: ‘127.0.0.1:58296’, transport: ‘socket’

Process finished with exit code 0

簡單使用

在要使用Log4j 的類中,導入org.apache.log4j.Logger;日志對象,加載參數為當前類的classstatic Logger logger = Logger.getLogger(UserDaoTest.class);日志級別logger.info("info:進入了testLog4j方法"); logger.debug("debug:進入了testLog4j"); logger.error("error:進入了testLog4j");

分頁

思考:為什么要分頁?

減少數據的處理量

使用Limit分頁

select * from user limit startIndex,pageSize

使用Mybatis實現分頁,核心SQL

接口//分頁 List<User> getUserByLimit(Map<String,Integer> map);Mapper.xml<!--分頁--> <select id="getUserByLimit" parameterType="map" resultMap="UserMap">select * from mybatis.user limit #{startIndex},#{pageSize} </select>測試@Testpublic void getUserByLimit(){SqlSession sqlSession = MyBatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);HashMap<String, Integer> map = new HashMap<>();map.put("startIndex",0);map.put("pageSize",2);List<User> userList = mapper.getUserByLimit(map);for (User user : userList) {System.out.println(user);}sqlSession.close(); }

RowBounds分頁

不再使用SQL實現分頁

  • 接口

    List<User> getUserByRowBounds();mapper.xml<!--分頁2--><select id="getUserByRowBounds" resultMap="UserMap">select * from mybatis.user</select>測試@Testpublic void getUserByRowBounds(){SqlSession sqlSession = MyBatisUtils.getSqlSession();//RowBounds實現RowBounds rowBounds = new RowBounds(1, 2);//通過java代碼層面實現分頁List<User> userList = sqlSession.selectList("com.rui.dao.UserMapper.getUserByRowBounds",null,rowBounds);for (User user : userList) {System.out.println(user);}sqlSession.close();}
  • 分頁插件

    了解即可,萬一以后公司的架構師,說要使用,只需要知道它是什么東西!

    安裝插件

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QS8r53Ae-1609421261332)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231111258418.png)]

    使用注解開發

    面向接口編程的根本原因:解耦,可拓展,提高復用,分層開發中、上層不用管具體的實現,大家都遵守共同的標準,使得開發變得容易,規范性好
    8.2、使用注解開發

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version> </dependency>

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3mw7qTNR-1609421261335)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231112107709.png)]

    注解在接口上實現@Select(value = "select * from user") List<User> getUsers();需要在核心配置文件中綁定接口!<!--綁定接口--> <mappers><mapper class="rui.dao.UserMapper"/> </mappers>測試

    public class UserMapperTest {
    @Test
    public void test(){
    SqlSession sqlSession = MyBatisUtils.getSqlSession();
    //底層主要應用反射
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List users = mapper.getUsers();
    for (User user : users) {
    System.out.println(user);
    }
    sqlSession.close();
    }
    }

    本質:反射機制實現

    底層:動態代理!

    CRUD

    我們可以在工具類創建的時候實現自動提交事務!

    public static SqlSession getSqlSession(){
    return sqlSessionFactory.openSession(true);
    }

    編寫接口,增加注解

    public interface UserMapper { @Select(value = “select * from user”) List getUsers();//方法存在多個參數,所有的參數前面必須加上@Param注解 @Select("select * from user where id = #{id} or name = #{name}") User getUserByID(@Param("id")int id,@Param("name")String name);@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})") int addUser(User user);@Update("update user set name = #{name},pwd = #{password} where id = #{id}") int updateUser(User user);@Delete("delete from user where id = #{uid}") int deleteUser(@Param("uid") int id);}

    測試類

    【注意:我們必須要將接口注冊綁定到我們的核心配置文件中!】

    關于@Param()注解

    基本類型的參數或者String類型,需要加上 引用類型不需要加 如果只有一個基本類型的話,可以忽略,但是建議大家都加上 我們在SQL中引用的就是我們這里的@Param()中設定的屬性名

    #{} ${}區別

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-j1MisDUH-1609421261336)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231004542662.png)]

    Lombok

    Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
    Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

    使用步驟:

    在IDEA中安裝Lombok插件在項目中導入lombok的jar包<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency>在實體類上加注解即可

    @Getter and @Setter
    @FieldNameConstants
    @ToString
    @EqualsAndHashCode
    @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
    @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
    @Data
    @Builder
    @SuperBuilder
    @Singular
    @Delegate
    @Value
    @Accessors
    @Wither
    @With
    @SneakyThrows
    @val
    @var
    experimental @var
    @UtilityClass
    Lombok config system

    說明:

    @Data:無參構造,get、set、toSring、hashcode、equals
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    @EqualsAndHashCode

    多對一處理

    多對一:

    多個學生,對應一個老師 對于學生這邊而言,關聯...多個學生,關聯一個老師【多對一】 對于老師而言,集合,一個老師又很多學生【一對多】

    SQL:

    CREATE TABLE `teacher`( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(`id`,`name`) VALUES (1,'秦老師');CREATE TABLE `student`( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, `tid` INT(10) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fktid`(`tid`), CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO student(`id`,`name`,`tid`) VALUES (1,'小明',1); INSERT INTO student(`id`,`name`,`tid`) VALUES (2,'小紅',1); INSERT INTO student(`id`,`name`,`tid`) VALUES (3,'小張',1); INSERT INTO student(`id`,`name`,`tid`) VALUES (4,'小李',1); INSERT INTO student(`id`,`name`,`tid`) VALUES (5,'小王',1);

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cUcsgD1L-1609421261338)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231121234379.png)]

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zeeucWYK-1609421261344)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231122125396.png)]

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZndIVVbr-1609421261345)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231122747070.png)]

    測試環境

    導入lombok 新建實體類Teacher,Student 新建Mapper接口 建立Mapper.XML文件 在核心配置文件中綁定注冊我們的MApper接口或者文件!【方式很多,隨意選】 測試查詢是否成功!

    按照查詢嵌套處理

    select * from student select * from teacher where id = #{id}

    按照結果嵌套處理

    select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid=t.id;

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YnejrJb5-1609421261346)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231124701611.png)]

    按照查詢嵌套處理

    <!--思路:1. 查詢所有的學生信息2. 根據查詢出來的學生的tid,尋找對應的老師! 子查詢--><select id="getStudent" resultMap="StudentTeacher">select * from student </select><resultMap id="StudentTeacher" type="Student"><result property="id" column="id"/><result property="name" column="name"/><!--復雜的屬性,我們需要單獨處理 對象: association 集合: collection --><association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap><select id="getTeacher" resultType="Teacher">select * from teacher where id = #{id} </select>

    按照結果嵌套處理

    <!--按照結果嵌套處理--> <select id="getStudent2" resultMap="StudentTeacher2">select s.id sid,s.name sname,t.name tnamefrom student s,teacher twhere s.tid = t.id; </select><resultMap id="StudentTeacher2" type="Student"><result property="id" column="sid"/><result property="name" column="sname"/><association property="teacher" javaType="Teacher"><result property="name" column="tname"/></association> </resultMap>

    回顧Mysql 多對一查詢方式:

    • 子查詢
    • 聯表查詢

    項目名字不一致

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RyYNHSbm-1609421261351)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231130923162.png)]

    后面會多一個括號

    一對多處理

    比如:一個老師擁有多個學生!

    對于老師而言,就是一對多的關系!

    環境搭建

  • 環境搭建,和剛才一樣
  • 實體類

    @Data public class Student {private int id;private String name;private int tid;} @Data public class Teacher {private int id;private String name;//一個老師擁有多個學生private List<Student> students; }

    按照結果嵌套處理

    Teacher getTeacher(@Param("tid")int id); <!--按結果嵌套查詢--><select id="getTeacher" resultMap="TeacherStudent">select s.id sid, s.name sname, t.name tname,t.id tidfrom student s,teacher twhere s.tid = t.id and t.id = #{tid}</select><resultMap id="TeacherStudent" type="Teacher"><result property="id" column="tid"/><result property="name" column="tname"/><!--復雜的屬性,我們需要單獨處理 對象: association 集合: collectionjavaType="" 指定屬性的類型!集合中的泛型信息,我們使用ofType獲取--><collection property="students" ofType="Student"><result property="id" column="sid"/><result property="name" column="sname"/><result property="tid" column="tid"/></collection></resultMap>

    按照查詢嵌套處理

    <select id="getTeacher2" resultMap="TeacherStudent2">select * from mybatis.teacher where id = #{tid} </select><resultMap id="TeacherStudent2" type="Teacher"><collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/> </resultMap><select id="getStudentByTeacherId" resultType="Student">select * from mybatis.student where tid = #{tid} </select>

    小結

  • 關聯 - association 【多對一】
  • 集合 - collection 【一對多】
  • javaType & ofType
  • JavaType 用來指定實體類中屬性的類型
  • ofType 用來指定映射到List或者集合中的 pojo類型,泛型中的約束類型!
  • 注意點:

    • 保證SQL的可讀性,盡量保證通俗易懂
    • 注意一對多和多對一中,屬性名和字段的問題!
    • 如果問題不好排查錯誤,可以使用日志 , 建議使用 Log4j

    慢SQL 1s 1000s

    面試高頻

    • Mysql引擎
    • InnoDB底層原理
    • 索引
    • 索引優化!

    動態SQL

    什么是動態SQL:動態SQL就是指根據不同的條件生成不同的SQL語句

    利用動態SQL這一特性可以徹底擺脫這種痛苦

    動態 SQL 元素和 JSTL 或基于類似 XML 的文本處理器相似。在 MyBatis 之前的版本中,有很多元素需要花時間了解。MyBatis 3 大大精簡了元素種類,現在只需學習原來一半的元素便可。MyBatis 采用功能強大的基于 OGNL 的表達式來淘汰其它大部分元素。

    if choose (when, otherwise) trim (where, set) foreach

    搭建環境

    CREATE TABLE `bolg`( `id` VARCHAR(50) NOT NULL COMMENT '博客id', `title` VARCHAR(100) NOT NULL COMMENT '博客標題', `author` VARCHAR(30) NOT NULL COMMENT '博客作者', `creat_time` DATETIME NOT NULL COMMENT '創建時間', `views` INT(30) NOT NULL COMMENT '瀏覽量' )ENGINE=INNODB DEFAULT CHARSET=utf8

    創建一個基礎工程

    導包編寫配置文件編寫實體類@Data public class Blog {private int id;private String title;private String author;private Date creatTime;//用utilprivate int views; }編寫實體類對應的Mapper接口和Mapper.xml

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-llp41rd9-1609421261356)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231164121408.png)]

    <setting name="mapUnderscoreToCamelCase" value="true"/>

    IF

    <select id="queryBlogIF" parameterType="map" resultType="blog">select * from mybatis.blog where 1=1<if test="title != null">and title = #{title}</if><if test="author != null">and author = #{author}</if> </select>

    choose (when, otherwise)

    能自動去掉and

    <select id="queryBlogChoose" parameterType="map" resultType="blog">select * from mybatis.blog<where><choose><when test="title != null">title = #{title}</when><when test="author != null">and author = #{author}</when><otherwise>and views = #{views}</otherwise></choose></where></select>

    trim (where,set)

    select * from mybatis.blog <where><if test="title != null">title = #{title}</if><if test="author != null">and author = #{author}</if> </where> <update id="updateBlog" parameterType="map">update mybatis.blog<set><if test="title != null">title = #{title},</if><if test="author != null">author = #{author}</if></set>where id = #{id} </update>

    所謂的動態SQL,本質還是SQL語句 , 只是我們可以在SQL層面,去執行一個邏輯代碼

    if

    where , set , choose ,when

    SQL片段

    有的時候,我們可能會將一些功能的部分抽取出來,方便復用!

  • 使用SQL標簽抽取公共的部分

    <sql id="if-title-author"><if test="title != null">title = #{title}</if><if test="author != null">and author = #{author}</if> </sql>
  • 在需要使用的地方使用Include標簽引用即可

    <select id="queryBlogIF" parameterType="map" resultType="blog">select * from mybatis.blog<where><include refid="if-title-author"></include></where> </select>
  • 注意事項:

    • 最好基于單表來定義SQL片段!
    • 不要存在where標簽

    Foreach

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XfGDnG3j-1609421261358)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231192208358.png)]

    select * from user where 1=1 and <foreach item="id" collection="ids"open="(" separator="or" close=")">#{id}</foreach>(id=1 or id=2 or id=3) <!--select * from mybatis.blog where 1=1 and (id=1 or id = 2 or id=3)我們現在傳遞一個萬能的map , 這map中可以存在一個集合! --> <select id="queryBlogForeach" parameterType="map" resultType="blog">select * from mybatis.blog<where><foreach collection="ids" item="id" open="and (" close=")" separator="or">id = #{id}</foreach></where></select>

    動態SQL就是在拼接SQL語句,我們只要保證SQL的正確性,按照SQL的格式,去排列組合就可以了

    建議:

    • 現在Mysql中寫出完整的SQL,再對應的去修改成為我們的動態SQL實現通用即可!

    緩存簡介

    查詢 : 連接數據庫,耗資源!
    一次查詢的結果,給他暫存在一個可以直接取到的地方!—>內存 : 緩存

    我們再次查詢相同數據的時候,直接走緩存,就不用走數據庫了

    什么事緩存[Cache]?存在內存中的臨時數據。將用戶經常查詢的數據放在緩存(內存)中,用戶去查詢數據就不用從磁盤上(關系型數據庫數據文件)查詢,從緩存中查詢,從而提高查詢效率,解決了高并發系統的性能問題。為什么使用緩存?減少和數據庫的交互次數,減少系統開銷,提高系統效率。什么樣的數據能使用緩存?經常查詢并且不經常改變的數據。

    Mybatis緩存

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-62Pk4JE2-1609421261368)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231193827608.png)]

    MyBatis包含一個非常強大的查詢緩存特性,它可以非常方便地定制和配置緩存。緩存可以極大的提升查詢效率。 MyBatis系統中默認定義了兩級緩存:一級緩存和二級緩存默認情況下,只有一級緩存開啟。(SqlSession級別的緩存,也稱為本地緩存)二級緩存需要手動開啟和配置,他是基于namespace級別的緩存。為了提擴展性,MyBatis定義了緩存接口Cache。我們可以通過實現Cache接口來自定義二級緩存

    一級緩存也叫本地緩存:SqlSession與數據庫同義詞會話期間查詢到的數據會放在本地緩存中。以后如果需要獲取相同的數據,直接從緩存中拿,沒有必要再去查詢數據;

    測試步驟:

    開啟日志! 測試在一個Session中查詢兩次相同的記錄 查看日志輸出

    緩存失效的情況:

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-h2Qk7npu-1609421261370)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231195447615.png)]

    查詢不同的東西 增刪改操作,可能會改變原來的數據,所以必定會刷新緩存! 查詢不同的Mapper.xml 手動清理緩存! sqlsession.clearCache(); //手動清理緩存

    小節:一級緩存默認是開啟的,只在一次SqlSession中有效,也就是拿到連接到關閉連接這個區間段!

    一級緩存就是一個Map。

    二級緩存

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-O3scunpT-1609421261372)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231195901433.png)]

    二級緩存也叫全局緩存,一級緩存作用域太低了,所以誕生了二級緩存 基于namespace級別的緩存,一個名稱空間,對應一個二級緩存; 工作機制一個會話查詢一條數據,這個數據就會被放在當前會話的一級緩存中;如果當前會話關閉了,這個會話對應的一級緩存就沒了;但是我們想要的是,會話關閉了,一級緩存中的數據會被保存到二級緩存中;新的會話查詢信息,就可以從二級緩存中獲取內容;不同的mapper查出的數據會放在自己對應的緩存(map)中;

    步驟:

    開啟全局緩存<!--顯式的開啟全局緩存--> <setting name="cacheEnabled" value="true"/>在要使用二級緩存的Mapper中開啟<!--在當前Mapper.xml中使用二級緩存--> <cache/> 也可以自定義參數 <cache eviction="FIFO"flushInterval="60000"size="512"readOnly="true"/>測試問題:我們需要將實體類序列化!否則就會報錯java.io.NotSerializableException: com.rui.pojo.User

    序列化

    測試

    問題:我們需要將實體類序列化!否則就會報錯java.io.NotSerializableException: com.rui.pojo.User

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2V1GnZBg-1609421261374)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231200920270.png)]

    小結:

    只要開啟了二級緩存,在同一個Mapper下就有效 所有的數據都會先放在一級緩存中; 只有當會話提交,或者關閉的時候,才會提交到二級緩存中!

    自定義緩存-encache

    EhCache 是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。

    要在程序中使用ehcache,先要導包!

    https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache

    org.mybatis.caches
    mybatis-ehcache
    1.1.0

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XyuT37Qe-1609421261376)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20201231203614123.png)]

    然后在mapper中指定使用ehcache緩存實現

    <在當前Mapper.xml中使用二級緩存>

    導入配置文件 ehcache.xml

    <?xml version="1.0" encoding="UTF-8"?> diskStore:為緩存路徑,ehcache分為內存和磁盤兩級,此屬性定義磁盤的緩存位置。參數解釋如下:user.home – 用戶主目錄user.dir – 用戶當前工作目錄java.io.tmpdir – 默認臨時文件路徑<diskStore path="java.io.tmpdir/Tmp_EhCache"/>defaultCache:默認緩存策略,當ehcache找不到定義的緩存時,則使用這個緩存策略。只能定義一個。name:緩存名稱。maxElementsInMemory:緩存最大數目maxElementsOnDisk:硬盤最大緩存個數。eternal:對象是否永久有效,一但設置了,timeout將不起作用。overflowToDisk:是否保存到磁盤,當系統當機時timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介于創建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。diskPersistent:是否緩存虛擬機重啟期數據 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。clearOnFlush:內存數量最大時是否清除。memoryStoreEvictionPolicy:可選策略有:LRU(最近最少使用,默認策略)、FIFO(先進先出)、LFU(最少訪問次數)。FIFO,first in first out,這個是大家最熟的,先進先出。LFU, Less Frequently Used,就是上面例子中使用的策略,直白一點就是講一直以來最少被使用的。如上面所講,緩存的元素有一個hit屬性,hit值最小的將會被清出緩存。LRU,Least Recently Used,最近最少使用的,緩存的元素有一個時間戳,當緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那么現有緩存元素中時間戳離當前時間最遠的元素將被清出緩存。 <defaultCacheeternal="false"maxElementsInMemory="10000"overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="1800"timeToLiveSeconds="259200"memoryStoreEvictionPolicy="LRU"/ <cachename="cloud_user"eternal="false"maxElementsInMemory="5000"overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="1800"timeToLiveSeconds="1800"memoryStoreEvictionPolicy="LRU"/>




    總結

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

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

    国内偷拍精品视频 | 91少妇精拍在线播放 | 婷婷视频在线播放 | 午夜美女av | 狠狠色噜噜狠狠狠狠 | 亚洲日本色 | 日韩在线免费视频观看 | 久久99精品国产麻豆宅宅 | 黄色在线观看污 | 青青河边草手机免费 | 国产又粗又猛又色又黄视频 | 在线黄色av电影 | 午夜久久福利 | 国产黄色片免费在线观看 | 人人看人人爱 | 日韩精品久久中文字幕 | 视频一区视频二区在线观看 | 欧美日韩91| 亚洲天堂视频在线 | 91黄视频在线观看 | 色妞色视频一区二区三区四区 | 国内视频一区二区 | 久操操| 99视频在线 | 国产精品久久久久久久久久久久午夜片 | 亚洲在线色 | 亚州精品天堂中文字幕 | 久久精品视频在线免费观看 | 国产精品成人在线 | 日韩在线视频一区 | 国产高清视频色在线www | 99在线精品视频在线观看 | 国产精品免费一区二区三区在线观看 | 最近中文字幕大全中文字幕免费 | 超碰97在线看 | 丁香5月婷婷 | 九九视频免费观看视频精品 | 色综合中文综合网 | 久久伊人精品一区二区三区 | 在线观看国产福利片 | 免费日韩一区二区 | 四虎国产精品免费观看视频优播 | 国产精品美女久久久久久久 | 国产69久久精品成人看 | www天天干| 日韩av在线小说 | 性色av一区二区三区在线观看 | 91九色porn在线资源 | 丰满少妇对白在线偷拍 | 国产精品第52页 | 欧美性天天| 日韩免费专区 | 欧美精品久久久久久久久老牛影院 | av成人免费网站 | 亚洲欧美日韩在线一区二区 | 视频在线观看入口黄最新永久免费国产 | 超碰人人在线观看 | 国内精品在线观看视频 | 丁香婷婷久久久综合精品国产 | 九九热视频在线 | 不卡电影免费在线播放一区 | 天天操综合网站 | 激情久久伊人 | 操操综合| 操操操综合 | 色噜噜在线观看视频 | 久久综合狠狠狠色97 | 久碰视频在线观看 | 伊人中文网 | 色婷婷综合激情 | 激情欧美xxxx | 久久精久久精 | 国产精品久久久久av | 成人日批视频 | 91成人免费看片 | 99国产精品久久久久久久久久 | 一区 二区 精品 | 综合激情久久 | 婷婷六月丁香激情 | 久久激情五月激情 | 黄色三级网站在线观看 | 香蕉视频在线视频 | 在线最新av | 午夜精品久久一牛影视 | 91手机视频在线 | 天天操天天干天天摸 | www.久久精品视频 | 日韩av午夜在线观看 | 精品视频在线观看 | 亚洲一区二区视频在线播放 | 国产精品九九九九九 | 国产欧美综合在线观看 | 人人爽夜夜爽 | 五月激情五月激情 | 操操操日日 | 美女网色 | 精品在线观 | 免费在线观看91 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 中文字幕成人在线观看 | 成年人在线观看视频免费 | 色婷婷久久久综合中文字幕 | 日韩欧美一区二区三区免费观看 | 人人插超碰 | 欧美视屏一区二区 | 久久中文字幕在线视频 | 国产福利av| 久久综合婷婷国产二区高清 | 欧美日韩一区二区久久 | 四虎国产精 | 国产精品入口66mio女同 | 国产区av在线 | 成人黄色免费在线观看 | 欧美日韩国产二区 | av中文国产 | 亚洲狠狠丁香婷婷综合久久久 | 四虎免费在线观看 | 免费大片黄在线 | 国产美女视频 | 欧美午夜精品久久久久久孕妇 | 日韩精品专区在线影院重磅 | 成人免费在线视频 | 激情婷婷| 波多野结衣精品视频 | 国产在线色站 | 国产精品99久久久久久小说 | 少妇视频一区 | 久亚洲 | 亚洲欧美成人在线 | 人人爽人人爽 | 狠狠操操操 | 在线日韩| 成人免费视频免费观看 | 一本一本久久a久久精品牛牛影视 | 白丝av免费观看 | 成人app在线免费观看 | 久久ww| 成人一区二区三区在线 | 五月天激情婷婷 | 日韩a在线| 免费 在线 中文 日本 | 色老板在线 | 欧美亚洲另类在线视频 | 国产黄色av | 日韩极品视频在线观看 | 在线91观看 | 特级黄色电影 | av天天澡天天爽天天av | 国产一级在线观看视频 | 欧美大片在线观看一区 | 欧美性黄网官网 | 亚洲激精日韩激精欧美精品 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产精品成人av电影 | 97人人艹| 色综合久久88色综合天天6 | 久久久久久久久影院 | 国产群p视频 | 国内精品久久久久影院一蜜桃 | 日韩黄在线观看 | 在线成人一区二区 | 992tv人人网tv亚洲精品 | 国产操在线 | 日韩视频一区二区在线 | 免费亚洲电影 | 欧美日韩网址 | 国产黄色一级大片 | 丁香五月缴情综合网 | 黄色成人av网址 | 久久久 精品 | 亚洲精品97| 久草综合视频 | 二区精品视频 | 亚洲视频免费视频 | 91亚洲精品乱码久久久久久蜜桃 | 波多野结衣网址 | 91免费网 | 日韩免费视频播放 | 精品一区二区三区电影 | 国产精品久久一区二区无卡 | 97操碰| 91麻豆精品国产91久久久更新时间 | 五月视频| 91av中文| 精品久久久久久一区二区里番 | 久要激情网 | 成年人网站免费在线观看 | 国产精品免费成人 | 国产精品久久一区二区三区, | 天天干天天操天天做 | 少妇bbbb| 亚洲欧美视频在线 | 日韩精品一区二区不卡 | 91在线精品视频 | 亚洲高清在线 | 免费网站v | 一区免费视频 | 美女免费视频网站 | 午夜国产一区 | 久免费| 91久久精| 久久精品一区二区三区四区 | 久久久久99精品成人片三人毛片 | 激情视频综合网 | 天海冀一区二区三区 | 97超碰资源总站 | 国产精品一区二区久久国产 | 日韩av免费大片 | 日韩av不卡在线 | 欧美婷婷色| 国产偷在线 | 国产成人精品区 | 国产精久久久 | 天天射天天射天天 | 精品91视频 | 中文字幕一区二区三区乱码不卡 | 久艹视频在线免费观看 | 中文字幕日韩高清 | 超碰97在线资源 | 日日爱网址 | 91三级在线观看 | 欧美另类xxx | 一区二区精品在线 | 成人国产精品久久久久久亚洲 | 综合色伊人 | 黄色av一区二区 | 91看片在线免费观看 | 91av片| 一本一道久久a久久综合蜜桃 | www夜夜操com| 日韩电影在线观看一区二区三区 | 国产一区二区午夜 | 国产成人a v电影 | 99操视频| 最近中文字幕国语免费高清6 | 婷色| 婷婷六月天丁香 | 91免费视频国产 | av中文字幕网站 | av在线最新 | 日本视频高清 | 国产视频不卡一区 | 久久久久久激情 | 国产人免费人成免费视频 | 91久久人澡人人添人人爽欧美 | 九色在线视频 | 国产黄色免费 | 欧美美女激情18p | 色香蕉在线视频 | 99热精品视| 91在线免费看片 | 午夜精品视频福利 | 视频一区亚洲 | 亚洲成人av一区二区 | 成人综合婷婷国产精品久久免费 | 日韩91精品 | 99久久99热这里只有精品 | 国模精品在线 | 99久久精品电影 | 国产精品一区二区你懂的 | 岛国一区在线 | 日韩精品一区二区在线 | 欧美一二三专区 | 欧美巨乳网 | a在线观看国产 | www好男人| 久久三级毛片 | 国产精品av免费在线观看 | 97国产精品亚洲精品 | 精品久久网 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 激情综合六月 | 色激情在线 | 欧美日韩一二三四区 | 免费色网站 | 天天操天天爽天天干 | 日本在线视频网址 | 免费观看91视频 | 精品国产亚洲一区二区麻豆 | 久久久久久久久久久久影院 | 麻豆视频在线看 | 国产高清一区二区 | 欧美日韩亚洲在线观看 | 久久久国产精品麻豆 | 欧美一区二区三区在线观看 | 欧美日韩在线观看不卡 | 国产视频亚洲精品 | 亚洲成av人片在线观看www | 美女性爽视频国产免费app | 久久国产网 | av黄色免费在线观看 | 亚洲精品国产精品乱码在线观看 | 二区在线播放 | 久久久久免费观看 | 日韩成人黄色 | www.伊人网 | 超碰免费公开 | 视频一区二区国产 | wwwww.国产 | 少妇高潮冒白浆 | 日韩av进入 | 天天·日日日干 | 亚洲精品人人 | 午夜成人免费电影 | 国产91免费在线 | 国产精品一区二区中文字幕 | 人人澡超碰碰97碰碰碰软件 | 一本一本久久a久久精品综合妖精 | 91av在| 午夜视频在线观看一区二区三区 | 亚洲欧洲日韩 | 欧美在线视频一区二区三区 | 丁香婷婷综合激情五月色 | 最近在线中文字幕 | 亚洲自拍偷拍色图 | 日韩,中文字幕 | 免费成人看片 | 一区二区三区视频在线 | 国产精品一二三 | 96视频在线 | 久久久精品小视频 | 色综合小说| 激情视频区| www.五月天色 | 国产色视频123区 | 91免费网站在线观看 | 成人网在线免费视频 | 中文字幕在线观看免费高清电影 | 一区二区不卡 | 婷婷资源站 | 91免费高清观看 | 久久久性| av成人动漫在线观看 | 日韩精品一区二区三区水蜜桃 | 天天做天天射 | 国产精品第一页在线观看 | 欧美一级片免费观看 | 国产黄色美女 | 久久精品国产成人 | 天天躁日日躁狠狠 | 国产一区二区久久久久 | 国产看片免费 | 日日射天天射 | 亚洲精品视频二区 | 精品 激情 | 久久久99国产精品免费 | 日韩av电影手机在线观看 | 亚洲午夜精品一区 | 精品国产一区二区三区久久久蜜月 | 久久欧美视频 | 91九色蝌蚪视频 | .国产精品成人自产拍在线观看6 | 成人蜜桃 | 亚洲桃花综合 | 激情小说网站亚洲综合网 | 91av在线免费播放 | 夜夜躁天天躁很躁波 | 国产一级片视频 | 久久精品成人 | 五月丁色 | 久草免费电影 | 亚洲精品乱码白浆高清久久久久久 | 日日夜夜中文字幕 | 久久视频这里有久久精品视频11 | 色噜噜日韩精品一区二区三区视频 | 91视频免费看片 | 国产一级视频在线免费观看 | 四虎成人精品永久免费av | 国产精品视频全国免费观看 | 99精品亚洲 | 999成人精品 | 久久精彩免费视频 | 日韩欧美高清在线观看 | 精品资源在线 | 亚洲日本激情 | 三级黄色大片在线观看 | 精品国产一区二区三区不卡 | 在线亚洲精品 | 久久综合九色综合网站 | 久青草视频在线观看 | 成人久久久久久久久 | 国产精品一区二区久久精品爱涩 | 色先锋av资源中文字幕 | 青青射| 免费看黄网站在线 | 久草青青在线观看 | 日韩视频一区二区 | 亚洲精品国产精品乱码不99热 | 五月天高清欧美mv | 国产成人综合精品 | 婷婷久月 | 国内外成人免费在线视频 | 国产成人精品在线播放 | 人人干人人做 | 久久视频在线 | 欧美综合在线视频 | 青春草视频 | 日本最新高清不卡中文字幕 | 久久国产精品区 | 国产二区免费视频 | 天天天干 | 午夜av在线免费 | 国产一级性生活视频 | 国产中文字幕在线播放 | 亚洲国产精品人久久电影 | 亚洲人成免费 | 黄a网| 激情伊人五月天久久综合 | 丝袜制服天堂 | 免费裸体视频网 | 免费在线观看黄网站 | 一区二区三区福利 | 成年人免费av网站 | 视频在线播放国产 | 国产一区欧美一区 | 天堂av在线7 | 日韩,中文字幕 | 日韩有码欧美 | 在线观看黄色av | 开心激情五月网 | 国产黄色片免费 | 天天干,夜夜操 | 国产中的精品av小宝探花 | 国产伦精品一区二区三区无广告 | 99爱国产精品 | 91精品在线免费视频 | www.伊人网| 婷婷国产在线 | 日韩中文字幕在线看 | 青青啪 | 日韩电影精品一区 | 欧美另类交人妖 | 日批视频在线 | 日本激情视频中文字幕 | 国产精选在线观看 | 国产色网 | 亚洲区色 | 色婷婷97| 欧美日韩aa| 婷婷www | 成年人在线看视频 | 美女一区网站 | 亚洲狠狠婷婷综合久久久 | 五月天综合色 | 网站你懂的| 一级免费黄视频 | 欧美综合久久 | 国内久久精品视频 | 99久久国产免费,99久久国产免费大片 | 亚洲精品中文在线 | 狠狠色丁香婷婷综合橹88 | 亚洲精品久久久久久国 | 亚洲1级片| 久久99久国产精品黄毛片入口 | 高清不卡一区二区三区 | 人人射人人| 亚州成人av在线 | 又色又爽又黄 | 一区二区三区在线影院 | 91高清免费观看 | 国产精品久久久免费 | 亚洲精品av中文字幕在线在线 | 久久久黄视频 | 黄色大片免费网站 | 精品一区二区在线看 | 亚洲国产成人高清精品 | 欧美做受69 | 亚洲精品一区二区三区在线观看 | 亚洲国产精品传媒在线观看 | 久久久高清一区二区三区 | 看片网站黄 | 久操视频在线免费看 | 麻豆免费视频观看 | 亚洲狠狠操 | 国产最顶级的黄色片在线免费观看 | 午夜婷婷在线播放 | 久久高清视频免费 | 国产精品a久久 | 亚洲精品欧洲精品 | 手机av片 | 美女精品在线观看 | 色婷婷综合久久久 | 中文字幕色在线 | 日韩中文字幕国产精品 | 欧美日韩不卡一区二区三区 | 中文av网| 亚洲最新av在线网址 | 国产精品国内免费一区二区三区 | 午夜黄色一级片 | 婷婷5月激情5月 | 亚洲高清在线 | 久久久久久久久久久久av | 亚洲一区网站 | 国产探花在线看 | 日本久久久久久久久 | 中文字幕一区二区三区在线播放 | 国产人成看黄久久久久久久久 | 69精品在线 | 伊人五月| 91在线免费公开视频 | 国产在线第三页 | 国产成人黄色网址 | 99热.com| 日韩欧美在线观看一区二区三区 | 久久优 | 欧美日韩中文在线观看 | 这里只有精品视频在线观看 | 久久视频在线观看免费 | 狠狠地操| 免费看的黄网站 | 免费福利视频网站 | 亚洲日日射 | 激情伊人| 玖玖视频在线 | 国产美女精品视频 | 国产一区二区影院 | 中文字幕乱偷在线 | 一区二区三区精品在线 | 在线日韩视频 | 激情婷婷综合网 | 在线三级中文 | 99tvdz@gmail.com| 久久网址 | 日韩免费视频观看 | 国产不卡免费视频 | 人人爽久久久噜噜噜电影 | 国产精品第一视频 | 日韩超碰在线 | 久青草视频在线观看 | 99热精品在线 | 91 中文字幕 | 亚洲无吗视频在线 | 亚洲免费精彩视频 | 91视频免费观看 | 久久综合久色欧美综合狠狠 | 亚洲成aⅴ人在线观看 | 久久久久久美女 | 91成人网页版 | 福利视频一二区 | 国产精品久久久久久a | 色多多污污在线观看 | 97超碰在线久草超碰在线观看 | 日韩一区二区三区免费电影 | av在线8 | 手机av网站 | 日韩精品偷拍 | 精品高清美女精品国产区 | 色婷婷影视| 国产又粗又猛又爽又黄的视频先 | 91麻豆精品久久久久久 | 五月丁婷婷 | 久久草草热国产精品直播 | 国产一区二区在线播放 | 国产精品国产三级国产 | 国产99一区视频免费 | 中文字幕亚洲精品日韩 | 亚洲国产欧洲综合997久久, | 在线视频欧美日韩 | 992tv成人免费看片 | 国产91精品欧美 | 中文字幕乱码一区二区 | 天天操天天操 | 中文字幕一区二区三区久久蜜桃 | 最近免费观看的电影完整版 | 黄色av网站在线免费观看 | 国产九九九九九 | 麻豆影音先锋 | 国产三级在线播放 | 日韩久久精品一区二区 | 日韩精品久久久久久 | 久久久免费 | 亚洲理论片在线观看 | 色综合天天在线 | 草久热| 看片一区二区三区 | 在线成人一区二区 | avlulu久久精品 | 成人免费91 | 日韩电影中文,亚洲精品乱码 | 在线色亚洲 | 成人全视频免费观看在线看 | 欧美一级看片 | 国产在线观看网站 | 深夜免费小视频 | 手机在线黄色网址 | 91亚洲国产 | www.国产在线 | 69夜色精品国产69乱 | 亚洲在线高清 | 国产香蕉久久精品综合网 | 黄色小说视频网站 | 国产一区二区免费 | av先锋中文字幕 | 91精品国产乱码在线观看 | 久久无码av一区二区三区电影网 | 欧美视频网址 | 日韩免费久久 | 91久久人澡人人添人人爽欧美 | 精品美女久久久久久免费 | 日韩在线观看第一页 | 精品免费国产一区二区三区四区 | 亚洲日本精品 | 国产在线视频资源 | www欧美xxxx | 久热只有精品 | 久久久久久久亚洲精品 | 日韩电影一区二区在线 | 中文一区二区三区在线观看 | 国产一区二区在线免费 | 国产精品三级视频 | 美女又爽又黄 | 日韩在线二区 | 精品欧美小视频在线观看 | 92国产精品久久久久首页 | 激情婷婷 | a久久免费视频 | 在线va视频 | 日韩av在线免费播放 | 成年人在线视频观看 | 天天综合色天天综合 | 欧美另类老妇 | 国产精品九九热 | 亚洲国产中文字幕在线视频综合 | 中日韩在线| 黄色在线免费观看网址 | 日韩欧美网址 | 人人澡澡人人 | 亚洲精品视频中文字幕 | 久操综合| 亚洲aⅴ久久精品 | 超碰97在线资源站 | 国产一区欧美在线 | 在线观看视频精品 | av日韩在线网站 | 97在线视频免费看 | 久久线视频| 狠狠黄 | 人人玩人人添人人澡超碰 | 一区二区 不卡 | 天天色天天射天天干 | 91精品久久久久久粉嫩 | 国产蜜臀av | 国产一线在线 | 欧美日韩国产mv | 少妇bbw搡bbbb搡bbb | 日本精品视频免费 | 色噜噜在线观看视频 | 亚洲va综合va国产va中文 | 91九色网站| 91视频a| 成人动漫视频在线 | 99久高清在线观看视频99精品热在线观看视频 | 日韩两性视频 | 国产 欧美 在线 | 久久久精品久久日韩一区综合 | 国产在线精品国自产拍影院 | 97在线观| 色婷婷成人 | 69精品人人人人 | 久久免费电影网 | 丁香六月激情 | 在线观看91视频 | 国产精品久久久 | 在线v| 国产超碰在线观看 | www.久热| 国产精品黄色影片导航在线观看 | 精品你懂的 | 久久欧美视频 | 四虎www| 韩国av一区二区三区 | 免费看一级 | 日韩久久久 | av三级在线免费观看 | 69视频在线 | 亚洲成成品网站 | 日韩精品一区二区三区不卡 | 五月天久久婷 | 久久夜靖品 | 97在线观看免费观看 | av福利免费 | 日本中文字幕在线视频 | 黄色一级大片免费看 | av成人免费在线 | 18岁免费看片 | 国产日韩精品视频 | 国产精品黄色影片导航在线观看 | 97精品免费视频 | 丁香六月在线观看 | 欧美日本在线观看视频 | 日日夜夜操操操操 | 日韩久久精品 | av免费在线网站 | av视屏在线播放 | 成人亚洲综合 | 国产精品永久免费在线 | 国产精品精品久久久久久 | 在线成人观看 | 成人一级免费视频 | 国产亚洲精品久久久久久 | 视频在线一区 | 欧美孕交vivoestv另类 | 久久综合网色—综合色88 | 国产福利一区二区在线 | 国产精品成久久久久三级 | 国产精品成人国产乱一区 | av中文字幕剧情 | 免费av网址大全 | 国产精品一区免费看8c0m | 九九热视频在线 | 国产精品日韩在线 | 中文字幕在线观看亚洲 | 很黄很污的视频网站 | 永久免费的av电影 | 成人黄色在线看 | 一区二区中文字幕在线播放 | 亚洲精品综合欧美二区变态 | 99综合久久| 97精品国产| av福利在线 | 亚洲一区二区91 | 91人人人| 中文在线8新资源库 | 手机看片 | 欧美天堂视频在线 | 超碰免费观看 | 国产欧美日韩视频 | 亚洲三级av| 国产一区二区电影在线观看 | aaa免费毛片| 亚洲国产精品久久久久久 | 欧美日韩国产精品爽爽 | 婷婷在线播放 | 不卡的av在线 | 欧美日韩免费网站 | 国产精品一码二码三码在线 | 99这里只有精品视频 | 99亚洲精品| 久久精品中文字幕免费mv | 一级黄色在线免费观看 | 免费在线激情视频 | 国产精品欧美久久久久三级 | 国产最新精品视频 | 91原创在线观看 | 在线免费观看视频一区 | 九九九九九九精品任你躁 | 亚洲高清av在线 | www99精品| 五月天久久综合网 | 日日干天天| 亚洲视频综合 | 有码中文字幕在线观看 | 精品国产乱码一区二区三区在线 | 国产精品一区专区欧美日韩 | 国产精品久久久久久久妇 | 性色大片在线观看 | 黄色最新网址 | 日日婷婷夜日日天干 | 久久成人国产 | 91av在线视频播放 | 成人全视频免费观看在线看 | 欧美久久久一区二区三区 | 欧美日韩国产在线 | 91丨九色丨蝌蚪丨对白 | 亚洲午夜不卡 | 亚洲乱码精品久久久久 | 国产一二区视频 | 久久久久久久久久久久久久免费看 | www久久久久 | 手机在线中文字幕 | 亚洲精品免费在线观看视频 | 国产精品 中文字幕 亚洲 欧美 | 九九热精品在线 | 欧美激情第28页 | 欧美成年黄网站色视频 | 黄色亚洲大片免费在线观看 | 一区二区精品在线视频 | 天天干夜夜干 | 国产69久久久欧美一级 | 人人玩人人爽 | 久久久久人人 | 免费看v片网站 | 18国产精品白浆在线观看免费 | 男女视频久久久 | 久久久久久国产精品久久 | av免费看看 | 亚洲1区 在线 | 国产高清久久久 | 国产在线更新 | 婷婷视频在线观看 | 久久久麻豆视频 | 在线91色 | 五月婷婷丁香色 | 久久久久久久久久久免费 | 成人免费观看a | 国产一级二级在线观看 | 日韩免费一区二区三区 | 99在线热播精品免费99热 | 天天色天天干天天色 | 在线精品在线 | 麻豆va一区二区三区久久浪 | 久久国内精品99久久6app | 可以免费看av | 天天插天天爱 | 99视频免费播放 | 麻豆一精品传二传媒短视频 | 一区二区三区免费看 | 伊人影院av | 日本一区二区不卡高清 | 久久免费公开视频 | 亚洲砖区区免费 | 国产一二三四在线视频 | 国产视频精品网 | 欧美另类xxx | 成人黄视频 | 国产色黄网站 | 色瓜| 日批在线看 | 激情综合亚洲精品 | 久久电影网站中文字幕 | 九九视频精品在线 | 国产精品情侣视频 | 国产日产精品一区二区三区四区的观看方式 | 激情网站网址 | 日韩黄色免费在线观看 | 国产这里只有精品 | 干av在线 | 国产精品免费av | 久久久影院| 成人在线观看资源 | 黄污网站在线 | 国内精品久久久久久 | 久久综合狠狠综合久久激情 | 香蕉免费 | 一区 在线观看 | 欧美成人h版在线观看 | 日日射天天射 | 这里只有精品视频在线 | 午夜精品久久久久久久99 | 国产精品网红直播 | 天天射成人 | 91精品国自产在线 | 国产麻豆精品久久一二三 | 人人舔人人爱 | 中文字幕在线观看资源 | av直接看| 国产伦理一区二区三区 | 91精品办公室少妇高潮对白 | 久久精品爱爱视频 | 免费在线观看的av网站 | 一级性av| 伊人婷婷在线 | 免费情趣视频 | 亚洲成aⅴ人在线观看 | 欧美性护士 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产精品免费看久久久8精臀av | 久久久99精品免费观看app | 不卡的一区二区三区 | 女人18精品一区二区三区 | 91精品国产乱码在线观看 | 青青草华人在线视频 | 日韩精品在线视频 | 岛国片在线 | av日韩中文 | 国产成人精品av在线观 | av免费看在线 | 91精品在线免费观看视频 | 看片网站黄 | 国产资源网 | 久日精品| 日韩在线二区 | 亚洲精品日韩一区二区电影 | 亚洲综合色婷婷 | 色永久免费视频 | 视频一区二区视频 | 久久视频精品在线 | 亚洲国产播放 | 69av在线播放 | 久久视频在线视频 | 国产又黄又爽又猛视频日本 | 亚洲精品国产精品久久99 | 性色大片在线观看 | 免费黄色一区 | 天天操天天吃 | 在线免费观看黄色 | 美女免费av| 中文字幕色在线视频 | 九九热精| 亚洲最快最全在线视频 | 日韩a在线看 | 久久99国产精品久久99 | 黄色一级动作片 | 色的网站在线观看 | 视频在线观看入口黄最新永久免费国产 | 五月婷婷激情综合网 | 在线性视频日韩欧美 | 亚洲 成人 欧美 | 四虎影视成人精品国库在线观看 | 日韩a在线看 | 亚洲四虎影院 | 日韩在线观看视频网站 | 成人小视频免费在线观看 | 色播五月婷婷 | 国产女人40精品一区毛片视频 | 婷婷久月 | 欧洲一区二区在线观看 | 亚洲最新在线视频 | 天堂中文在线播放 | 久久久久综合精品福利啪啪 | 色综合久久久久久久 | 精品女同一区二区三区在线观看 | 欧美激情视频一区二区三区免费 | 天海冀一区二区三区 | 国产免费视频一区二区裸体 | 夜夜夜草 | 99视频在线免费看 | 97超碰中文字幕 | www操操| 日本在线观看黄色 | av在线永久免费观看 | av国产网站 | 黄免费网站 | 日日日网| 伊人伊成久久人综合网小说 | 日本在线视频网址 | 又紧又大又爽精品一区二区 | 亚洲欧洲一区二区在线观看 | 国产精品久一 | 免费在线观看av的网站 | 国产精品麻豆91 | 日韩精品一区二区三区视频播放 | 国产精品1区2区 | 久久艹精品 | 日本黄色免费播放 | 97小视频| 天天干天天操天天操 | 久久这里有精品 | 亚洲人成免费 | 午夜精品久久久久久 | 日韩一级成人av | 午夜日b视频 | 国产九九九精品视频 | 日本精品xxxx | 午夜电影av | 日韩免费在线观看网站 | 亚洲最新精品 | 成片免费观看视频 | 国产免费观看久久 | 人人看人人 | 探花系列在线 | 九色91福利 | 91x色| 91成人免费在线视频 | 美女网站在线播放 | 久久情侣偷拍 | 色婷婷丁香 | 久久久99国产精品免费 | 人人爽人人爽 | 欧美日韩18 | 亚洲综合在线视频 | 人人操日日干 | 免费观看一区二区 | 国产在线观看a | 黄色毛片一级片 | 手机在线免费av | 日韩久久一区二区 | 全黄网站 | 狠狠色丁香久久婷婷综 | 成人免费共享视频 | 亚洲国内精品在线 | 国产精品青草综合久久久久99 | 黄在线免费看 | 亚洲第五色综合网 | 天天在线视频色 | 狠狠操狠狠干2017 | 中文字幕在线高清 | 九九色网 | 91在线视频免费观看 | 五月香视频在线观看 | 国产高清免费 | 日韩精品在线视频免费观看 | 五月激情站 | 丁香五婷 | 国产成人精品一区二区三区免费 | 精品自拍网 | 成人试看120秒 | 国内综合精品午夜久久资源 | 天堂av免费观看 | 天天爱综合 | 国产午夜不卡 | 日本精品在线看 | 久久99婷婷 | 亚洲国产中文字幕 | 国产又粗又猛又黄又爽的视频 | 国产在线999 | 免费在线视频一区二区 | 日韩黄色一级电影 |