国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

Mybatis實(shí)戰(zhàn)教程之入門到精通(經(jīng)典)

 更新時(shí)間:2016年01月23日 10:58:46   作者:TechBirds  
MyBatis是支持普通SQL查詢,存儲(chǔ)過程和高級(jí)映射的優(yōu)秀持久層框架,通過本文給大家介紹Mybatis實(shí)戰(zhàn)教程之入門到精通,對mybatis實(shí)戰(zhàn)教程相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧

什么是mybatis

MyBatis是支持普通SQL查詢,存儲(chǔ)過程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJOs(Plan Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄.

orm工具的基本思想

無論是用過的hibernate,mybatis,你都可以法相他們有一個(gè)共同點(diǎn):

1. 從配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory 產(chǎn)生 session
3. 在session 中完成對數(shù)據(jù)的增刪改查和事務(wù)提交等.
4. 在用完之后關(guān)閉session 。
5. 在java 對象和 數(shù)據(jù)庫之間有做mapping 的配置文件,也通常是xml 文件。

mybatis實(shí)戰(zhàn)教程(mybatis in action)之一:開發(fā)環(huán)境搭建

mybatis 的開發(fā)環(huán)境搭建,選擇: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。這些軟件工具均可以到各自的官方網(wǎng)站上下載。

首先建立一個(gè)名字為 MyBaits 的 dynamic web project

1. 現(xiàn)階段,你可以直接建立java 工程,但一般都是開發(fā)web項(xiàng)目,這個(gè)系列教程最后也是web的,所以一開始就建立web工程。
2. 將 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷貝到 web工程的lib目錄.
3. 創(chuàng)建mysql 測試數(shù)據(jù)庫和用戶表,注意,這里采用的是 utf-8 編碼

創(chuàng)建用戶表,并插入一條測試數(shù)據(jù)

程序代碼

Create TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(50) DEFAULT NULL,
`userAge` int(11) DEFAULT NULL,
`userAddress` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong');

到此為止,前期準(zhǔn)備工作就完成了。下面開始真正配置mybatis項(xiàng)目了。

1. 在MyBatis 里面創(chuàng)建兩個(gè)源碼目錄,分別為 src_user,test_src, 用如下方式建立,鼠標(biāo)右鍵點(diǎn)擊 JavaResource.

2. 設(shè)置mybatis 配置文件:Configuration.xml, 在src_user目錄下建立此文件,內(nèi)容如下:

程序代碼

< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
< configuration>
<typeAliases> 
<typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 
</typeAliases> 
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yihaomen/mybatis/model/User.xml"/>
</mappers>
< /configuration>

3. 建立與數(shù)據(jù)庫對應(yīng)的 java class,以及映射文件.

在src_user下建立package:com.yihaomen.mybatis.model ,并在這個(gè) package 下建立 User 類:

程序代碼

package com.yihaomen.mybatis.model;
public class User {
private int id;
private String userName;
private String userAge;
private String userAddress;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}

同時(shí)建立這個(gè)User 的映射文件 User.xml:

程序代碼

< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
< mapper namespace="com.yihaomen.mybatis.models.UserMapper">
<select id="selectUserByID" parameterType="int" resultType="User">
select * from `user` where id = #{id}
</select>
< /mapper>

下面對這幾個(gè)配置文件解釋下:

1.Configuration.xml 是 mybatis 用來建立 sessionFactory 用的,里面主要包含了數(shù)據(jù)庫連接相關(guān)東西,還有 java 類所對應(yīng)的別名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 這個(gè)別名非常重要,你在 具體的類的映射中,比如User.xml 中 resultType 就是對應(yīng)這里的。要保持一致,當(dāng)然這里的 resultType 還有另外單獨(dú)的定義方式,后面再說。

2. Configuration.xml 里面 的<mapper resource="com/yihaomen/mybatis/model/User.xml"/>是包含要映射的類的xml配置文件。

3. 在User.xml 文件里面 主要是定義各種SQL 語句,以及這些語句的參數(shù),以及要返回的類型等.

開始測試

在test_src 源碼目錄下建立com.yihaomen.test這個(gè)package,并建立測試類Test:

程序代碼

package com.yihaomen.test;
import java.io.Reader;
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 com.yihaomen.mybatis.model.User;
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader; 
static{
try{
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSessionFactory getSession(){
return sqlSessionFactory;
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
User user = (User) session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1);
System.out.println(user.getUserAddress());
System.out.println(user.getUserName());
} finally {
session.close();
}
}
}

現(xiàn)在運(yùn)行這個(gè)程序,是不是得到查詢結(jié)果了。恭喜你,環(huán)境搭建配置成功,接下來第二章,將講述基于接口的操作方式,增刪改查。
整個(gè)工程目錄結(jié)構(gòu)如下:

mybatis實(shí)戰(zhàn)教程(mybatis in action)之二:以接口的方式編程

前面一章,已經(jīng)搭建好了eclipse,mybatis,mysql的環(huán)境,并且實(shí)現(xiàn)了一個(gè)簡單的查詢。請注意,這種方式是用SqlSession實(shí)例來直接執(zhí)行已映射的SQL語句:

session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1)

其實(shí)還有更簡單的方法,而且是更好的方法,使用合理描述參數(shù)和SQL語句返回值的接口(比如IUserOperation.class),這樣現(xiàn)在就可以至此那個(gè)更簡單,更安全的代碼,沒有容易發(fā)生的字符串文字和轉(zhuǎn)換的錯(cuò)誤.下面是詳細(xì)過程:

在src_user源碼目錄下建立 com.yihaomen.mybatis.inter 這個(gè)包,并建立接口類 IUserOperation , 內(nèi)容如下:

程序代碼

package com.yihaomen.mybatis.inter;
import com.yihaomen.mybatis.model.User;
public interface IUserOperation { 
public User selectUserByID(int id);
}

請注意,這里面有一個(gè)方法名 selectUserByID 必須與 User.xml 里面配置的 select 的id 對應(yīng)(<select id="selectUserByID")

重寫測試代碼

public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);
User user = userOperation.selectUserByID(1);
System.out.println(user.getUserAddress());
System.out.println(user.getUserName());
} finally {
session.close();
}
}

整個(gè)工程結(jié)構(gòu)圖現(xiàn)在如下:


運(yùn)行這個(gè)測試程序,就可以看到結(jié)果了。

mybatis實(shí)戰(zhàn)教程(mybatis in action)之三:實(shí)現(xiàn)數(shù)據(jù)的增刪改查

前面已經(jīng)講到用接口的方式編程。這種方式,要注意的一個(gè)地方就是。在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空間非常重要,不能有錯(cuò),必須與我們定義的package 和 接口一致。如果不一致就會(huì)出錯(cuò),這一章主要在上一講基于接口編程的基礎(chǔ)上完成如下事情:

1. 用 mybatis 查詢數(shù)據(jù),包括列表
2. 用 mybatis 增加數(shù)據(jù)
3. 用 mybatis 更新數(shù)據(jù).
4. 用 mybatis 刪除數(shù)據(jù).

查詢數(shù)據(jù),前面已經(jīng)講過簡單的,主要看查詢出列表的

查詢出列表,也就是返回list, 在我們這個(gè)例子中也就是 List<User> , 這種方式返回?cái)?shù)據(jù),需要在User.xml 里面配置返回的類型 resultMap, 注意不是 resultType, 而這個(gè)resultMap 所對應(yīng)的應(yīng)該是我們自己配置的

程序代碼

< !-- 為了返回list 類型而定義的returnMap -->
<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="userName" property="userName" />
<result column="userAge" property="userAge" />
<result column="userAddress" property="userAddress" />
</resultMap>

查詢列表的語句在 User.xml

程序代碼

< !-- 返回list 的select 語句,注意 resultMap 的值是指向前面定義好的 -->
<select id="selectUsers" parameterType="string" resultMap="resultListUser">
select * from user where userName like #{userName}
</select>

在 IUserOperation 接口中增加方法:public List<User> selectUsers(String userName);

現(xiàn)在在 Test 類中做測試

程序代碼

public void getUserList(String userName){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class); 
List<User> users = userOperation.selectUsers(userName);
for(User user:users){
System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress());
}
} finally {
session.close();
}
}

現(xiàn)在在main 方法中可以測試:

程序代碼

public static void main(String[] args) {
Test testUser=new Test();
testUser.getUserList("%");
}

可以看到,結(jié)果成功查詢出來。如果是查詢單個(gè)數(shù)據(jù)的話,用第二講用過的方法就可以了。

用mybatis 增加數(shù)據(jù)

在 IUserOperation 接口中增加方法:public void addUser(User user);

在 User.xml 中配置

程序代碼

< !--執(zhí)行增加操作的SQL語句。id和parameterType 
分別與IUserOperation接口中的addUser方法的名字和 
參數(shù)類型一致。以#{name}的形式引用Student參數(shù) 
的name屬性,MyBatis將使用反射讀取Student參數(shù) 
的此屬性。#{name}中name大小寫敏感。引用其他 
的gender等屬性與此一致。seGeneratedKeys設(shè)置 
為"true"表明要MyBatis獲取由數(shù)據(jù)庫自動(dòng)生成的主 
鍵;keyProperty="id"指定把獲取到的主鍵值注入 
到Student的id屬性--> 
<insert id="addUser" parameterType="User" 
useGeneratedKeys="true" keyProperty="id"> 
insert into user(userName,userAge,userAddress) 
values(#{userName},#{userAge},#{userAddress}) 
</insert>

然后在 Test 中寫測試方法:

程序代碼

/**
* 測試增加,增加后,必須提交事務(wù),否則不會(huì)寫入到數(shù)據(jù)庫.
*/
public void addUser(){
User user=new User();
user.setUserAddress("人民廣場");
user.setUserName("飛鳥");
user.setUserAge(80);
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);
userOperation.addUser(user);
session.commit();
System.out.println("當(dāng)前增加的用戶 id為:"+user.getId());
} finally {
session.close();
}
}

用mybatis 更新數(shù)據(jù)

方法類似,先在 IUserOperation 中增加方法:public void addUser(User user);

然后配置 User.xml

程序代碼

<update id="updateUser" parameterType="User" >
update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
</update>

Test 類總的測試方法如下:

程序代碼

public void updateUser(){
//先得到用戶,然后修改,提交。
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);
User user = userOperation.selectUserByID(4); 
user.setUserAddress("原來是魔都的浦東創(chuàng)新園區(qū)");
userOperation.updateUser(user);
session.commit();

} finally {
session.close();
}
}

用mybatis 刪除數(shù)據(jù)

同理,IUserOperation 增加方法:public void deleteUser(int id);

配置User.xml

程序代碼

<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>

然后在Test類中寫測試方法:

程序代碼

/**
* 刪除數(shù)據(jù),刪除一定要 commit.
* @param id
*/
public void deleteUser(int id){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class); 
userOperation.deleteUser(id);
session.commit(); 
} finally {
session.close();
}
}

這樣,所有增刪改查都完成了,注意在增加,更改,刪除的時(shí)候要調(diào)用session.commit(),這樣才會(huì)真正對數(shù)據(jù)庫進(jìn)行操作,否則是沒有提交的。

到此為止,簡單的單表操作,應(yīng)該都會(huì)了,接下來的時(shí)間了,我會(huì)講多表聯(lián)合查詢,以及結(jié)果集的選取。

mybatis實(shí)戰(zhàn)教程(mybatis in action)之四:實(shí)現(xiàn)關(guān)聯(lián)數(shù)據(jù)的查詢

有了前面幾章的基礎(chǔ),對一些簡單的應(yīng)用是可以處理的,但在實(shí)際項(xiàng)目中,經(jīng)常是關(guān)聯(lián)表的查詢,比如最常見到的多對一,一對多等。這些查詢是如何處理的呢,這一講就講這個(gè)問題。我們首先創(chuàng)建一個(gè)Article 這個(gè)表,并初始化數(shù)據(jù).

程序代碼

Drop TABLE IF EXISTS `article`;
Create TABLE `article` (
`id` int(11) NOT NULL auto_increment,
`userid` int(11) NOT NULL,
`title` varchar(100) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- 添加幾條測試數(shù)據(jù)
-- ----------------------------
Insert INTO `article` VALUES ('1', '1', 'test_title', 'test_content');
Insert INTO `article` VALUES ('2', '1', 'test_title_2', 'test_content_2');
Insert INTO `article` VALUES ('3', '1', 'test_title_3', 'test_content_3');
Insert INTO `article` VALUES ('4', '1', 'test_title_4', 'test_content_4');

你應(yīng)該發(fā)現(xiàn)了,這幾個(gè)文章對應(yīng)的userid都是1,所以需要用戶表user里面有id=1的數(shù)據(jù)??梢孕薷某蓾M足自己條件的數(shù)據(jù).按照orm的規(guī)則,表已經(jīng)創(chuàng)建了,那么肯定需要一個(gè)對象與之對應(yīng),所以我們增加一個(gè) Article 的class

程序代碼

package com.yihaomen.mybatis.model;
public class Article {
private int id;
private User user;
private String title;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

注意一下,文章的用戶是怎么定義的,是直接定義的一個(gè)User對象。而不是int類型。

多對一的實(shí)現(xiàn)

場景:在讀取某個(gè)用戶發(fā)表的所有文章。當(dāng)然還是需要在User.xml 里面配置 select 語句, 但重點(diǎn)是這個(gè) select 的resultMap 對應(yīng)什么樣的數(shù)據(jù)呢。這是重點(diǎn),這里要引入 association 看定義如下:

程序代碼

< !-- User 聯(lián)合文章進(jìn)行查詢 方法之一的配置 (多對一的方式) --> 
<resultMap id="resultUserArticleList" type="Article">
<id property="id" column="aid" />
<result property="title" column="title" />
<result property="content" column="content" />
<association property="user" javaType="User">
<id property="id" column="id" />
<result property="userName" column="userName" />
<result property="userAddress" column="userAddress" /> 
</association> 
</resultMap>
< select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article
where user.id=article.userid and user.id=#{id}
</select>

這樣配置之后,就可以了,將select 語句與resultMap 對應(yīng)的映射結(jié)合起來看,就明白了。用association 來得到關(guān)聯(lián)的用戶,這是多對一的情況,因?yàn)樗械奈恼露际峭粋€(gè)用戶的。

還有另外一種處理方式,可以復(fù)用我們前面已經(jīng)定義好的 resultMap ,前面我們定義過一個(gè) resultListUser ,看這第二種方法如何實(shí)現(xiàn):

程序代碼

<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="userName" property="userName" />
<result column="userAge" property="userAge" />
<result column="userAddress" property="userAddress" />
</resultMap>
<!-- User 聯(lián)合文章進(jìn)行查詢 方法之二的配置 (多對一的方式) --> 
<resultMap id="resultUserArticleList-2" type="Article">
<id property="id" column="aid" />
<result property="title" column="title" />
<result property="content" column="content" /> 
<association property="user" javaType="User" resultMap="resultListUser" /> 
</resultMap>
<select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article
where user.id=article.userid and user.id=#{id}
</select>

將 association 中對應(yīng)的映射獨(dú)立抽取出來,可以達(dá)到復(fù)用的目的。

好了,現(xiàn)在在Test 類中寫測試代碼:

程序代碼

public void getUserArticles(int userid){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class); 
List<Article> articles = userOperation.getUserArticles(userid);
for(Article article:articles){
System.out.println(article.getTitle()+":"+article.getContent()+
":作者是:"+article.getUser().getUserName()+":地址:"+
article.getUser().getUserAddress());
}
} finally {
session.close();
}
}

漏掉了一點(diǎn),我們一定要在 IUserOperation 接口中,加入 select 對應(yīng)的id 名稱相同的方法:

public List<Article> getUserArticles(int id);

然后運(yùn)行就可以測試。

mybatis實(shí)戰(zhàn)教程(mybatis in action)之五:與spring3集成

在這一系列文章中,前面講到純粹用mybatis 連接數(shù)據(jù)庫,然后 進(jìn)行增刪改查,以及多表聯(lián)合查詢的的例子,但實(shí)際項(xiàng)目中,通常會(huì)用 spring 這個(gè)沾合劑來管理 datasource 等。充分利用spring 基于接口的編程,以及aop ,ioc 帶來的方便。用spring 來管理 mybatis 與管理hibernate 有很多類似的地方。今天的重點(diǎn)就是數(shù)據(jù)源管理以及 bean的配置。

你可以下載源碼后,對比著看,源代碼沒有帶jar包,太大了,空間有限. 有截圖,你可以看到用到哪些jar包,源碼在本文最后.

1. 首先對前面的工程結(jié)構(gòu)做一點(diǎn)改變,在src_user源代碼目錄下建立文件夾config ,并將原來的 mybatis 配置文件 Configuration.xml 移動(dòng)到這個(gè)文件夾中, 并在config 文家夾中建立 spring 配置文件:applicationContext.xml ,這個(gè)配置文件里最主要的配置:

程序代碼

< !--本示例采用DBCP連接池,應(yīng)預(yù)先把DBCP的jar包復(fù)制到工程的lib目錄下。 --> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/> 
<property name="password" value="password"/> 
</bean> 
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<!--dataSource屬性指定要用到的連接池--> 
<property name="dataSource" ref="dataSource"/> 
<!--configLocation屬性指定mybatis的核心配置文件--> 
<property name="configLocation" value="config/Configuration.xml"/> 
</bean> 
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
<!--sqlSessionFactory屬性指定要用到的SqlSessionFactory實(shí)例--> 
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
<!--mapperInterface屬性指定映射器接口,用于實(shí)現(xiàn)此接口并生成映射器對象--> 
<property name="mapperInterface" value="com.yihaomen.mybatis.inter.IUserOperation" />
</bean> 

[b]這里面的重點(diǎn)就是 org.mybatis.spring.SqlSessionFactoryBean 與 org.mybatis.spring.mapper.MapperFactoryBean[b] 實(shí)現(xiàn)了 spring 的接口,并產(chǎn)生對象。詳細(xì)可以查看 mybatis-spring 代碼。(http://code.google.com/p/mybatis/),如果僅僅使用,固定模式,這樣配置就好。

然后寫測試程序

package com.yihaomen.test;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yihaomen.mybatis.inter.IUserOperation;
import com.yihaomen.mybatis.model.Article;
import com.yihaomen.mybatis.model.User;
public class MybatisSprintTest {
private static ApplicationContext ctx; 
static 
{ 
ctx = new ClassPathXmlApplicationContext("config/applicationContext.xml"); 
} 
public static void main(String[] args) 
{ 
IUserOperation mapper = (IUserOperation)ctx.getBean("userMapper"); 
//測試id=1的用戶查詢,根據(jù)數(shù)據(jù)庫中的情況,可以改成你自己的.
System.out.println("得到用戶id=1的用戶信息");
User user = mapper.selectUserByID(1);
System.out.println(user.getUserAddress()); 
//得到文章列表測試
System.out.println("得到用戶id為1的所有文章列表");
List<Article> articles = mapper.getUserArticles(1);
for(Article article:articles){
System.out.println(article.getContent()+"--"+article.getTitle());
}
} 
}

運(yùn)行即可得到相應(yīng)的結(jié)果.

工程圖:

用到的jar包,如下圖:

mybatis實(shí)戰(zhàn)教程(mybatis in action)之六:與Spring MVC 的集成

前面幾篇文章已經(jīng)講到了mybatis與spring 的集成。但這個(gè)時(shí)候,所有的工程還不是web工程,雖然我一直是創(chuàng)建的web 工程。今天將直接用mybatis與Spring mvc 的方式集成起來,源碼在本文結(jié)尾處下載.主要有以下幾個(gè)方面的配置

1. web.xml 配置 spring dispatchservlet ,比如為:mvc-dispatcher
2. mvc-dispatcher-servlet.xml 文件配置
3. spring applicationContext.XML文件配置(與數(shù)據(jù)庫相關(guān),與mybatis sqlSessionFaction 整合,掃描所有mybatis mapper 文件等.)
4. 編寫controller 類
5. 編寫頁面代碼.

先有個(gè)大概映像,整個(gè)工程圖如下:

1. web.xml 配置 spring dispatchservlet ,比如為:mvc-dispatcher

程序代碼 程序代碼

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.ContextCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

2. 在web.xml 同目錄下配置 mvc-dispatcher-servlet.xml 文件,這個(gè)文件名前面部分必須與你在web.xml里面配置的DispatcherServlet 的servlet名字對應(yīng).其內(nèi)容為:

程序代碼

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.yihaomen.controller" />
<mvc:annotation-driven />
<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/> 
<mvc:default-servlet-handler/> 
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
< /beans>

3. 在源碼目錄 config 目錄下配置 spring 配置文件 applicationContext.xml

程序代碼

< !--本示例采用DBCP連接池,應(yīng)預(yù)先把DBCP的jar包復(fù)制到工程的lib目錄下。 --> 
<context:property-placeholder location="classpath:/config/database.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8" 
p:username="root" p:password="password"
p:maxActive="10" p:maxIdle="10">
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<!--dataSource屬性指定要用到的連接池--> 
<property name="dataSource" ref="dataSource"/> 
<!--configLocation屬性指定mybatis的核心配置文件--> 
<property name="configLocation" value="classpath:config/Configuration.xml" />
<!-- 所有配置的mapper文件 -->
<property name="mapperLocations" value="classpath*:com/yihaomen/mapper/*.xml" />
</bean> 
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.yihaomen.inter" /> 
</bean>

不知道為什么,一旦我用了 MapperScannerConfigurer 去掃描所有的mapper 接口時(shí),數(shù)據(jù)庫配置datasource 就不能用讀取database.properties文件了。報(bào)錯(cuò): Cannot load JDBC driver class '${jdbc.driverClassName}',網(wǎng)上有人說在spring 3.1.1 下用 sqlSessionFactionBean 注入可以解決,但我用 spring 3.1.3 還是有問題,所以只好把數(shù)據(jù)庫連接信息直接配置在了XML 文件里面。

4. 編寫 controller 層

程序代碼

package com.yihaomen.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.yihaomen.inter.IUserOperation;
import com.yihaomen.model.Article;
@Controller
@RequestMapping("/article")
public class UserController {
@Autowired
IUserOperation userMapper;
@RequestMapping("/list")
public ModelAndView listall(HttpServletRequest request,HttpServletResponse response){
List<Article> articles=userMapper.getUserArticles(1); 
ModelAndView mav=new ModelAndView("list");
mav.addObject("articles",articles);
return mav;
}
}

5. 頁面文件:

< c:forEach items="${articles}" var="item"> 
${item.id }--${item.title }--${item.content }<br />
</c:forEach>

運(yùn)行結(jié)果:

當(dāng)然還有 mybatis 的Configure.xml 配置文件,與上一講的差不多,唯一不同的就是不用再配置類似如下的: <mapper resource="com/yihaomen/mapper/User.xml"/> ,所有這些都交給 在配置 sqlSessionFactory 的時(shí)候,由 <property name="mapperLocations" value="classpath*:com/yihaomen/mapper/*.xml" /> 去導(dǎo)入了。

數(shù)據(jù)庫下載:

下載文件spring mvc 數(shù)據(jù)庫測試文件

mybatis實(shí)戰(zhàn)教程(mybatis in action)之七:實(shí)現(xiàn)mybatis分頁(源碼下載)

上一篇文章里已經(jīng)講到了mybatis與spring MVC的集成,并且做了一個(gè)列表展示,顯示出所有article 列表,但沒有用到分頁,在實(shí)際的項(xiàng)目中,分頁是肯定需要的。而且是物理分頁,不是內(nèi)存分頁。對于物理分頁方案,不同的數(shù)據(jù)庫,有不同的實(shí)現(xiàn)方法,對于mysql 來說 就是利用 limit offset,pagesize 方式來實(shí)現(xiàn)的。oracle 是通過rownum 來實(shí)現(xiàn)的,如果你熟悉相關(guān)數(shù)據(jù)庫的操作,是一樣的很好擴(kuò)展,本文以mysql 為例子來講述.先看一下效果圖(源代碼在文章最后提供下載):

實(shí)現(xiàn)mybatis 物理分頁,一個(gè)最簡單的方式是,是在你的mapper的SQL語句中直接寫類似如下方式 :

程序代碼

<select id="getUserArticles" parameterType="Your_params" resultMap="resultUserArticleList">
select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article
where user.id=article.userid and user.id=#{id} limit #{offset},#{pagesize}
</select>

請注意這里的 parameterType 是你傳入的參數(shù)類,或者map ,里面包含了offset,pagesize ,和其他你需要的參數(shù),用這種方式,肯定可以實(shí)現(xiàn)分頁。這是簡單的一種方式。但更通用的一種方式是用 mybatis 插件的方式. 參考了網(wǎng)上的很多資料 ,mybatis plugin 方面的資料。寫自己的插件.

程序代碼

package com.yihaomen.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.xml.bind.PropertyException;
import org.apache.ibatis.builder.xml.dynamic.ForEachSqlNode;
import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.ExecutorException;
import org.apache.ibatis.executor.statement.BaseStatementHandler;
import org.apache.ibatis.executor.statement.RoutingStatementHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.property.PropertyTokenizer;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.TypeHandlerRegistry;
@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class }) })
public class PagePlugin implements Interceptor {
private static String dialect = "";
private static String pageSqlId = "";
@SuppressWarnings("unchecked")
public Object intercept(Invocation ivk) throws Throwable {
if (ivk.getTarget() instanceof RoutingStatementHandler) {
RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk
.getTarget();
BaseStatementHandler delegate = (BaseStatementHandler) ReflectHelper
.getValueByFieldName(statementHandler, "delegate");
MappedStatement mappedStatement = (MappedStatement) ReflectHelper
.getValueByFieldName(delegate, "mappedStatement");
if (mappedStatement.getId().matches(pageSqlId)) {
BoundSql boundSql = delegate.getBoundSql();
Object parameterObject = boundSql.getParameterObject();
if (parameterObject == null) {
throw new NullPointerException("parameterObject error");
} else {
Connection connection = (Connection) ivk.getArgs()[0];
String sql = boundSql.getSql();
String countSql = "select count(0) from (" + sql + ") myCount";
System.out.println("總數(shù)sql 語句:"+countSql);
PreparedStatement countStmt = connection
.prepareStatement(countSql);
BoundSql countBS = new BoundSql(
mappedStatement.getConfiguration(), countSql,
boundSql.getParameterMappings(), parameterObject);
setParameters(countStmt, mappedStatement, countBS,
parameterObject);
ResultSet rs = countStmt.executeQuery();
int count = 0;
if (rs.next()) {
count = rs.getInt(1);
}
rs.close();
countStmt.close();
PageInfo page = null;
if (parameterObject instanceof PageInfo) {
page = (PageInfo) parameterObject;
page.setTotalResult(count);
} else if(parameterObject instanceof Map){
Map<String, Object> map = (Map<String, Object>)parameterObject;
page = (PageInfo)map.get("page");
if(page == null)
page = new PageInfo();
page.setTotalResult(count);
}else {
Field pageField = ReflectHelper.getFieldByFieldName(
parameterObject, "page");
if (pageField != null) {
page = (PageInfo) ReflectHelper.getValueByFieldName(
parameterObject, "page");
if (page == null)
page = new PageInfo();
page.setTotalResult(count);
ReflectHelper.setValueByFieldName(parameterObject,
"page", page);
} else {
throw new NoSuchFieldException(parameterObject
.getClass().getName());
}
}
String pageSql = generatePageSql(sql, page);
System.out.println("page sql:"+pageSql);
ReflectHelper.setValueByFieldName(boundSql, "sql", pageSql);
}
}
}
return ivk.proceed();
}
private void setParameters(PreparedStatement ps,
MappedStatement mappedStatement, BoundSql boundSql,
Object parameterObject) throws SQLException {
ErrorContext.instance().activity("setting parameters")
.object(mappedStatement.getParameterMap().getId());
List<ParameterMapping> parameterMappings = boundSql
.getParameterMappings();
if (parameterMappings != null) {
Configuration configuration = mappedStatement.getConfiguration();
TypeHandlerRegistry typeHandlerRegistry = configuration
.getTypeHandlerRegistry();
MetaObject metaObject = parameterObject == null ? null
: configuration.newMetaObject(parameterObject);
for (int i = 0; i < parameterMappings.size(); i++) {
ParameterMapping parameterMapping = parameterMappings.get(i);
if (parameterMapping.getMode() != ParameterMode.OUT) {
Object value;
String propertyName = parameterMapping.getProperty();
PropertyTokenizer prop = new PropertyTokenizer(propertyName);
if (parameterObject == null) {
value = null;
} else if (typeHandlerRegistry
.hasTypeHandler(parameterObject.getClass())) {
value = parameterObject;
} else if (boundSql.hasAdditionalParameter(propertyName)) {
value = boundSql.getAdditionalParameter(propertyName);
} else if (propertyName
.startsWith(ForEachSqlNode.ITEM_PREFIX)
&& boundSql.hasAdditionalParameter(prop.getName())) {
value = boundSql.getAdditionalParameter(prop.getName());
if (value != null) {
value = configuration.newMetaObject(value)
.getValue(
propertyName.substring(prop
.getName().length()));
}
} else {
value = metaObject == null ? null : metaObject
.getValue(propertyName);
}
TypeHandler typeHandler = parameterMapping.getTypeHandler();
if (typeHandler == null) {
throw new ExecutorException(
"There was no TypeHandler found for parameter "
+ propertyName + " of statement "
+ mappedStatement.getId());
}
typeHandler.setParameter(ps, i + 1, value,
parameterMapping.getJdbcType());
}
}
}
}
private String generatePageSql(String sql, PageInfo page) {
if (page != null && (dialect !=null || !dialect.equals(""))) {
StringBuffer pageSql = new StringBuffer();
if ("mysql".equals(dialect)) {
pageSql.append(sql);
pageSql.append(" limit " + page.getCurrentResult() + ","
+ page.getShowCount());
} else if ("oracle".equals(dialect)) {
pageSql.append("select * from (select tmp_tb.*,ROWNUM row_id from (");
pageSql.append(sql);
pageSql.append(") tmp_tb where ROWNUM<=");
pageSql.append(page.getCurrentResult() + page.getShowCount());
pageSql.append(") where row_id>");
pageSql.append(page.getCurrentResult());
}
return pageSql.toString();
} else {
return sql;
}
}
public Object plugin(Object arg0) {
// TODO Auto-generated method stub
return Plugin.wrap(arg0, this);
}
public void setProperties(Properties p) {
dialect = p.getProperty("dialect");
if (dialect ==null || dialect.equals("")) {
try {
throw new PropertyException("dialect property is not found!");
} catch (PropertyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
pageSqlId = p.getProperty("pageSqlId");
if (dialect ==null || dialect.equals("")) {
try {
throw new PropertyException("pageSqlId property is not found!");
} catch (PropertyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

此插件有兩個(gè)輔助類:PageInfo,ReflectHelper,你可以下載源代碼參考。
寫了插件之后,當(dāng)然需要在 mybatis 的配置文件Configuration.xml 里配置這個(gè)插件

程序代碼

<plugins>
<plugin interceptor="com.yihaomen.util.PagePlugin">
<property name="dialect" value="mysql" />
<property name="pageSqlId" value=".*ListPage.*" />
</plugin>
</plugins>

請注意,這個(gè)插件定義了一個(gè)規(guī)則,也就是在mapper中sql語句的id 必須包含ListPage才能被攔截。否則將不會(huì)分頁處理.

插件寫好了,現(xiàn)在就可以在 spring mvc 中的controller 層中寫一個(gè)方法來測試這個(gè)分頁:

程序代碼

@RequestMapping("/pagelist")
public ModelAndView pageList(HttpServletRequest request,HttpServletResponse response){
int currentPage = request.getParameter("page")==null?1:Integer.parseInt(request.getParameter("page"));
int pageSize = 3;
if (currentPage<=0){
currentPage =1;
}
int currentResult = (currentPage-1) * pageSize;
System.out.println(request.getRequestURI());
System.out.println(request.getQueryString());
PageInfo page = new PageInfo();
page.setShowCount(pageSize);
page.setCurrentResult(currentResult);
List<Article> articles=iUserOperation.selectArticleListPage(page,1);
System.out.println(page);
int totalCount = page.getTotalResult();
int lastPage=0;
if (totalCount % pageSize==0){
lastPage = totalCount % pageSize;
}
else{
lastPage =1+ totalCount / pageSize;
}
if (currentPage>=lastPage){
currentPage =lastPage;
}
String pageStr = "";
pageStr=String.format("<a href=\"%s\">上一頁</a> <a href=\"%s\">下一頁</a>",
request.getRequestURI()+"?page="+(currentPage-1),request.getRequestURI()+"?page="+(currentPage+1) );
//制定視圖,也就是list.jsp
ModelAndView mav=new ModelAndView("list");
mav.addObject("articles",articles);
mav.addObject("pageStr",pageStr);
return mav;
}

然后運(yùn)行程序,進(jìn)入分頁頁面,你就可以看到結(jié)果了:

相關(guān)jar 包下載,請到下載這里例子中的jar
http://www.yihaomen.com/article/java/318.htm (文章最后有源代碼下載,里面有jar 包,拷貝到上面源代碼里面所需要的lib 目錄下.)

另外,你還得在前面提到的數(shù)據(jù)庫artilce表里面,多插入一些記錄,分頁效果就更好。

mybatis實(shí)戰(zhàn)教程(mybatis in action)之八:mybatis 動(dòng)態(tài)sql語句

mybatis 的動(dòng)態(tài)sql語句是基于OGNL表達(dá)式的??梢苑奖愕脑?sql 語句中實(shí)現(xiàn)某些邏輯. 總體說來mybatis 動(dòng)態(tài)SQL 語句主要有以下幾類:

1. if 語句 (簡單的條件判斷)
2. choose (when,otherwize) ,相當(dāng)于java 語言中的 switch ,與 jstl 中的choose 很類似.
3. trim (對包含的內(nèi)容加上 prefix,或者 suffix 等,前綴,后綴)
4. where (主要是用來簡化sql語句中where條件判斷的,能智能的處理 and or ,不必?fù)?dān)心多余導(dǎo)致語法錯(cuò)誤)
5. set (主要用于更新時(shí))
6. foreach (在實(shí)現(xiàn) mybatis in 語句查詢時(shí)特別有用)

下面分別介紹這幾種處理方式

1. mybaits if 語句處理

程序代碼

<select id="dynamicIfTest" parameterType="Blog" resultType="Blog">
select * from t_blog where 1 = 1
<if test="title != null">
and title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
and owner = #{owner}
</if>
</select>

這條語句的意思非常簡單,如果你提供了title參數(shù),那么就要滿足title=#{title},同樣如果你提供了Content和Owner的時(shí)候,它們也需要滿足相應(yīng)的條件,之后就是返回滿足這些條件的所有Blog,這是非常有用的一個(gè)功能,以往我們使用其他類型框架或者直接使用JDBC的時(shí)候, 如果我們要達(dá)到同樣的選擇效果的時(shí)候,我們就需要拼SQL語句,這是極其麻煩的,比起來,上述的動(dòng)態(tài)SQL就要簡單多了

2.2. choose (when,otherwize) ,相當(dāng)于java 語言中的 switch ,與 jstl 中的choose 很類似

程序代碼

<select id="dyamicChooseTest" parameterType="Blog" resultType="Blog">
select * from t_blog where 1 = 1 
<choose>
<when test="title != null">
and title = #{title}
</when>
<when test="content != null">
and content = #{content}
</when>
<otherwise>
and owner = "owner1"
</otherwise>
</choose>
</select>

when元素表示當(dāng)when中的條件滿足的時(shí)候就輸出其中的內(nèi)容,跟JAVA中的switch效果差不多的是按照條件的順序,當(dāng)when中有條件滿足的時(shí)候,就會(huì)跳出choose,即所有的when和otherwise條件中,只有一個(gè)會(huì)輸出,當(dāng)所有的我很條件都不滿足的時(shí)候就輸出otherwise中的內(nèi)容。所以上述語句的意思非常簡單, 當(dāng)title!=null的時(shí)候就輸出and titlte = #{title},不再往下判斷條件,當(dāng)title為空且content!=null的時(shí)候就輸出and content = #{content},當(dāng)所有條件都不滿足的時(shí)候就輸出otherwise中的內(nèi)容。

3.trim (對包含的內(nèi)容加上 prefix,或者 suffix 等,前綴,后綴)

程序代碼

<select id="dynamicTrimTest" parameterType="Blog" resultType="Blog">
select * from t_blog 
<trim prefix="where" prefixOverrides="and |or">
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
or owner = #{owner}
</if>
</trim>
</select>

trim元素的主要功能是可以在自己包含的內(nèi)容前加上某些前綴,也可以在其后加上某些后綴,與之對應(yīng)的屬性是prefix和suffix;可以把包含內(nèi)容的首部某些內(nèi)容覆蓋,即忽略,也可以把尾部的某些內(nèi)容覆蓋,對應(yīng)的屬性是prefixOverrides和suffixOverrides;正因?yàn)閠rim有這樣的功能,所以我們也可以非常簡單的利用trim來代替where元素的功能

4. where (主要是用來簡化sql語句中where條件判斷的,能智能的處理 and or 條件

程序代碼

<select id="dynamicWhereTest" parameterType="Blog" resultType="Blog">
select * from t_blog 
<where>
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
and owner = #{owner}
</if>
</where>
</select>

where元素的作用是會(huì)在寫入where元素的地方輸出一個(gè)where,另外一個(gè)好處是你不需要考慮where元素里面的條件輸出是什么樣子的,MyBatis會(huì)智能的幫你處理,如果所有的條件都不滿足那么MyBatis就會(huì)查出所有的記錄,如果輸出后是and 開頭的,MyBatis會(huì)把第一個(gè)and忽略,當(dāng)然如果是or開頭的,MyBatis也會(huì)把它忽略;此外,在where元素中你不需要考慮空格的問題,MyBatis會(huì)智能的幫你加上。像上述例子中,如果title=null, 而content != null,那么輸出的整個(gè)語句會(huì)是select * from t_blog where content = #{content},而不是select * from t_blog where and content = #{content},因?yàn)镸yBatis會(huì)智能的把首個(gè)and 或 or 給忽略。

5.set (主要用于更新時(shí))

程序代碼

<update id="dynamicSetTest" parameterType="Blog">
update t_blog
<set>
<if test="title != null">
title = #{title},
</if>
<if test="content != null">
content = #{content},
</if>
<if test="owner != null">
owner = #{owner}
</if>
</set>
where id = #{id}
</update>

set元素主要是用在更新操作的時(shí)候,它的主要功能和where元素其實(shí)是差不多的,主要是在包含的語句前輸出一個(gè)set,然后如果包含的語句是以逗號(hào)結(jié)束的話將會(huì)把該逗號(hào)忽略,如果set包含的內(nèi)容為空的話則會(huì)出錯(cuò)。有了set元素我們就可以動(dòng)態(tài)的更新那些修改了的字段

6. foreach (在實(shí)現(xiàn) mybatis in 語句查詢時(shí)特別有用)

foreach的主要用在構(gòu)建in條件中,它可以在SQL語句中進(jìn)行迭代一個(gè)集合。foreach元素的屬性主要有item,index,collection,open,separator,close。item表示集合中每一個(gè)元素進(jìn)行迭代時(shí)的別名,index指定一個(gè)名字,用于表示在迭代過程中,每次迭代到的位置,open表示該語句以什么開始,separator表示在每次進(jìn)行迭代之間以什么符號(hào)作為分隔符,close表示以什么結(jié)束,在使用foreach的時(shí)候最關(guān)鍵的也是最容易出錯(cuò)的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:
如果傳入的是單參數(shù)且參數(shù)類型是一個(gè)List的時(shí)候,collection屬性值為list
如果傳入的是單參數(shù)且參數(shù)類型是一個(gè)array數(shù)組的時(shí)候,collection的屬性值為array
如果傳入的參數(shù)是多個(gè)的時(shí)候,我們就需要把它們封裝成一個(gè)Map了,當(dāng)然單參數(shù)也可以封裝成map,實(shí)際上如果你在傳入?yún)?shù)的時(shí)候,在MyBatis里面也是會(huì)把它封裝成一個(gè)Map的,map的key就是參數(shù)名,所以這個(gè)時(shí)候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key

1.1.單參數(shù)List的類型

程序代碼

<select id="dynamicForeachTest" resultType="Blog">
select * from t_blog where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

上述collection的值為list,對應(yīng)的Mapper是這樣的

程序代碼

public List<Blog> dynamicForeachTest(List<Integer> ids); 

測試代碼

@Test
public void dynamicForeachTest() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(3);
ids.add(6);
List<Blog> blogs = blogMapper.dynamicForeachTest(ids);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}

2.數(shù)組類型的參數(shù)

程序代碼

<select id="dynamicForeach2Test" resultType="Blog">
select * from t_blog where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

對應(yīng)mapper

程序代碼

public List<Blog> dynamicForeach2Test(int[] ids); 

3. Map 類型的參數(shù)

程序代碼

<select id="dynamicForeach3Test" resultType="Blog">
select * from t_blog where title like "%"#{title}"%" and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

mapper 應(yīng)該是這樣的接口:

程序代碼

public List<Blog> dynamicForeach3Test(Map<String, Object> params); 

通過以上方法,就能完成一般的mybatis 的 動(dòng)態(tài)SQL 語句.最常用的就是 if where foreach這幾個(gè),一定要重點(diǎn)掌握.

mybatis實(shí)戰(zhàn)教程(mybatis in action)之九:mybatis 代碼生成工具的使用

mybatis 應(yīng)用程序,需要大量的配置文件,對于一個(gè)成百上千的數(shù)據(jù)庫表來說,完全手工配置,這是一個(gè)很恐怖的工作量. 所以mybatis 官方也推出了一個(gè)mybatis代碼生成工具的jar包. 今天花了一點(diǎn)時(shí)間,按照 mybatis generator 的doc 文檔參考,初步配置出了一個(gè)可以使用的版本,我把源代碼也提供下載,mybatis 代碼生成工具,主要有一下功能:

1.生成pojo 與 數(shù)據(jù)庫結(jié)構(gòu)對應(yīng)
2.如果有主鍵,能匹配主鍵
3.如果沒有主鍵,可以用其他字段去匹配
4.動(dòng)態(tài)select,update,delete 方法
5.自動(dòng)生成接口(也就是以前的dao層)
6.自動(dòng)生成sql mapper,增刪改查各種語句配置,包括動(dòng)態(tài)where語句配置
7.生成Example 例子供參考

下面介紹下詳細(xì)過程

1. 創(chuàng)建測試工程,并配置mybatis代碼生成jar包
下載地址:http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator
mysql 驅(qū)動(dòng)下載:http://dev.mysql.com/downloads/connector/j/
這些jar包,我也會(huì)包含在源代碼里面,可以在文章末尾處,下載源代碼,參考。

用 eclipse 建立一個(gè)dynamic web project。

解壓下載后的 mybatis-generator-core-1.3.2-bundle.zip 文件,其中有兩個(gè)目錄:一個(gè)目錄是文檔目錄docs,主要介紹這個(gè)代碼生成工具如何使用,另一個(gè)是lib目錄,里面的內(nèi)容主要是jar 包,這里我們需要 mybatis-generator-core-1.3.2.jar,這個(gè) jar 包. 將它拷貝到我們剛剛創(chuàng)建的 web工程的 WebContent/WEB-INF/lib 目錄下.在這個(gè)目錄下也放入 mysql 驅(qū)動(dòng)jar包.因?yàn)橛?mysql 做測試的.

2.在數(shù)據(jù)庫中創(chuàng)建測試表

在mybatis數(shù)據(jù)庫中創(chuàng)建 用來測試的category表(如果沒有mybatis這個(gè)數(shù)據(jù)庫,要?jiǎng)?chuàng)建,這是基于前面這個(gè)系列文章而寫的,已經(jīng)有了mybatis 這個(gè)數(shù)據(jù)庫)

程序代碼

Drop TABLE IF EXISTS `category`;
Create TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catname` varchar(50) NOT NULL,
`catdescription` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 配置mybatis 代碼生成工具的配置文件

在創(chuàng)建的web工程中,創(chuàng)建相應(yīng)的package 比如 :
com.yihaomen.inter 用來存放mybatis 接口對象.
com.yihaomen.mapper用來存放sql mapper對應(yīng)的映射,sql語句等.
com.yihaomen.model 用來存放與數(shù)據(jù)庫對應(yīng)的model 。
在用mybatis 代碼生成工具之前,這些目錄必須先創(chuàng)建好,作為一個(gè)好的應(yīng)用程序,這些目錄的創(chuàng)建也是有規(guī)律的。

根據(jù)mybatis代碼生成工具文檔,需要一個(gè)配置文件,這里命名為:mbgConfiguration.xml 放在src 目錄下. 配置文件內(nèi)容如下:

程序代碼

< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
< generatorConfiguration>
<!-- 配置mysql 驅(qū)動(dòng)jar包路徑.用了絕對路徑 -->
<classPathEntry location="D:\Work\Java\eclipse\workspace\myBatisGenerator\WebContent\WEB-INF\lib\mysql-connector-java-5.1.22-bin.jar" />
<context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">
<!-- 為了防止生成的代碼中有很多注釋,比較難看,加入下面的配置控制 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
<property name="suppressDate" value="true" />
</commentGenerator>
<!-- 注釋控制完畢 -->
<!-- 數(shù)據(jù)庫連接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"
userId="root"
password="password">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 數(shù)據(jù)表對應(yīng)的model 層 -->
<javaModelGenerator targetPackage="com.yihaomen.model" targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- sql mapper 隱射配置文件 -->
<sqlMapGenerator targetPackage="com.yihaomen.mapper" targetProject="src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 在ibatis2 中是dao層,但在mybatis3中,其實(shí)就是mapper接口 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.yihaomen.inter" targetProject="src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要對那些數(shù)據(jù)表進(jìn)行生成操作,必須要有一個(gè). -->
<table schema="mybatis" tableName="category" domainObjectName="Category" 
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"> 
</table>
</context>
< /generatorConfiguration>

用一個(gè)main 方法來測試能否用mybatis 成生成剛剛創(chuàng)建的`category`表對應(yīng)的model,sql mapper等內(nèi)容.
創(chuàng)建一個(gè)com.yihaomen.test 的package ,并在此package 下面建立一個(gè)測試的類GenMain:

程序代碼

package com.yihaomen.test;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GenMain {
public static void main(String[] args) {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String genCfg = "/mbgConfiguration.xml";
File configFile = new File(GenMain.class.getResource(genCfg).getFile());
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = null;
try {
config = cp.parseConfiguration(configFile);
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
}
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = null;
try {
myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
} catch (InvalidConfigurationException e) {
e.printStackTrace();
}
try {
myBatisGenerator.generate(null);
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

到此為止,eclipse項(xiàng)目工程圖應(yīng)該如下:

4.運(yùn)行測試的main 方法,生成mybatis 相關(guān)代碼

運(yùn)行GenMain類里的main方法,并刷新 工程,你會(huì)發(fā)現(xiàn) 各自package 目錄下已經(jīng)響應(yīng)生成了對應(yīng)的文件,完全符合mybatis 規(guī)則,效果圖如下:


5.注意事項(xiàng)

如果你想生成example 之類的東西,需要在<table></table>里面去掉

程序代碼

enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"

這部分配置,這是生成Example而用的,一般來說對項(xiàng)目沒有用.

另外生成的sql mapper 等,只是對單表的增刪改查,如果你有多表join操作,你就可以手動(dòng)配置,如果調(diào)用存儲(chǔ)過程,你也需要手工配置. 這時(shí)工作量已經(jīng)少很多了。

如果你想用命令行方式處理,也是可以的.

程序代碼

比如:

java -jar mybatis-generator-core-1.3.2.jar -mbgConfiguration.xm -overwrite

這時(shí),要用絕對路徑才行. 另外mbgConfiguration.xml 配置文件中targetProject 的配置也必須是絕對路徑了。

mybatis SqlSessionDaoSupport的使用

前面的系列mybatis 文章,已經(jīng)基本講到了mybatis的操作,但都是基于mapper隱射操作的,在mybatis 3中這個(gè)mapper 接口貌似充當(dāng)了以前在ibatis 2中的 DAO 層的作用。但事實(shí)上,如果有這個(gè)mapper接口不能完成的工作,或者需要更復(fù)雜的擴(kuò)展的時(shí)候,你就需要自己的DAO 層. 事實(shí)上 mybatis 3 也是支持DAO 層設(shè)計(jì)的,類似于ibatis 2 .下面介紹下.

首先創(chuàng)建一個(gè)com.yihaomen.dao的package.然后在里面分別創(chuàng)建接口UserDAO,以及實(shí)現(xiàn)該接口的UserDAOImpl

程序代碼

package com.yihaomen.dao;
import java.util.List;
import com.yihaomen.model.Article;
public interface UserDAO {
public List<Article> getUserArticles(int userid);
}

程序代碼

package com.yihaomen.dao;
import java.util.List;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import com.yihaomen.model.Article;
@Repository
public class UserDAOImpl extends SqlSessionDaoSupport implements UserDAO {
@Override
public List<Article> getUserArticles(int userid) { 
return this.getSqlSession().selectList("com.yihaomen.inter.IUserOperation.getUserArticles",userid);
}
}

執(zhí)行的SQL 語句采用了命名空間+sql 語句id的方式,后面是參數(shù).

注意繼承了 "SqlSessionDaoSupport" ,利用方法 getSqlSession() 可以得到 SqlSessionTemplate ,從而可以執(zhí)行各種sql語句,類似于hibernatetemplate一樣,至少思路一樣.

如果與spring 3 mvc 集成要用 autowire的話,在daoimpl 類上 加上注解 “@Repository” ,另外還需要在spring 配置文件中加入<context:component-scan base-package="com.yihaomen.dao" /> 這樣在需要調(diào)用的地方,就可以使用autowire自動(dòng)注入了。

當(dāng)然,你也可以按一般程序的思路,創(chuàng)建一個(gè)service 的package, 用service 去調(diào)用 dao層,我這里就沒有做了,因?yàn)楸容^簡單,用類似的方法,也機(jī)注意自動(dòng)注入時(shí),也要配置 <context:component-scan base-package="com.yihaomen.service" /> 等這樣的。

在controller層中測試,直接調(diào)用dao層方法
在controller中加入方法:

程序代碼

@Autowired
UserDAO userDAO;
.......
@RequestMapping("/daolist")
public ModelAndView listalldao(HttpServletRequest request,HttpServletResponse response){
List<Article> articles=userDAO.getUserArticles(1);
//制定視圖,也就是list.jsp
ModelAndView mav=new ModelAndView("list");
mav.addObject("articles",articles);
return mav;
}

這樣可以得到同樣的結(jié)果,而且滿足了一般程序的設(shè)計(jì)方法.代碼結(jié)構(gòu)如下:

以上所述是本文給大家介紹的Mybatis實(shí)戰(zhàn)教程之入門到精通(經(jīng)典)的相關(guān)知識(shí),希望對大家有所幫助。

相關(guān)文章

  • SpringCloud的全鏈路灰度發(fā)布方案詳解

    SpringCloud的全鏈路灰度發(fā)布方案詳解

    這篇文章主要介紹了SpringCloud的全鏈路灰度發(fā)布方案詳解,灰度發(fā)布(又名金絲雀發(fā)布)是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式,灰度發(fā)布可以保證系統(tǒng)的穩(wěn)定性,?在初始灰度的時(shí)候可以發(fā)現(xiàn),?調(diào)整問題,?保證其影響度,需要的朋友可以參考下
    2023-09-09
  • springboot實(shí)現(xiàn)用戶名查找用戶功能

    springboot實(shí)現(xiàn)用戶名查找用戶功能

    本文主要介紹了springboot實(shí)現(xiàn)用戶名查找用戶功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • springboot webflux 過濾器(使用RouterFunction實(shí)現(xiàn))

    springboot webflux 過濾器(使用RouterFunction實(shí)現(xiàn))

    這篇文章主要介紹了springboot webflux 過濾器(使用RouterFunction實(shí)現(xiàn)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 一文詳解MVCC的執(zhí)行原理

    一文詳解MVCC的執(zhí)行原理

    MVCC是一種并發(fā)控制機(jī)制,用于解決數(shù)據(jù)庫并發(fā)訪問中,數(shù)據(jù)一致性問題,它通過在讀寫操作期間保存多個(gè)數(shù)據(jù)版本,以提供并發(fā)事務(wù)間的隔離性,本文將和大家簡單聊聊MVCC的執(zhí)行原理,需要的朋友可以參考下
    2023-12-12
  • Java中字符串String常用方法詳解

    Java中字符串String常用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中字符串String常用方法的相關(guān)資料,String表示字符串類型,是引用數(shù)據(jù)類型不是基本數(shù)據(jù)類型,String是類且是最終類,不能有子類,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例

    java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例

    這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼的相關(guān)資料,最近需要一個(gè)密碼強(qiáng)度正則表達(dá)式在用戶注冊時(shí)校驗(yàn)用戶密碼強(qiáng)度,需要的朋友可以參考下
    2023-08-08
  • 簡述Java編程之關(guān)系操作符

    簡述Java編程之關(guān)系操作符

    這篇文章主要介紹了簡述Java編程中的關(guān)系操作符,同時(shí)對比較類作了簡單介紹,需要的朋友可以參考下
    2017-09-09
  • java實(shí)現(xiàn)圖片水平和垂直翻轉(zhuǎn)效果

    java實(shí)現(xiàn)圖片水平和垂直翻轉(zhuǎn)效果

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片水平和垂直翻轉(zhuǎn)效果,圖片旋轉(zhuǎn)的靈活運(yùn)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 初步了解javafx

    初步了解javafx

    這篇文章主要介紹了初步了解javafx,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • java如何將int數(shù)組轉(zhuǎn)化為Integer數(shù)組

    java如何將int數(shù)組轉(zhuǎn)化為Integer數(shù)組

    這篇文章主要介紹了java如何將int數(shù)組轉(zhuǎn)化為Integer數(shù)組,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

精品久久久久久高潮| 中文字幕在线欧美精品| 成人免费公开视频无毒| 极品性荡少妇一区二区色欲| 啪啪啪啪啪啪啪免费视频| 五十路av熟女松本翔子| 欲乱人妻少妇在线视频裸| 亚洲图库另类图片区| 亚洲成人av一区久久| 91色老99久久九九爱精品| 啪啪啪啪啪啪啪啪啪啪黄色| 首之国产AV医生和护士小芳| 亚洲激情,偷拍视频| 中文字幕一区二区人妻电影冢本 | 成人av在线资源网站| 啊慢点鸡巴太大了啊舒服视频| 国产精品视频男人的天堂| 成人蜜桃美臀九一一区二区三区 | 天天夜天天日天天日| 喷水视频在线观看这里只有精品 | 日本午夜福利免费视频| 天天射夜夜操综合网| 亚洲国产精品免费在线观看| 亚洲一区二区激情在线| av黄色成人在线观看| 欧洲黄页网免费观看| 亚洲欧美一区二区三区电影| 国产麻豆剧果冻传媒app| 国产黑丝高跟鞋视频在线播放| 亚洲最大黄 嗯色 操 啊| 一区二区在线观看少妇| 孕妇奶水仑乱A级毛片免费看| 高清一区二区欧美系列| 国产精品一区二区av国| 精品国产午夜视频一区二区| 天天想要天天操天天干| 91桃色成人网络在线观看| 搡老妇人老女人老熟女| 区一区二区三国产中文字幕| 亚洲区美熟妇久久久久| 国产精品污污污久久| 欧美日韩不卡一区不区二区| 久久久精品国产亚洲AV一| 日本真人性生活视频免费看| 一本久久精品一区二区| 综合国产成人在线观看| 亚洲国产在线精品国偷产拍| 丝袜长腿第一页在线| 欧美亚洲中文字幕一区二区三区| 欧美在线一二三视频| 精品国产午夜视频一区二区| 黄色大片男人操女人逼| 99一区二区在线观看| 亚洲欧美综合在线探花| 超pen在线观看视频公开97| 91人妻精品一区二区久久| 中文字幕在线永久免费播放 | 91国产资源在线视频| 亚洲 清纯 国产com| 日本精品美女在线观看| 亚洲午夜福利中文乱码字幕| 久草视频在线一区二区三区资源站 | 亚国产成人精品久久久| 国产性感美女福利视频| 亚洲va国产va欧美va在线| 中文字幕av一区在线观看| 99精品国产aⅴ在线观看| 熟女人妻在线中出观看完整版| 天天干天天插天天谢| 欧美香蕉人妻精品一区二区| 黄色三级网站免费下载| 婷婷五月亚洲综合在线| 精品日产卡一卡二卡国色天香| 欧美交性又色又爽又黄麻豆| 黄色片一级美女黄色片| 亚洲av色香蕉一区二区三区| 国产综合精品久久久久蜜臀| 岛国毛片视频免费在线观看| 五十路息与子猛烈交尾视频| 亚洲天堂成人在线观看视频网站 | 亚洲精品精品国产综合| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 黑人借宿ntr人妻的沦陷2| 亚洲一区二区三区偷拍女厕91| 91精品国产麻豆国产| 亚洲精品麻豆免费在线观看| 91天堂精品一区二区| 国产高清在线观看1区2区| 任你操视频免费在线观看| 少妇露脸深喉口爆吞精| 亚洲色偷偷综合亚洲AV伊人| 午夜国产福利在线观看| 久久久久久久精品老熟妇| 午夜激情高清在线观看| 成人网18免费视频版国产| 香蕉aⅴ一区二区三区| 精品国产污污免费网站入口自| 免费69视频在线看| 姐姐的朋友2在线观看中文字幕| 99久久久无码国产精品性出奶水| 2025年人妻中文字幕乱码在线| 亚洲熟妇久久无码精品| 亚洲1069综合男同| 亚洲一区二区三区uij| 综合国产成人在线观看| 国产乱弄免费视频观看| 老司机福利精品免费视频一区二区 | 国产高清精品极品美女| 亚洲综合乱码一区二区| 国产精品福利小视频a| 亚洲粉嫩av一区二区三区| 动漫av网站18禁| 男人在床上插女人视频| 国产在线免费观看成人| 人人爽亚洲av人人爽av| 亚洲精品欧美日韩在线播放| 国产一区二区久久久裸臀| av天堂中文免费在线| 大陆胖女人与丈夫操b国语高清| 欧美偷拍自拍色图片| 高清一区二区欧美系列| 亚洲精品在线资源站| 精品国产午夜视频一区二区| 亚洲天堂有码中文字幕视频| 天天操夜夜骑日日摸| 国产夫妻视频在线观看免费| 狠狠嗨日韩综合久久| 欧美viboss性丰满| 69精品视频一区二区在线观看| 大香蕉伊人中文字幕| 91精品国产综合久久久蜜| 99国产精品窥熟女精品| 日本黄在免费看视频| 中文字幕一区二 区二三区四区| 爆乳骚货内射骚货内射在线| 欧美成人精品欧美一级黄色| 午夜国产福利在线观看| av老司机亚洲一区二区| av老司机精品在线观看| 婷婷六月天中文字幕| 天天操天天操天天碰| 午夜91一区二区三区| 爱有来生高清在线中文字幕| 日本三极片视频网站观看| 日韩欧美制服诱惑一区在线| 国产精品三级三级三级| 1024久久国产精品| 激情国产小视频在线| 888亚洲欧美国产va在线播放| 久久精品国产999| 日韩国产乱码中文字幕| 91免费观看在线网站| 国产亚洲欧美另类在线观看| 亚洲中文字字幕乱码| 精品久久久久久久久久久久人妻| 亚洲偷自拍高清视频| 91精品国产91青青碰| 欧美成人猛片aaaaaaa| 日本韩国免费一区二区三区视频| 人妻丝袜榨强中文字幕| 男女之间激情网午夜在线| 国语对白xxxx乱大交| ka0ri在线视频| 漂亮 人妻被中出中文| 少妇高潮一区二区三区| 成年人啪啪视频在线观看| 亚洲成人黄色一区二区三区| 国产麻豆91在线视频| 韩国AV无码不卡在线播放| 午夜福利资源综合激情午夜福利资 | 少妇人妻真实精品视频| 护士特殊服务久久久久久久| 北条麻妃高跟丝袜啪啪| 干逼又爽又黄又免费的视频| 日本丰满熟妇大屁股久久| 成人区人妻精品一区二视频| 亚洲中文精品字幕在线观看| 在线视频国产欧美日韩| 亚洲精品久久视频婷婷| 最新日韩av传媒在线| 97人妻夜夜爽二区欧美极品| 日韩成人免费电影二区| 五十路熟女av天堂| 国产高清女主播在线| 9色精品视频在线观看| 天天通天天透天天插| 免费十精品十国产网站| 19一区二区三区在线播放| 欧美专区日韩专区国产专区| 国产亚洲四十路五十路| 一区二区三区久久久91| 国产精品久久久久久久久福交 | 免费十精品十国产网站| 加勒比视频在线免费观看| 美女骚逼日出水来了| yellow在线播放av啊啊啊 | 青青青激情在线观看视频| 91免费观看在线网站| 不卡一区一区三区在线| 精品视频国产在线观看| 91大神福利视频网| 亚洲天堂有码中文字幕视频 | 国产日本精品久久久久久久| 中文字幕一区二区三区人妻大片| 亚洲av自拍偷拍综合| 中文字幕第三十八页久久 | 国产精品视频资源在线播放 | 人妻少妇精品久久久久久| 久久这里只有精品热视频| 狠狠躁狠狠爱网站视频| 色婷婷久久久久swag精品| 亚洲精品精品国产综合| 青青草原网站在线观看| 日本午夜福利免费视频| 午夜精品亚洲精品五月色| 一级黄片大鸡巴插入美女| 国产在线自在拍91国语自产精品| 黑人解禁人妻叶爱071| 又黄又刺激的午夜小视频| 三级黄色亚洲成人av| 久久久久久久亚洲午夜综合福利| 欧美日韩v中文在线| 最新激情中文字幕视频| 欧美黑人与人妻精品| 国产精品亚洲а∨天堂免| 超碰公开大香蕉97| okirakuhuhu在线观看| 久久久久久99国产精品| 99人妻视频免费在线| 成年美女黄网站18禁久久| 男人操女人的逼免费视频| 人妻素人精油按摩中出| 日本18禁久久久久久| 一区二区三区四区视频| 97成人免费在线观看网站| 九色精品视频在线播放| 一区二区三区蜜臀在线| 黄色中文字幕在线播放| 久久久久只精品国产三级| 顶级尤物粉嫩小尤物网站| 欧美 亚洲 另类综合| 精品久久久久久久久久久a√国产| 大鸡吧插逼逼视频免费看| 亚洲人妻国产精品综合| 硬鸡巴动态操女人逼视频| 在线视频免费观看网| 大肉大捧一进一出好爽在线视频 | 在线网站你懂得老司机| 最新欧美一二三视频| 中文字幕无码日韩专区免费| 久久久久久国产精品| 青娱乐极品视频青青草| 中文字幕乱码av资源| 一区二区三区久久中文字幕| 亚洲天堂精品久久久| 国产日韩欧美美利坚蜜臀懂色| 自拍偷拍日韩欧美一区二区| 国产一区av澳门在线观看| 国产综合高清在线观看| 视频 一区二区在线观看| 中文字母永久播放1区2区3区| 久久精品亚洲国产av香蕉| 亚洲国产欧美国产综合在线| av男人天堂狠狠干| 风流唐伯虎电视剧在线观看 | 超级av免费观看一区二区三区| 日本韩国免费福利精品| 一区二区视频在线观看视频在线| 欧美老鸡巴日小嫩逼| 黄色大片免费观看网站| 久久精品国产23696| 99re6热在线精品| 亚洲国产最大av综合| 丝袜美腿欧美另类 中文字幕| 久久久超爽一二三av| 青青擦在线视频国产在线| 天天日天天鲁天天操| 国产精品视频一区在线播放| 偷青青国产精品青青在线观看 | 五十路人妻熟女av一区二区| 久久这里有免费精品| 大骚逼91抽插出水视频| 午夜国产福利在线观看| 欧美精品伦理三区四区| 免费在线看的黄片视频| 欧美一区二区三区激情啪啪啪| 欧美专区日韩专区国产专区| 日本人妻少妇18—xx| 国产精品久久久久网| 日韩精品中文字幕在线| 黑人巨大精品欧美视频| 日韩成人综艺在线播放| 日本一区美女福利视频| 国产精选一区在线播放| 久久久久久九九99精品| 亚洲粉嫩av一区二区三区| 激情色图一区二区三区| 亚洲成人熟妇一区二区三区| 91老熟女连续高潮对白| 中文字幕中文字幕 亚洲国产| 亚洲狠狠婷婷综合久久app| 亚洲成av人无码不卡影片一| 天天摸天天亲天天舔天天操天天爽| 91精品资源免费观看| 超污视频在线观看污污污| 亚洲免费国产在线日韩| 婷婷色中文亚洲网68| 一区二区三区日本伦理| 黄色av网站免费在线| 免费十精品十国产网站| 在线观看免费视频色97| 国产精品国产三级国产午| 淫秽激情视频免费观看| 97少妇精品在线观看| 一级a看免费观看网站| 亚洲日本一区二区三区 | 91亚洲手机在线视频播放| 在线观看国产网站资源| 在线观看视频污一区| 天天日天天干天天舔天天射| 男人的天堂av日韩亚洲| 欧美日本aⅴ免费视频| 国产欧美精品一区二区高清| 97a片免费在线观看| 亚洲欧美一区二区三区爱爱动图 | 亚洲精品欧美日韩在线播放| 欧美激情精品在线观看| 免费一级黄色av网站| 国产精品久久9999| 天天操夜夜操天天操天天操| 日本精品视频不卡一二三| 99一区二区在线观看| 操操网操操伊剧情片中文字幕网| 中文字幕免费福利视频6| av成人在线观看一区| 久碰精品少妇中文字幕av | 婷婷久久久久深爱网| 亚洲1区2区3区精华液| 国产V亚洲V天堂无码欠欠| 天天干天天啪天天舔| av成人在线观看一区| 久久午夜夜伦痒痒想咳嗽P| 九色porny九色9l自拍视频| 色综合久久五月色婷婷综合| 免费看高清av的网站| 爆乳骚货内射骚货内射在线| 一区二区三区美女毛片| 大鸡吧插入女阴道黄色片| 色哟哟国产精品入口| 93精品视频在线观看| 中文字母永久播放1区2区3区| 亚洲2021av天堂| 视频二区在线视频观看| 成人av免费不卡在线观看| 国产精品午夜国产小视频| 青青青青青操视频在线观看| 色呦呦视频在线观看视频| 亚洲av极品精品在线观看| 青青草成人福利电影| 日韩视频一区二区免费观看| 久久精品在线观看一区二区| 欧美视频一区免费在线| 狠狠地躁夜夜躁日日躁| 免费人成黄页网站在线观看国产| 午夜激情高清在线观看| 久精品人妻一区二区三区| 亚洲av黄色在线网站| 大陆av手机在线观看| 中文字幕熟女人妻久久久| 最新国产精品拍在线观看| 国产日韩精品免费在线| 天堂女人av一区二区| 端庄人妻堕落挣扎沉沦| 亚洲综合一区二区精品久久| 护士特殊服务久久久久久久| 久久久久久性虐视频| 亚洲精品国产在线电影| 国产 在线 免费 精品| 漂亮 人妻被中出中文| 欧美精品黑人性xxxx| 动漫av网站18禁| 天天日天天鲁天天操| 亚洲一级 片内射视正片| 最新97国产在线视频| 一区二区三区另类在线| 国产露脸对白在线观看| 97人妻夜夜爽二区欧美极品| 97资源人妻免费在线视频| 中文字幕亚洲中文字幕| 青春草视频在线免费播放| 好吊视频—区二区三区| 亚洲精品午夜久久久久| 久草极品美女视频在线观看| 成年美女黄网站18禁久久| 欧美少妇性一区二区三区| 人妻熟女在线一区二区| 91国产在线视频免费观看| 青青青青爽手机在线| 顶级尤物粉嫩小尤物网站| 毛片av在线免费看| 日韩写真福利视频在线观看| 日韩一个色综合导航| 日曰摸日日碰夜夜爽歪歪| 偷拍3456eee| 国产美女一区在线观看| 欧美在线精品一区二区三区视频| 伊人情人综合成人久久网小说| 99精品一区二区三区的区| 插小穴高清无码中文字幕| 19一区二区三区在线播放| 亚洲欧美激情人妻偷拍| 亚洲精品一区二区三区老狼| 天天日天天添天天爽| 国产丰满熟女成人视频| 国产91精品拍在线观看| weyvv5国产成人精品的视频| 亚洲一区二区久久久人妻| 青娱乐蜜桃臀av色| 在线视频免费观看网| 在线观看视频 你懂的| 免费男阳茎伸入女阳道视频| 无码精品一区二区三区人| 又黄又刺激的午夜小视频| 一区二区久久成人网| 人妻3p真实偷拍一二区| av网址在线播放大全| huangse网站在线观看| 中文字幕一区的人妻欧美日韩| 日韩美女综合中文字幕pp| 久久久久久97三级| 蜜桃色婷婷久久久福利在线| 中文字幕在线观看国产片| 欧美综合婷婷欧美综合| 丝袜亚洲另类欧美变态| 亚洲护士一区二区三区| 人人人妻人人澡人人| 国产一区二区久久久裸臀| 后入美女人妻高清在线| heyzo蜜桃熟女人妻| 五月色婷婷综合开心网4438| 午夜美女少妇福利视频| 久青青草视频手机在线免费观看 | 超碰在线中文字幕一区二区| 日韩精品啪啪视频一道免费| 黄色大片男人操女人逼| 一区二区三区美女毛片| 欧美日韩在线精品一区二区三| 成人性爱在线看四区| 亚洲精品午夜久久久久| 国产又粗又猛又爽又黄的视频美国| 中文字幕在线乱码一区二区 | 国产av一区2区3区| 国产极品精品免费视频| 麻豆性色视频在线观看| 黄色黄色黄片78在线| 免费黄色成人午夜在线网站| 国产一区二区火爆视频| 中文字幕乱码人妻电影| 中文字幕在线欧美精品| 欧美成人黄片一区二区三区| 成人av亚洲一区二区| 亚洲成人av一区久久| 天天干夜夜操啊啊啊| 日本高清成人一区二区三区| v888av在线观看视频| 国产又粗又猛又爽又黄的视频美国| 天天躁日日躁狠狠躁躁欧美av| 亚洲熟妇久久无码精品| 在线观看av2025| 人妻少妇性色欲欧美日韩| 欧洲精品第一页欧洲精品亚洲 | 又大又湿又爽又紧A视频| 午夜激情久久不卡一区二区 | 黑人性生活视频免费看| 中文字幕日韩无敌亚洲精品| 人妻久久无码中文成人| 黑人性生活视频免费看| 欲乱人妻少妇在线视频裸| 亚洲中文字幕综合小综合| weyvv5国产成人精品的视频| 好吊视频—区二区三区| 18禁污污污app下载| 亚洲av自拍偷拍综合| 亚洲中文字幕综合小综合| 中文字幕综合一区二区| 最新国产精品网址在线观看| 亚洲 中文 自拍 另类 欧美| 国产熟妇一区二区三区av| 视频一区二区在线免费播放| 岛国免费大片在线观看| 一区二区三区av高清免费| 熟女妇女老妇一二三区| 欧美日韩不卡一区不区二区| 亚洲精品欧美日韩在线播放| 久草视频首页在线观看| 久草视频在线一区二区三区资源站| 激情小视频国产在线| 成人午夜电影在线观看 久久| 一区二区三区综合视频| 久草电影免费在线观看| 亚洲成高清a人片在线观看| 清纯美女在线观看国产| 精品黑人巨大在线一区| 欧美美女人体视频一区| 国产成人精品av网站| 欧美在线偷拍视频免费看| 特黄老太婆aa毛毛片| 日本男女操逼视频免费看| 午夜极品美女福利视频| 午夜场射精嗯嗯啊啊视频| 一区二区久久成人网| 日韩精品二区一区久久| 特黄老太婆aa毛毛片| 亚洲的电影一区二区三区 | 亚洲 欧美 自拍 偷拍 在线| 在线观看日韩激情视频| 中文字幕之无码色多多| 亚洲另类图片蜜臀av| 日本真人性生活视频免费看| 亚洲人妻视频在线网| 一区二区麻豆传媒黄片| 日韩欧美国产一区不卡| 天堂av在线官网中文| 欧美日韩激情啪啪啪| 大香蕉日本伊人中文在线| 最新日韩av传媒在线| 伊人成人在线综合网| 2019av在线视频| 亚洲男人让女人爽的视频| 亚洲综合另类精品小说| 日本成人不卡一区二区| 黑人大几巴狂插日本少妇| av在线免费观看亚洲天堂| jiuse91九色视频| 久久精品国产亚洲精品166m| 久久香蕉国产免费天天| 91色秘乱一区二区三区| 又粗又硬又猛又爽又黄的| 欧美日本在线观看一区二区| 中文字母永久播放1区2区3区| 天天通天天透天天插| 一区二区熟女人妻视频| 男生用鸡操女生视频动漫| 啪啪啪啪啪啪啪啪av| 国产精品黄片免费在线观看| 国产一区二区在线欧美| 老熟妇xxxhd老熟女| 在线观看911精品国产| 91人妻精品一区二区在线看| 啊啊好慢点插舔我逼啊啊啊视频| 99re久久这里都是精品视频| 动漫精品视频在线观看| 亚洲午夜伦理视频在线| 4个黑人操素人视频网站精品91| 五十路熟女人妻一区二区9933| 国产欧美日韩在线观看不卡| 一区二区三区日本伦理| 91国产在线视频免费观看| 九色精品视频在线播放| 99一区二区在线观看| 在线播放一区二区三区Av无码| 午夜国产福利在线观看| 天码人妻一区二区三区在线看| 亚洲伊人av天堂有码在线| 黑人变态深video特大巨大| 唐人色亚洲av嫩草| 国产不卡av在线免费| 人妻无码中文字幕专区| 水蜜桃一区二区三区在线观看视频| 五月精品丁香久久久久福利社| 亚洲免费av在线视频| 老鸭窝在线观看一区| 密臀av一区在线观看| 888亚洲欧美国产va在线播放| 18禁美女羞羞免费网站| 熟女国产一区亚洲中文字幕| 自拍偷拍一区二区三区图片 | 2020av天堂网在线观看| 在线播放一区二区三区Av无码| 性感美女高潮视频久久久| 国产视频网站国产视频| 天天做天天干天天舔| 521精品视频在线观看| 青青草亚洲国产精品视频| 久久精品在线观看一区二区 | 不戴胸罩引我诱的隔壁的人妻| 亚洲av极品精品在线观看| 亚洲中文字字幕乱码| 黑人解禁人妻叶爱071| 99婷婷在线观看视频| 夏目彩春在线中文字幕| 国产成人精品久久二区91 | 亚洲码av无色中文| 亚洲最大黄了色网站| 久草免费人妻视频在线| 天天操天天弄天天射| 亚洲中文字幕综合小综合| 午夜免费观看精品视频| 免费观看成年人视频在线观看| 馒头大胆亚洲一区二区| 97人妻人人澡爽人人精品| 亚洲 中文 自拍 另类 欧美| 亚洲欧美福利在线观看| 国产+亚洲+欧美+另类| 日本韩国免费一区二区三区视频| 97瑟瑟超碰在线香蕉| 韩国男女黄色在线观看| 国内自拍第一页在线观看| 国产视频网站国产视频| 精品国产午夜视频一区二区| 韩国一级特黄大片做受| 新97超碰在线观看| 只有精品亚洲视频在线观看| 日韩av熟妇在线观看| 国产精品视频男人的天堂| 黄色片一级美女黄色片| 日噜噜噜夜夜噜噜噜天天噜噜噜| 国产美女午夜福利久久| 国产精品欧美日韩区二区| 亚洲av可乐操首页| 天天干天天操天天爽天天摸| 亚洲综合另类欧美久久| 人妻少妇亚洲精品中文字幕| 日韩欧美一级黄片亚洲| 青青青青青手机视频| 国产精彩福利精品视频| 大陆胖女人与丈夫操b国语高清| www日韩毛片av| gogo国模私拍视频| 免费看美女脱光衣服的视频| 57pao国产一区二区| 2019av在线视频| 2020久久躁狠狠躁夜夜躁| 特级欧美插插插插插bbbbb| 97欧洲一区二区精品免费| 精品日产卡一卡二卡国色天香| 北条麻妃av在线免费观看| 亚洲综合一区二区精品久久| 狍和女人的王色毛片| 啪啪啪啪啪啪啪免费视频| 亚洲国产最大av综合| 3337p日本欧洲大胆色噜噜| 亚洲一区二区三区五区| 91在线视频在线精品3| 国产av国片精品一区二区| 毛片av在线免费看| 成人激情文学网人妻| 中国老熟女偷拍第一页| 久久久久久久亚洲午夜综合福利 | 午夜国产免费福利av| 国产精品黄大片在线播放| 五十路人妻熟女av一区二区| 亚洲 国产 成人 在线| 天天想要天天操天天干| 日韩精品中文字幕福利| 岛国av高清在线成人在线| 桃色视频在线观看一区二区 | 亚洲国产在人线放午夜| 天天日天天干天天爱| 美味人妻2在线播放| 日视频免费在线观看| 亚洲一区自拍高清免费视频| 天天日夜夜干天天操| 免费高清自慰一区二区三区网站| 超碰公开大香蕉97| 免费av岛国天堂网站| 成人国产小视频在线观看| 91桃色成人网络在线观看| 午夜场射精嗯嗯啊啊视频| 91亚洲国产成人精品性色| 中文字幕奴隷色的舞台50| av中文在线天堂精品| 99热久久极品热亚洲| 一个色综合男人天堂| 最新欧美一二三视频| 亚洲综合另类精品小说| yy6080国产在线视频| 国产精品成人xxxx| 视频一区二区综合精品| 一区二区三区蜜臀在线| 婷婷五月亚洲综合在线| 经典亚洲伊人第一页| 日韩美女综合中文字幕pp| 日本三极片视频网站观看| 美女张开腿让男生操在线看| 熟妇一区二区三区高清版| 国产白袜脚足J棉袜在线观看| 免费十精品十国产网站| 91亚洲国产成人精品性色| 97超碰国语国产97超碰| 男女啪啪视频免费在线观看| 亚洲天天干 夜夜操| 亚洲在线一区二区欧美| 国产卡一卡二卡三乱码手机| 天天操天天爽天天干| 特一级特级黄色网片| 老司机欧美视频在线看| 91成人在线观看免费视频| 动色av一区二区三区| 亚洲va国产va欧美va在线| av在线资源中文字幕| 亚洲国产香蕉视频在线播放 | 97资源人妻免费在线视频| 天天色天天操天天透| 成年人午夜黄片视频资源| 久草极品美女视频在线观看| 91精品资源免费观看| 色呦呦视频在线观看视频| 久久久超爽一二三av| 日本后入视频在线观看 | 无码中文字幕波多野不卡| 3D动漫精品啪啪一区二区下载| 一级黄片大鸡巴插入美女 | 亚洲成人av在线一区二区| 国产成人精品久久二区91 | 中文字幕av熟女人妻| 亚洲狠狠婷婷综合久久app| 一区二区在线视频中文字幕 | 国产福利小视频免费观看| 99热这里只有国产精品6| 欧亚乱色一区二区三区| 超级av免费观看一区二区三区| 青青青视频自偷自拍38碰| 日韩欧美一级aa大片| 国产又粗又猛又爽又黄的视频在线 | 亚洲男人让女人爽的视频| 狠狠嗨日韩综合久久| 不卡一区一区三区在线| 绯色av蜜臀vs少妇| 亚洲少妇人妻无码精品| 二区中出在线观看老师 | 欧美天堂av无线av欧美| 无码国产精品一区二区高潮久久4| 国产精品久久综合久久| 在线可以看的视频你懂的| 天天日天天玩天天摸| 天堂av在线最新版在线| 韩国一级特黄大片做受| 2020中文字幕在线播放| 天天做天天干天天操天天射| 在线观看911精品国产| 欧美80老妇人性视频| 亚洲va国产va欧美精品88| 中文字幕视频一区二区在线观看| 亚洲高清免费在线观看视频| 中文字幕日韩人妻在线三区| 国产黄色大片在线免费播放| 日韩欧美国产精品91| 男人天堂最新地址av| 在线观看亚洲人成免费网址| 午夜美女福利小视频| 成年人免费看在线视频| 91中文字幕最新合集| 亚洲国产成人最新资源| 瑟瑟视频在线观看免费视频| 在线观看亚洲人成免费网址| 中国产一级黄片免费视频播放| 亚洲欧美清纯唯美另类| 亚洲熟女女同志女同| 亚洲激情偷拍一区二区| 极品丝袜一区二区三区| 97小视频人妻一区二区| 日韩欧美国产精品91| 91精品国产综合久久久蜜| 亚洲国产精品黑丝美女| 亚洲精品欧美日韩在线播放 | 在线播放 日韩 av| 加勒比视频在线免费观看| 国产精品久久9999| 日本黄色三级高清视频| 国产av国片精品一区二区| 国产丰满熟女成人视频| 亚洲高清国产自产av| 午夜影院在线观看视频羞羞羞| 亚洲va国产va欧美va在线| 97色视频在线观看| 国产精品一区二区av国| 午夜精品福利91av| 日日操夜夜撸天天干| 国产欧美日韩在线观看不卡| 成熟熟女国产精品一区| 国产使劲操在线播放| 国产精品伦理片一区二区| 国产精品黄片免费在线观看| 五十路在线观看完整版| 中文字幕第一页国产在线| 国产黑丝高跟鞋视频在线播放| 人妻爱爱 中文字幕| 超鹏97历史在线观看| 亚洲公开视频在线观看| 91av中文视频在线| 国产黄色片在线收看| 精品久久久久久久久久久久人妻| 亚洲的电影一区二区三区| 在线制服丝袜中文字幕| 成年女人免费播放视频| 成人24小时免费视频| 中文字幕日韩无敌亚洲精品| 久久久精品999精品日本 | 99久久激情婷婷综合五月天| 亚洲1卡2卡三卡4卡在线观看| 少妇人妻久久久久视频黄片| 久久三久久三久久三久久| 中文字幕无码日韩专区免费| 五十路老熟女码av| 久久免看30视频口爆视频| 亚洲综合在线视频可播放| av老司机亚洲一区二区| 馒头大胆亚洲一区二区| mm131美女午夜爽爽爽| 成人区人妻精品一区二视频| 亚洲国产40页第21页| av中文字幕在线导航| 超碰中文字幕免费观看| 亚洲欧美成人综合在线观看| 久久久噜噜噜久久熟女av| 日本女大学生的黄色小视频| 最新黄色av网站在线观看| 一级黄片久久久久久久久| 熟女妇女老妇一二三区| 国产91嫩草久久成人在线视频| 99热99这里精品6国产| 日本又色又爽又黄又粗| 日本黄色特一级视频| 黑人乱偷人妻中文字幕| 亚洲人妻av毛片在线| 欧美精产国品一二三产品区别大吗| 国产麻豆乱子伦午夜视频观看| www,久久久,com| 偷拍自拍视频图片免费| 啊啊啊想要被插进去视频| 国产精品熟女久久久久浪潮| 天天日天天干天天搡| 激情人妻校园春色亚洲欧美| 国产精品国产三级国产精东| 日本啪啪啪啪啪啪啪| 久久久91蜜桃精品ad| 在线新三级黄伊人网| 国产aⅴ一线在线观看| 日本乱人一区二区三区| 99精品免费观看视频| 人妻自拍视频中国大陆| 国产成人自拍视频播放| 99国产精品窥熟女精品| 日本性感美女写真视频| 欧美韩国日本国产亚洲| 97资源人妻免费在线视频| 久草电影免费在线观看| 男女啪啪视频免费在线观看| 哥哥姐姐综合激情小说| 天天日天天舔天天射进去| 年轻的人妻被夫上司侵犯| av中文字幕国产在线观看| 天天色天天舔天天射天天爽| 青青青视频手机在线观看| 国产使劲操在线播放| 老司机福利精品免费视频一区二区| 熟女人妻一区二区精品视频| 在线观看视频污一区| 婷婷久久一区二区字幕网址你懂得| 日本18禁久久久久久| 久草视频中文字幕在线观看| 一色桃子久久精品亚洲| 亚洲1卡2卡三卡4卡在线观看| 91麻豆精品91久久久久同性| 欧美特级特黄a大片免费| 99国内精品永久免费视频| 55夜色66夜色国产精品站| 国产精品一区二区三区蜜臀av| 天天操天天插天天色| 亚洲国产精品久久久久久6| 色婷婷六月亚洲综合香蕉| 日韩av熟妇在线观看| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 88成人免费av网站| 欧美日韩情色在线观看| 国产一区成人在线观看视频| 午夜成午夜成年片在线观看| 欧美第一页在线免费观看视频| 成人蜜臀午夜久久一区| 91国产在线视频免费观看| 亚洲精品欧美日韩在线播放| 久久久久久九九99精品| 久久久久久97三级| 国产麻豆剧果冻传媒app| 免费av岛国天堂网站| 真实国模和老外性视频| 最近中文2019年在线看| 国产乱子伦精品视频潮优女| 一区二区三区激情在线| 新97超碰在线观看| 国产精品国产三级国产精东| 五月天久久激情视频| 美女小视频网站在线| 欧美乱妇无乱码一区二区| 国产成人自拍视频播放| 亚洲在线免费h观看网站| 天天色天天操天天舔| 老司机在线精品福利视频| 亚洲美女自偷自拍11页| 天天日天天日天天擦| 天堂av在线官网中文| 91免费福利网91麻豆国产精品| 亚洲蜜臀av一区二区三区九色| 久久亚洲天堂中文对白| 沈阳熟妇28厘米大战黑人| 3337p日本欧洲大胆色噜噜| 青青草成人福利电影| 国产麻豆剧传媒精品国产av蜜桃| 天天射夜夜操狠狠干| 在线观看国产网站资源| 好了av中文字幕在线| 老鸭窝日韩精品视频观看| 午夜免费体验区在线观看| av一区二区三区人妻| 国产伦精品一区二区三区竹菊| 人人在线视频一区二区| 水蜜桃国产一区二区三区| 中国视频一区二区三区| 人人爱人人妻人人澡39| 日本男女操逼视频免费看| 人妻无码中文字幕专区| 天天日天天干天天舔天天射| 成人免费公开视频无毒| 国产在线免费观看成人| 91超碰青青中文字幕| 成人av亚洲一区二区| 亚洲av成人网在线观看| 五十路熟女人妻一区二区9933| av黄色成人在线观看| 特黄老太婆aa毛毛片| 亚洲欧美综合在线探花| 激情五月婷婷综合色啪| 青青草原网站在线观看| 色在线观看视频免费的| 国产在线观看黄色视频| 在线观看亚洲人成免费网址| 成人资源在线观看免费官网| 51国产偷自视频在线播放| 日韩伦理短片在线观看| 人妻少妇av在线观看| 亚洲av一妻不如妾| 激情图片日韩欧美人妻| 中文字幕 人妻精品| 亚洲av色香蕉一区二区三区| 亚洲欧美成人综合在线观看| 午夜国产福利在线观看| 91精品国产综合久久久蜜| 国产精品视频资源在线播放| 青青青艹视频在线观看| 日辽宁老肥女在线观看视频| 成人H精品动漫在线无码播放| 日韩不卡中文在线视频网站| 经典国语激情内射视频| 岛国青草视频在线观看| 在线新三级黄伊人网| 久久久久久cao我的性感人妻| 精品久久久久久久久久久99| 亚洲av无女神免非久久| 日曰摸日日碰夜夜爽歪歪| huangse网站在线观看| 日韩在线中文字幕色| 天天插天天狠天天操| 亚洲午夜电影之麻豆| 啊啊好大好爽啊啊操我啊啊视频| 青青草人人妻人人妻| 婷婷久久一区二区字幕网址你懂得| sejizz在线视频| 狍和女人的王色毛片| 精品高跟鞋丝袜一区二区| 亚洲在线免费h观看网站| 亚洲av成人免费网站| 99精品一区二区三区的区| 午夜美女福利小视频| 亚洲av自拍偷拍综合| 亚洲 中文字幕在线 日韩| 99精品视频在线观看婷婷| 亚洲男人让女人爽的视频| 天天干天天啪天天舔| 在线观看免费视频色97| 欧美3p在线观看一区二区三区| 在线免费观看av日韩| 色狠狠av线不卡香蕉一区二区 | 天天艹天天干天天操| 哥哥姐姐综合激情小说| 97人人妻人人澡人人爽人人精品| 91极品大一女神正在播放| 久草极品美女视频在线观看| caoporn蜜桃视频| 精品黑人一区二区三区久久国产| 视频一区 视频二区 视频| 精品区一区二区三区四区人妻| 欧美第一页在线免费观看视频| 青青草精品在线视频观看| av破解版在线观看| 免费看国产av网站| 精品高潮呻吟久久av| 男人的天堂av日韩亚洲| 91天堂精品一区二区| 瑟瑟视频在线观看免费视频| 亚洲蜜臀av一区二区三区九色| 成人综合亚洲欧美一区| 韩国一级特黄大片做受| 久久久人妻一区二区| 日本一本午夜在线播放| 把腿张开让我插进去视频| 五月天色婷婷在线观看视频免费| 视频 国产 精品 熟女 | 日日操综合成人av| 色哟哟在线网站入口| 日本性感美女视频网站| 亚洲高清国产自产av| 国产日本精品久久久久久久| 欧美日韩一区二区电影在线观看| 在线观看免费av网址大全| 极品丝袜一区二区三区| 亚洲第一黄色在线观看| 99久久中文字幕一本人| 亚洲国产最大av综合| 欧美国产亚洲中英文字幕| 亚洲一区二区三区精品乱码| 亚洲午夜高清在线观看| 亚洲国产成人av在线一区| 免费黄色成人午夜在线网站| 美女福利视频导航网站| 99热久久极品热亚洲| av男人天堂狠狠干| 亚洲国产在线精品国偷产拍| 天天通天天透天天插| 亚欧在线视频你懂的| 亚洲av黄色在线网站| av中文字幕网址在线| 女生自摸在线观看一区二区三区 | 日韩精品中文字幕福利| huangse网站在线观看| 国产黄色片蝌蚪九色91| 性色av一区二区三区久久久| 免费岛国喷水视频在线观看 | 扒开腿挺进肉嫩小18禁视频| 区一区二区三国产中文字幕| 99精品免费久久久久久久久a| 国产成人一区二区三区电影网站| 福利在线视频网址导航| av天堂中文字幕最新| 香蕉片在线观看av| 大鸡巴操娇小玲珑的女孩逼| 一区二区免费高清黄色视频| 美女大bxxxx内射| 欧美精品激情在线最新观看视频| 91麻豆精品91久久久久同性| 18禁免费av网站| 亚洲av成人网在线观看| 免费一级黄色av网站| 日日摸夜夜添夜夜添毛片性色av| 大香蕉大香蕉在线有码 av| 2025年人妻中文字幕乱码在线| 日日日日日日日日夜夜夜夜夜夜| 老师啊太大了啊啊啊尻视频| 天天想要天天操天天干| 青青青aaaa免费| 黄色无码鸡吧操逼视频| 亚洲精品av在线观看| 性感美女诱惑福利视频| 午夜激情高清在线观看| av天堂中文免费在线| 专门看国产熟妇的网站| 亚洲av第国产精品| 一区二区熟女人妻视频| 欧美激情电影免费在线| 亚洲欧美久久久久久久久| av中文字幕网址在线| 国产一区二区火爆视频| 青青草原色片网站在线观看 | 欧美日韩不卡一区不区二区| 3337p日本欧洲大胆色噜噜| 欧美麻豆av在线播放| 天天日夜夜操天天摸| 天堂v男人视频在线观看| av在线shipin| 蜜桃专区一区二区在线观看| 中文字幕第1页av一天堂网| 中文 成人 在线 视频| 亚洲一区制服丝袜美腿| 偷拍自拍福利视频在线观看| 久久久久只精品国产三级| 在线观看视频 你懂的| 欧美久久久久久三级网| 黄色在线观看免费观看在线| 在线免费观看99视频| 一区二区三区麻豆福利视频| 亚洲va天堂va国产va久| 青青草原网站在线观看| 又黄又刺激的午夜小视频| 在线免费观看日本片| 欧美一区二区三区高清不卡tv | 国产三级精品三级在线不卡| 高潮喷水在线视频观看| 中出中文字幕在线观看| 精品91自产拍在线观看一区| av资源中文字幕在线观看| 国产黑丝高跟鞋视频在线播放| 日本熟妇一区二区x x| 中文字幕人妻一区二区视频| 欧美日韩精品永久免费网址| 国产av一区2区3区| 亚洲特黄aaaa片| 亚洲欧美色一区二区| 国产成人精品午夜福利训2021| 欧美成人精品欧美一级黄色| 欧美特色aaa大片| 五十路熟女av天堂| av男人天堂狠狠干| 天天操天天干天天日狠狠插| 亚洲午夜电影之麻豆| 99热久久这里只有精品8| 色在线观看视频免费的| 在线国产精品一区二区三区| 亚洲高清国产一区二区三区| 亚洲男人的天堂a在线| 精品区一区二区三区四区人妻| 51国产成人精品视频| 一本久久精品一区二区| 国产一级精品综合av| 亚洲欧美激情国产综合久久久| 亚洲国产精品中文字幕网站| 1区2区3区4区视频在线观看| 亚洲一区二区三区uij| 久久艹在线观看视频| 天天日天天日天天射天天干| 姐姐的朋友2在线观看中文字幕 | 精品黑人一区二区三区久久国产| 亚洲成人黄色一区二区三区| 中文字幕日韩精品就在这里| 日本韩国在线观看一区二区| 亚洲女人的天堂av| 黑人3p华裔熟女普通话| 日韩成人性色生活片| 亚洲一区久久免费视频| 国产va在线观看精品| 任我爽精品视频在线播放| 亚洲精品午夜aaa久久| 午夜精品福利一区二区三区p| 高潮视频在线快速观看国家快速| 人妻自拍视频中国大陆| 2021天天色天天干| 东京热男人的av天堂| 国产成人精品一区在线观看| 黄色片一级美女黄色片| 欧美日韩亚洲国产无线码| 国产妇女自拍区在线观看| 精品高跟鞋丝袜一区二区| 欧美精品免费aaaaaa| 黄色av网站免费在线| 又色又爽又黄又刺激av网站| 插小穴高清无码中文字幕| 人妻av无码专区久久绿巨人 | 亚洲精品麻豆免费在线观看| 伊人网中文字幕在线视频| 国产+亚洲+欧美+另类| 国产女人露脸高潮对白视频| 粉嫩av蜜乳av蜜臀| 自拍偷拍亚洲另类色图| av黄色成人在线观看| 欧美精品一区二区三区xxxx| 天天摸天天干天天操科普| www久久久久久久久久久| 777奇米久久精品一区| 天堂av中文在线最新版| 天天色天天舔天天射天天爽| 黑人进入丰满少妇视频| 日本一本午夜在线播放| 青娱乐在线免费视频盛宴| 男女啪啪视频免费在线观看| 中文字幕人妻一区二区视频| 国产日韩欧美美利坚蜜臀懂色| 国产精品国色综合久久| 香港三日本三韩国三欧美三级| 天天操天天射天天操天天天| 91免费观看国产免费| 污污小视频91在线观看| 午夜极品美女福利视频| 91精品综合久久久久3d动漫 | 国产精品久久综合久久| 性感美女福利视频网站| 亚洲国产精品美女在线观看| 免费在线黄色观看网站| 久久久久久久99精品| 99精品免费久久久久久久久a| 欧美日韩人妻久久精品高清国产| av资源中文字幕在线观看| 18禁污污污app下载| 国产熟妇一区二区三区av| 亚洲综合自拍视频一区| 午夜在线观看岛国av,com| 91免费福利网91麻豆国产精品 | 哥哥姐姐综合激情小说| 青青青青青手机视频| 黄色三级网站免费下载| 日韩欧美国产一区ab| 婷婷色国产黑丝少妇勾搭AV| 日韩熟女av天堂系列| 国产大鸡巴大鸡巴操小骚逼小骚逼 | 中文字幕网站你懂的| 蜜桃臀av蜜桃臀av| 精品久久久久久久久久久a√国产| 色噜噜噜噜18禁止观看| 任你操任你干精品在线视频| 91中文字幕最新合集| 国产白袜脚足J棉袜在线观看| 亚洲欧美福利在线观看| 亚洲一区久久免费视频| 色婷婷综合激情五月免费观看 | 亚洲熟妇久久无码精品| 精品一区二区三区三区色爱| 久久久人妻一区二区| 在线视频这里只有精品自拍| 国产亚洲欧美视频网站| 国产一区二区在线欧美| 色伦色伦777国产精品| 日韩av熟妇在线观看| 精品国产午夜视频一区二区| 成人蜜桃美臀九一一区二区三区 | 91老熟女连续高潮对白| 欧亚日韩一区二区三区观看视频| 午夜久久香蕉电影网| 成年午夜免费无码区| 少妇一区二区三区久久久| 视频一区二区综合精品| 夏目彩春在线中文字幕| rct470中文字幕在线| 插逼视频双插洞国产操逼插洞 | av在线观看网址av| 亚洲av日韩高清hd| 亚洲午夜伦理视频在线| 精品一区二区三区在线观看| 性感美女高潮视频久久久| 国产久久久精品毛片| 亚洲va国产va欧美va在线| 偷青青国产精品青青在线观看| 女同久久精品秋霞网| 欧美老鸡巴日小嫩逼| 好了av中文字幕在线| 51精品视频免费在线观看| 888欧美视频在线| 欧美女同性恋免费a| 日本xx片在线观看| 777奇米久久精品一区| 成人av天堂丝袜在线观看| 一区二区熟女人妻视频| 欧美亚洲中文字幕一区二区三区| 免费人成黄页网站在线观看国产| 75国产综合在线视频| 欧美精品亚洲精品日韩在线| 中文字幕一区的人妻欧美日韩| 亚洲成人黄色一区二区三区| 国产欧美精品一区二区高清 | 天天干天天操天天插天天日| 在线观看av亚洲情色| 老熟妇凹凸淫老妇女av在线观看| 人人人妻人人澡人人| 中文字幕在线一区精品| 成人激情文学网人妻| 男女啪啪啪啪啪的网站| 欧美久久久久久三级网| 国产一线二线三线的区别在哪| 人妻无码中文字幕专区| 搡老熟女一区二区在线观看| 岛国免费大片在线观看| sejizz在线视频| 国产精品午夜国产小视频| 亚洲免费在线视频网站| 亚洲精品久久综合久| 亚洲 中文 自拍 无码| 天天操天天爽天天干| 不卡日韩av在线观看| 亚洲午夜电影之麻豆| 精品国产污污免费网站入口自| 红杏久久av人妻一区| 精品久久久久久高潮| 91精品免费久久久久久| 青青青青青青青青青国产精品视频| 熟女国产一区亚洲中文字幕| 青青青激情在线观看视频| 93精品视频在线观看| 一区二区三区久久久91| 午夜蜜桃一区二区三区| 国产精品久久久黄网站| 久久国产精品精品美女| 绝顶痉挛大潮喷高潮无码| 欧美视频不卡一区四区| 午夜福利资源综合激情午夜福利资 | 中文字幕日韩人妻在线三区| 天堂av在线最新版在线| 国产亚洲精品视频合集| yellow在线播放av啊啊啊| 免费一级黄色av网站| 91人妻精品久久久久久久网站 | 人妻丝袜榨强中文字幕| 18禁无翼鸟成人在线| 大鸡巴操娇小玲珑的女孩逼| 亚洲公开视频在线观看| 青青青青在线视频免费观看| 老司机你懂得福利视频| 人妻丝袜精品中文字幕| 亚洲女人的天堂av| 亚洲天堂av最新网址| av一本二本在线观看| 午夜精品一区二区三区更新| 极品粉嫩小泬白浆20p主播| 欧美性感尤物人妻在线免费看| 北条麻妃高跟丝袜啪啪| 亚欧在线视频你懂的| 毛片av在线免费看| 韩国三级aaaaa高清视频| 香蕉av影视在线观看| 91精品高清一区二区三区| 成人24小时免费视频| 婷婷五月亚洲综合在线| 天天操天天爽天天干| 国产午夜无码福利在线看| 91中文字幕免费在线观看| 综合一区二区三区蜜臀| 日韩熟女av天堂系列| 日日夜夜狠狠干视频| 亚洲中文字幕综合小综合| 蝴蝶伊人久久中文娱乐网| 亚洲精品ww久久久久久| 动色av一区二区三区| 亚洲的电影一区二区三区| 亚洲2021av天堂| 在线免费观看靠比视频的网站| 天天日天天爽天天干| 欧美日本国产自视大全| 男人插女人视频网站| 99国内小视频在现欢看| 国产亚州色婷婷久久99精品| 久草视频在线免播放| 五月激情婷婷久久综合网| 亚洲伊人久久精品影院一美女洗澡| 免费费一级特黄真人片| 懂色av之国产精品| 日韩欧美一级精品在线观看| 91桃色成人网络在线观看| 日本黄色三级高清视频| 亚洲欧美综合另类13p| 亚洲成人精品女人久久久| 中字幕人妻熟女人妻a62v网 | 日韩三级电影华丽的外出| 欧美成人猛片aaaaaaa| 国产黄色高清资源在线免费观看| 国产极品美女久久久久久| 久久久极品久久蜜桃| 影音先锋女人av噜噜色| 日比视频老公慢点好舒服啊| 19一区二区三区在线播放| 天天爽夜夜爽人人爽QC| 欧美专区第八页一区在线播放| 中文字幕一区二区三区蜜月| 日韩伦理短片在线观看| 天码人妻一区二区三区在线看| 日日爽天天干夜夜操| 亚洲一级特黄特黄黄色录像片| 又粗又硬又猛又爽又黄的| 日本特级片中文字幕| 国产福利小视频大全| 黄色无码鸡吧操逼视频| 国产亚洲精品视频合集| 视频啪啪啪免费观看| 伊人日日日草夜夜草| 亚洲欧美清纯唯美另类| 在线免费观看日本伦理| 亚洲 国产 成人 在线| 97青青青手机在线视频| 日本免费视频午夜福利视频| 日韩三级电影华丽的外出| av手机免费在线观看高潮| 天天操天天污天天射| 天天日天天干天天爱| 欧美成人黄片一区二区三区| 99精品一区二区三区的区| 北条麻妃高跟丝袜啪啪| 精品一区二区三区三区88 | 一色桃子久久精品亚洲| 伊人情人综合成人久久网小说| 中国产一级黄片免费视频播放| 亚洲va国产va欧美精品88| 亚洲国产成人无码麻豆艾秋| 天天日天天干天天干天天日| 影音先锋女人av噜噜色| 自拍偷拍亚洲另类色图| 日本午夜爽爽爽爽爽视频在线观看| 欧美亚洲少妇福利视频| 啪啪啪啪啪啪啪啪av| 最新国产精品网址在线观看| 丁香花免费在线观看中文字幕| 一个人免费在线观看ww视频| 在线视频免费观看网| 精品美女久久久久久| 人妻少妇一区二区三区蜜桃| av新中文天堂在线网址| 天堂v男人视频在线观看| 国产伊人免费在线播放| 亚洲特黄aaaa片| 亚洲一级美女啪啪啪| 好男人视频在线免费观看网站| 中文字母永久播放1区2区3区| 久久丁香婷婷六月天| 一区二区久久成人网| 日韩三级黄色片网站| 91免费观看在线网站| 黄色大片男人操女人逼| 国产精品大陆在线2019不卡| 国产视频在线视频播放| 99热这里只有精品中文| 农村胖女人操逼视频| 日本www中文字幕| 天天干天天操天天爽天天摸| 97超碰国语国产97超碰| 日本一二三中文字幕| 少妇被强干到高潮视频在线观看 | 精品久久久久久久久久久久人妻| 色av色婷婷人妻久久久精品高清| 免费成人va在线观看| 久久久久久cao我的性感人妻| 绯色av蜜臀vs少妇| 久草视频在线免播放| 91精品高清一区二区三区| 亚洲一区自拍高清免费视频| 中文字幕欧美日韩射射一| 国产大学生援交正在播放| 青青青青青青青青青青草青青| 亚洲成人av一区久久| 国产精品免费不卡av| 国产成人无码精品久久久电影| 亚洲公开视频在线观看| 99精品国产自在现线观看| 日韩欧美高清免费在线| 亚洲激情,偷拍视频| 在线观看的a站 最新| 欧美成人小视频在线免费看 | 超鹏97历史在线观看| 早川濑里奈av黑人番号| 久久精品在线观看一区二区| 扒开让我视频在线观看| 日韩中文字幕精品淫| aiss午夜免费视频| 熟女少妇激情五十路| 夫妻在线观看视频91| 爱有来生高清在线中文字幕| 国产日韩欧美视频在线导航| 91免费观看国产免费| 日韩美在线观看视频黄| 精品一区二区三区午夜| 玩弄人妻熟妇性色av少妇| 日韩美在线观看视频黄| 91精品国产观看免费| 日韩一个色综合导航| 又色又爽又黄又刺激av网站| 亚洲国产精品中文字幕网站| AV天堂一区二区免费试看| 久久久91蜜桃精品ad| 熟女俱乐部一二三区| 欧美亚洲免费视频观看| av中文字幕在线导航| 超pen在线观看视频公开97| 宅男噜噜噜666免费观看| 无套猛戳丰满少妇人妻| 19一区二区三区在线播放| 日本韩国免费一区二区三区视频| 中文字幕第三十八页久久| 91中文字幕免费在线观看| 亚洲另类伦春色综合小| 夜色撩人久久7777| 精品国产亚洲av一淫| 99久久激情婷婷综合五月天| 2021国产一区二区| 岳太深了紧紧的中文字幕| 91福利在线视频免费观看| 亚洲自拍偷拍综合色| 青青青青青手机视频| 日本乱人一区二区三区| 精品av久久久久久久| 日韩欧美一级黄片亚洲| eeuss鲁片一区二区三区| 国产片免费观看在线观看| 免费在线播放a级片| 青青青国产免费视频| 日韩熟女av天堂系列| 久久久久久9999久久久久| 亚洲精品欧美日韩在线播放| 日日操综合成人av| 夜色撩人久久7777| 亚洲成人熟妇一区二区三区| 青青青青操在线观看免费| 女生被男生插的视频网站| 国产精品久久久久久久女人18| 天天操天天爽天天干| 欧美viboss性丰满| 专门看国产熟妇的网站| jiujiure精品视频在线| 中文字幕一区二区三区蜜月| 视频一区 二区 三区 综合| 亚洲av无乱一区二区三区性色| 熟女视频一区,二区,三区| 啪啪啪18禁一区二区三区| 日本18禁久久久久久| 天天日天天敢天天干| 国产中文精品在线观看| 国产 在线 免费 精品| 日本xx片在线观看| japanese日本熟妇另类| 国产福利小视频二区| 久久久久91精品推荐99| 东京热男人的av天堂| 青娱乐最新视频在线| 新婚人妻聚会被中出| 在线 中文字幕 一区| 色天天天天射天天舔| 午夜精品一区二区三区城中村| caoporm超碰国产| 中文字幕一区二区三区蜜月 | 视频在线亚洲一区二区| 亚洲国产欧美国产综合在线| 男人天堂最新地址av| 啪啪啪18禁一区二区三区| 久久这里有免费精品| 天天摸天天干天天操科普| 中文字幕国产专区欧美激情| 天天日天天透天天操| 一区二区三区欧美日韩高清播放| 深夜男人福利在线观看| 黄色在线观看免费观看在线 | 年轻的人妻被夫上司侵犯| 在线 中文字幕 一区| 日本免费一级黄色录像| 在线观看一区二区三级| 欧美日本在线视频一区| 久久这里有免费精品| 一区二区三区日韩久久| 欧美精产国品一二三产品区别大吗| 精品国产午夜视频一区二区| 精彩视频99免费在线| 精品黑人一区二区三区久久国产| 国产精品三级三级三级| 一区二区三区在线视频福利| 青青青爽视频在线播放| 亚洲中文字幕人妻一区| 99久久99一区二区三区| 超黄超污网站在线观看| 最新日韩av传媒在线| 懂色av蜜桃a v| 亚洲欧美综合在线探花| 亚洲精品麻豆免费在线观看| 人妻自拍视频中国大陆| jiujiure精品视频在线| 日本一二三中文字幕| 2022国产综合在线干| 久久精品国产999| 一色桃子人妻一区二区三区| av亚洲中文天堂字幕网| 非洲黑人一级特黄片| 在线国产日韩欧美视频| 97人人模人人爽人人喊| 久草视频在线一区二区三区资源站| 直接能看的国产av| 久久久超爽一二三av| 超级av免费观看一区二区三区| 国产在线免费观看成人| av中文字幕电影在线看| 亚洲蜜臀av一区二区三区九色| 狠狠躁夜夜躁人人爽天天天天97| 亚洲av黄色在线网站| 在线国产精品一区二区三区| 91国产在线视频免费观看| 老司机99精品视频在线观看| 国产真实乱子伦a视频| 免费看美女脱光衣服的视频| 沈阳熟妇28厘米大战黑人| 99国内精品永久免费视频| 亚洲久久午夜av一区二区| 一区二区三区国产精选在线播放 | 国产精品大陆在线2019不卡| 国产露脸对白在线观看| 天堂女人av一区二区| 91精品国产91久久自产久强| 一区二区三区另类在线| 适合午夜一个人看的视频| 综合国产成人在线观看| 亚洲青青操骚货在线视频| 91av中文视频在线| 国产熟妇人妻ⅹxxxx麻豆| 精品久久婷婷免费视频| 欧美亚洲国产成人免费在线| 夜鲁夜鲁狠鲁天天在线| 一区二区三区 自拍偷拍| 日韩av大胆在线观看| 久久这里只有精品热视频| 亚洲精品乱码久久久本| 欧美日韩国产一区二区三区三州| 亚洲第17页国产精品| 中文字幕中文字幕人妻| 日本一区二区三区免费小视频| 亚洲最大黄了色网站| 色偷偷伊人大杳蕉综合网| 亚洲国产香蕉视频在线播放 | 98精产国品一二三产区区别| 极品粉嫩小泬白浆20p主播| 中文字母永久播放1区2区3区| 成人精品在线观看视频| 成人高清在线观看视频| 天天做天天干天天舔| 午夜场射精嗯嗯啊啊视频| 成人免费公开视频无毒| 人妻久久无码中文成人| 不卡一不卡二不卡三| 97a片免费在线观看| 78色精品一区二区三区| 国产成人精品亚洲男人的天堂| 亚洲国产精品免费在线观看| 80电影天堂网官网| 青青尤物在线观看视频网站| 91久久精品色伊人6882| 精品91高清在线观看| 特黄老太婆aa毛毛片| 午夜av一区二区三区| 欧美天堂av无线av欧美| 2012中文字幕在线高清| 亚洲国产精品中文字幕网站| 久久久极品久久蜜桃| 蜜臀av久久久久久久| 欧美va不卡视频在线观看| 一区二区三区日本伦理| 一区二区三区的久久的蜜桃的视频| 亚洲一区制服丝袜美腿| 天堂av中文在线最新版| 在线观看免费视频网| 国产无遮挡裸体免费直播视频| 在线观看一区二区三级| 欧美专区第八页一区在线播放| 美女少妇亚洲精选av| 中文字幕一区二区人妻电影冢本 | 亚洲粉嫩av一区二区三区| 韩国三级aaaaa高清视频| 国产精品视频资源在线播放| 宅男噜噜噜666国产| 91九色国产熟女一区二区| 91精品资源免费观看| 亚洲蜜臀av一区二区三区九色| 精内国产乱码久久久久久| 成熟丰满熟妇高潮xx×xx| 黄网十四区丁香社区激情五月天| 啊啊好大好爽啊啊操我啊啊视频| 东京干手机福利视频| 扒开腿挺进肉嫩小18禁视频| 欧美中文字幕一区最新网址| 粉嫩欧美美人妻小视频| 中文人妻AV久久人妻水| 日韩av熟妇在线观看| 天天操天天射天天操天天天| 日韩美av高清在线| 丝袜亚洲另类欧美变态| 丝袜肉丝一区二区三区四区在线| 97人人模人人爽人人喊| caoporn蜜桃视频| 欧美日韩熟女一区二区三区| 久青青草视频手机在线免费观看| 美女福利视频网址导航| 9久在线视频只有精品| 污污小视频91在线观看| 欧美国产亚洲中英文字幕| 在线观看av2025| 精品国产成人亚洲午夜| 欧美亚洲自偷自拍 在线| 国产精品黄片免费在线观看| 男生舔女生逼逼视频| 成人24小时免费视频| 一级黄片大鸡巴插入美女| 漂亮 人妻被中出中文| 亚洲国产精品中文字幕网站| 性欧美激情久久久久久久| 国产成人精品久久二区91| 超碰在线中文字幕一区二区| 亚洲福利午夜久久久精品电影网| 少妇高潮一区二区三区| 看一级特黄a大片日本片黑人| 亚洲av无女神免非久久| 精品久久久久久久久久久99| 在线免费91激情四射| 久久久精品精品视频视频| 88成人免费av网站| 美女吃鸡巴操逼高潮视频| 精品视频一区二区三区四区五区| 东京热男人的av天堂| 亚洲精品乱码久久久久久密桃明| 毛茸茸的大外阴中国视频| 99久久超碰人妻国产| 国产va在线观看精品| 色综合久久五月色婷婷综合 | 粉嫩小穴流水视频在线观看| 免费观看国产综合视频| 中文字日产幕乱六区蜜桃| 午夜精品一区二区三区福利视频| 久久香蕉国产免费天天| 男人的天堂在线黄色| 国产性感美女福利视频| 欧美黑人性暴力猛交喷水| 欧美成人一二三在线网| 亚洲国产欧美一区二区三区…| 国产欧美日韩在线观看不卡| 成人在线欧美日韩国产| 国产又粗又硬又大视频| 亚洲1区2区3区精华液| 中文字幕在线观看极品视频| 午夜精品在线视频一区| 国产在线观看免费人成短视频| 国产亚洲视频在线观看| 日本高清撒尿pissing| 99热99这里精品6国产| 青春草视频在线免费播放| 新97超碰在线观看| 大香蕉日本伊人中文在线| 在线观看欧美黄片一区二区三区| 91自产国产精品视频| 涩爱综合久久五月蜜臀| 国产卡一卡二卡三乱码手机| 国产真实灌醉下药美女av福利| 国产中文字幕四区在线观看| 国产高潮无码喷水AV片在线观看 | free性日本少妇| 91av精品视频在线| 国产亚洲精品视频合集| 福利在线视频网址导航| 99av国产精品欲麻豆| 哥哥姐姐综合激情小说| 国产精品探花熟女在线观看| 国产亚洲四十路五十路| 成人影片高清在线观看| 青青青青在线视频免费观看| 91精品国产91青青碰| 热99re69精品8在线播放| 欧美va亚洲va天堂va| 传媒在线播放国产精品一区| 日本一本午夜在线播放| 精品国产高潮中文字幕| 青青尤物在线观看视频网站| 青青擦在线视频国产在线| 成人18禁网站在线播放| 亚洲成人激情av在线| 亚洲日产av一区二区在线| 男生舔女生逼逼的视频| 国产美女一区在线观看| 午夜毛片不卡在线看| 99一区二区在线观看| 国产精品亚洲а∨天堂免| 18禁免费av网站| 在线视频自拍第三页| 人妻另类专区欧美制服| 美女骚逼日出水来了| 大鸡吧插逼逼视频免费看| 直接能看的国产av| 老司机午夜精品视频资源| 黄色资源视频网站日韩| 精品高跟鞋丝袜一区二区| 日本午夜福利免费视频| 男人操女人逼逼视频网站| 999久久久久999| 91色九色porny| 在线免费观看亚洲精品电影| 久久久精品999精品日本| 国产精品免费不卡av| 91精品高清一区二区三区| 漂亮 人妻被中出中文| 精品区一区二区三区四区人妻| 色偷偷伊人大杳蕉综合网| 狠狠操狠狠操免费视频| 国语对白xxxx乱大交| 蜜桃视频入口久久久| 97青青青手机在线视频| 99精品国自产在线人| 蝴蝶伊人久久中文娱乐网| 激情色图一区二区三区| 精品一线二线三线日本| 天堂中文字幕翔田av| 曰本无码人妻丰满熟妇啪啪| 激情小视频国产在线| 黄色片黄色片wyaa| 日韩av中文在线免费观看| 中文字幕在线视频一区二区三区 | 日韩熟女av天堂系列| 亚洲av琪琪男人的天堂| 99热久久极品热亚洲| 爆乳骚货内射骚货内射在线 | 男生舔女生逼逼视频| 中国黄色av一级片| 92福利视频午夜1000看| 日本女大学生的黄色小视频| 98精产国品一二三产区区别| 日韩亚洲高清在线观看| 国产伊人免费在线播放| 一色桃子人妻一区二区三区| 国产精品久久久久网| 在线观看视频一区麻豆| 午夜久久久久久久精品熟女| 97精品综合久久在线| 这里有精品成人国产99| 亚洲一区二区三区五区| 天天日天天日天天射天天干 | 中文字幕一区的人妻欧美日韩| 婷婷五月亚洲综合在线| 91小伙伴中女熟女高潮| 亚洲av人人澡人人爽人人爱| 福利在线视频网址导航| 亚洲一区二区三区精品视频在线| 久久精品在线观看一区二区| 综合精品久久久久97| 国产精品国色综合久久| 老司机免费福利视频网| 东京干手机福利视频| 久久精品亚洲成在人线a| 人妻少妇av在线观看| 青青青激情在线观看视频| 亚洲国产欧美国产综合在线| 91精品国产观看免费| 亚洲欧洲av天堂综合| 天天射夜夜操狠狠干| 亚洲精品国偷自产在线观看蜜桃| 天天日天天透天天操| 69精品视频一区二区在线观看| 国内资源最丰富的网站| 中文字幕av一区在线观看 | 东京干手机福利视频| 亚洲美女高潮喷浆视频| 最近的中文字幕在线mv视频| 在线新三级黄伊人网| 伊人日日日草夜夜草| 亚洲自拍偷拍综合色| 国产精品午夜国产小视频| av中文字幕福利网| 中文字幕日本人妻中出| 国产卡一卡二卡三乱码手机| 久久久久久久亚洲午夜综合福利| 亚欧在线视频你懂的| 国产在线91观看免费观看| 毛茸茸的大外阴中国视频| 精品一区二区三区欧美| 天天干天天操天天扣| 丰满少妇翘臀后进式| av老司机亚洲一区二区| caoporn蜜桃视频| 97超碰国语国产97超碰| 五十路熟女av天堂| 青娱乐蜜桃臀av色| 啊啊啊想要被插进去视频| 美女吃鸡巴操逼高潮视频| 经典av尤物一区二区| 午夜精品亚洲精品五月色| 亚洲偷自拍高清视频| 亚洲综合一区成人在线| 日韩成人综艺在线播放| 午夜美女福利小视频| 午夜场射精嗯嗯啊啊视频| 老司机99精品视频在线观看| 在线视频自拍第三页| 第一福利视频在线观看| 亚洲成人激情视频免费观看了| 2021天天色天天干| 视频一区二区综合精品| 福利视频网久久91| 亚洲国产美女一区二区三区软件| 九色视频在线观看免费| 91在线视频在线精品3| 国产av福利网址大全| 国产成人精品久久二区91| 精品一区二区三区午夜| 日韩三级黄色片网站| 亚洲麻豆一区二区三区| 色婷婷精品大在线观看| 91色老99久久九九爱精品| 91极品新人『兔兔』精品新作| 啪啪啪18禁一区二区三区| 国产日本精品久久久久久久| 天天日天天鲁天天操| 国产午夜亚洲精品不卡在线观看| 日本少妇的秘密免费视频| 午夜精品一区二区三区福利视频| 福利视频网久久91| 99精品国产免费久久| 国产精品中文av在线播放 | 在线不卡日韩视频播放| 国产黑丝高跟鞋视频在线播放| 自拍偷拍日韩欧美一区二区| 2022中文字幕在线| 成人伊人精品色xxxx视频| 亚洲在线免费h观看网站| 91中文字幕最新合集| 亚洲国产成人在线一区| 欧美另类z0z变态| 一区二区三区四区视频在线播放| 很黄很污很色的午夜网站在线观看| 成人av天堂丝袜在线观看| 欧美黑人性猛交xxxxⅹooo| 91免费福利网91麻豆国产精品| 伊人成人综合开心网| 亚洲精品高清自拍av| 把腿张开让我插进去视频| 成熟丰满熟妇高潮xx×xx | 在线国产精品一区二区三区| 在线免费观看靠比视频的网站| 成人高潮aa毛片免费| 99热久久极品热亚洲| 久久久久久cao我的性感人妻 | 亚洲一区二区激情在线| 亚洲在线一区二区欧美| 日本午夜爽爽爽爽爽视频在线观看| 亚洲综合在线视频可播放| 久久精品在线观看一区二区| 青青青青爽手机在线| 国产精品免费不卡av| av成人在线观看一区| 熟女在线视频一区二区三区| 国产三级精品三级在线不卡| 又色又爽又黄的美女裸体| 天天干天天啪天天舔| 馒头大胆亚洲一区二区| 任你操视频免费在线观看| 天天色天天操天天舔| 人妻少妇亚洲精品中文字幕| 婷婷久久久久深爱网| 日韩三级电影华丽的外出| 成人激情文学网人妻| 丰满熟女午夜福利视频| 黄色片黄色片wyaa| 蜜桃视频入口久久久| 91av精品视频在线| 搞黄色在线免费观看| 最新91精品视频在线| av老司机亚洲一区二区| 亚洲精品午夜久久久久| 日韩视频一区二区免费观看| 日韩近亲视频在线观看| 自拍 日韩 欧美激情| 久久久精品999精品日本| 亚洲成人av一区在线| 亚洲欧美激情人妻偷拍| 国产亚洲精品品视频在线| av高潮迭起在线观看| 九色视频在线观看免费| av欧美网站在线观看| 亚洲熟女综合色一区二区三区四区 | 视频二区在线视频观看| 只有精品亚洲视频在线观看| 一区二区三区四区中文| 日本韩国免费一区二区三区视频| 最新中文字幕免费视频| 极品丝袜一区二区三区| 97少妇精品在线观看| 国产精品久久久久久美女校花| 人妻激情图片视频小说| 亚洲一区二区三区偷拍女厕91| aⅴ精产国品一二三产品| 综合激情网激情五月天| 男女啪啪啪啪啪的网站| 成人国产影院在线观看| 午夜激情久久不卡一区二区| 91国产在线视频免费观看| 中文字日产幕乱六区蜜桃| 91小伙伴中女熟女高潮| 91免费福利网91麻豆国产精品| 精品91高清在线观看| 精品高跟鞋丝袜一区二区| 男大肉棒猛烈插女免费视频| 日本少妇在线视频大香蕉在线观看| 日韩人妻xxxxx| 欧美天堂av无线av欧美| 中国熟女一区二区性xx| 国产精品亚洲在线观看| 9色精品视频在线观看| 免费观看丰满少妇做受| 亚洲自拍偷拍综合色| 自拍偷拍日韩欧美一区二区| 国产日韩精品电影7777| 日韩欧美国产一区ab| 亚洲黄色av网站免费播放| 欧美亚洲国产成人免费在线| 人人在线视频一区二区| 在线观看视频网站麻豆| 综合国产成人在线观看| jiuse91九色视频| 一区二区三区美女毛片| 红杏久久av人妻一区| 国产高清97在线观看视频| 亚洲av可乐操首页| 偷拍自拍亚洲美腿丝袜| 亚洲欧美激情人妻偷拍| 在线观看国产网站资源| 在线播放国产黄色av| 伊人综合aⅴ在线网| 1区2区3区4区视频在线观看| 女同久久精品秋霞网| 日韩美在线观看视频黄| av无限看熟女人妻另类av| 久久久精品欧洲亚洲av| 91精品国产91久久自产久强| 亚洲一区av中文字幕在线观看| 18禁美女无遮挡免费| 男生舔女生逼逼的视频| 在线观看黄色成年人网站| 色偷偷伊人大杳蕉综合网| 国产露脸对白在线观看| 19一区二区三区在线播放| 久久这里有免费精品| 国产一区自拍黄视频免费观看| 韩国AV无码不卡在线播放| 午夜精品一区二区三区城中村| 亚洲av午夜免费观看| 国产精品视频欧美一区二区| 免费费一级特黄真人片| 天堂va蜜桃一区入口| 国产一区二区火爆视频| 久久精品久久精品亚洲人| 999久久久久999| 国产精品3p和黑人大战| 国产一级精品综合av| 丝袜长腿第一页在线| 久久久久久cao我的性感人妻 | 亚洲精品久久视频婷婷| 嫩草aⅴ一区二区三区| 男生用鸡操女生视频动漫| 这里有精品成人国产99| 亚洲av人人澡人人爽人人爱| 日韩美女综合中文字幕pp| 又色又爽又黄的美女裸体| 成人免费公开视频无毒 | 超碰97免费人妻麻豆| 色天天天天射天天舔| 亚洲精品中文字幕下载| 久久美欧人妻少妇一区二区三区| 欧美精产国品一二三产品价格 | 最新国产精品拍在线观看| 女生被男生插的视频网站| 午夜精品亚洲精品五月色| 国产白袜脚足J棉袜在线观看| 99国产精品窥熟女精品| 亚洲2021av天堂| 亚洲欧美激情中文字幕| 五色婷婷综合狠狠爱| 直接能看的国产av| 日韩欧美中文国产在线| 国产精品久久久久网| 成人区人妻精品一区二视频| 国产在线免费观看成人| 99精品免费观看视频| 3D动漫精品啪啪一区二区下载| 五十路息与子猛烈交尾视频| 视频在线免费观看你懂得| 青青草国内在线视频精选| 丰满的继坶3中文在线观看| h国产小视频福利在线观看| 亚洲高清免费在线观看视频| 天天日天天操天天摸天天舔| 国产在线观看黄色视频| 一区二区三区的久久的蜜桃的视频| 91国产资源在线视频| 国产黄色a级三级三级三级| 换爱交换乱高清大片| 99亚洲美女一区二区三区| 在线观看免费岛国av| 成人色综合中文字幕| 亚洲免费va在线播放| 岛国av高清在线成人在线| 蜜桃专区一区二区在线观看| 中文字幕之无码色多多| 天堂av在线官网中文| 黄色成人在线中文字幕| 少妇与子乱在线观看| 不卡精品视频在线观看| 一个色综合男人天堂| 男大肉棒猛烈插女免费视频| 四川乱子伦视频国产vip| 亚洲成高清a人片在线观看| 国产成人午夜精品福利| 最新中文字幕免费视频| 一区二区久久成人网| 成人性黑人一级av| 色偷偷伊人大杳蕉综合网| 蜜臀av久久久久久久| 不卡日韩av在线观看| 国产1区,2区,3区| 区一区二区三国产中文字幕| 日日夜夜狠狠干视频| 超级福利视频在线观看| 人人妻人人爽人人添夜| 三级等保密码要求条款| 漂亮 人妻被中出中文| 91试看福利一分钟| 成年午夜免费无码区| 中文字幕视频一区二区在线观看| 天天摸天天亲天天舔天天操天天爽 | 亚洲天堂第一页中文字幕| 中国把吊插入阴蒂的视频| 激情小视频国产在线| 日韩精品一区二区三区在线播放| 国产视频网站一区二区三区| 五月色婷婷综合开心网4438| 综合色区亚洲熟妇shxstz| 天堂资源网av中文字幕| 青青青艹视频在线观看| 91桃色成人网络在线观看| 亚洲高清视频在线不卡| 亚洲天堂有码中文字幕视频| 91免费观看在线网站| 大骚逼91抽插出水视频| 日本精品美女在线观看| 黄片三级三级三级在线观看| 亚洲的电影一区二区三区| 99久久久无码国产精品性出奶水| 国产福利在线视频一区| 精品亚洲在线免费观看| 天天操天天干天天艹| 二区中出在线观看老师| 蜜桃视频17c在线一区二区| 国产女人被做到高潮免费视频| 国产大鸡巴大鸡巴操小骚逼小骚逼| 亚洲国产成人无码麻豆艾秋| 亚洲国产在线精品国偷产拍| 高潮喷水在线视频观看| 中国熟女一区二区性xx| 精彩视频99免费在线| 国产一区二区在线欧美| 亚洲1卡2卡三卡4卡在线观看 | 欧美成人精品在线观看| 偷拍自拍亚洲视频在线观看| 端庄人妻堕落挣扎沉沦| 啊用力插好舒服视频| 中文字幕AV在线免费看 | 换爱交换乱高清大片| 国产乱子伦一二三区| 欧美va不卡视频在线观看| 在线观看成人国产电影| 老司机午夜精品视频资源| 99热99这里精品6国产| 成熟丰满熟妇高潮xx×xx| 国产成人精品亚洲男人的天堂| 视频 一区二区在线观看| 国产V亚洲V天堂无码欠欠| 在线观看免费岛国av| 在线视频免费观看网| 后入美女人妻高清在线| 在线观看亚洲人成免费网址| 国产麻豆精品人妻av| 偷青青国产精品青青在线观看 | 熟女91pooyn熟女| 黄色大片免费观看网站| 老司机欧美视频在线看| av中文字幕福利网| 国产乱子伦精品视频潮优女| 一区二区免费高清黄色视频| 国产欧美日韩第三页| 国产一区二区火爆视频| 黄色无码鸡吧操逼视频| 老司机免费视频网站在线看| 亚洲伊人色一综合网| 日韩精品激情在线观看| 国产一区av澳门在线观看| 激情图片日韩欧美人妻| 乱亲女秽乱长久久久| 不卡精品视频在线观看| 国产97视频在线精品| 成人亚洲精品国产精品| 一区二区三区四区视频在线播放 | 自拍偷拍 国产资源| 成人国产影院在线观看| 国产视频网站国产视频| 超级碰碰在线视频免费观看| 一区二区麻豆传媒黄片| 欧美乱妇无乱码一区二区| 在线观看av观看av| 国产精品久久综合久久| 99久久中文字幕一本人| 在线可以看的视频你懂的| 97超碰最新免费在线观看| 色综合色综合色综合色| 大胸性感美女羞爽操逼毛片| 国产精品成人xxxx| 亚洲av色香蕉一区二区三区| 东游记中文字幕版哪里可以看到| 亚洲国产美女一区二区三区软件 | 中国熟女一区二区性xx| 日本一二三区不卡无| 初美沙希中文字幕在线| 中文字幕高清免费在线人妻| 亚洲熟妇x久久av久久| 国产精品人妻熟女毛片av久| 免费观看丰满少妇做受| 午夜婷婷在线观看视频| 国产在线自在拍91国语自产精品| 99久久超碰人妻国产| 九色视频在线观看免费| 大香蕉福利在线观看| 婷婷久久一区二区字幕网址你懂得| 青青草在观免费国产精品| 天天操天天污天天射| 在线制服丝袜中文字幕| 男人和女人激情视频| 久久精品视频一区二区三区四区| 2o22av在线视频| 日韩美女搞黄视频免费| 狍和女人的王色毛片| 偷拍自拍 中文字幕| 深田咏美亚洲一区二区| 性欧美日本大妈母与子| 欧美性感尤物人妻在线免费看| 免费在线观看污污视频网站| 社区自拍揄拍尻屁你懂的 | 青青青青青免费视频| 久久久久久性虐视频| 亚洲成av人无码不卡影片一| 人妻自拍视频中国大陆| 国产视频一区在线观看| 精品一区二区亚洲欧美| 黄色视频在线观看高清无码| 97人妻夜夜爽二区欧美极品| 中国黄片视频一区91| 国产精品自拍在线视频| av一区二区三区人妻| 人妻少妇中文有码精品| 亚洲av无女神免非久久| 亚洲欧美一区二区三区爱爱动图 | 亚洲av日韩av网站| 亚洲成人情色电影在线观看| 中文字幕av一区在线观看| 国产真实灌醉下药美女av福利| 99精品国产免费久久| 日本韩国在线观看一区二区| 欧美日韩高清午夜蜜桃大香蕉| 国产三级影院在线观看| 在线观看一区二区三级| 人妻熟女中文字幕aⅴ在线| 99热这里只有国产精品6| 欧美日韩一区二区电影在线观看| 国产真实灌醉下药美女av福利| 这里有精品成人国产99| 亚欧在线视频你懂的| 日本少妇的秘密免费视频| 五月婷婷在线观看视频免费| 999热精品视频在线| 51国产成人精品视频| 亚洲超碰97人人做人人爱| 蜜臀成人av在线播放| 国产精品视频男人的天堂| 色噜噜噜噜18禁止观看| av网址国产在线观看| 色偷偷伊人大杳蕉综合网 | 日本女人一级免费片| 一区二区三区四区视频在线播放| 亚洲乱码中文字幕在线| 天天操天天弄天天射| 精品91高清在线观看| 超碰中文字幕免费观看| 国产精品探花熟女在线观看| 亚洲一区二区三区偷拍女厕91| aiss午夜免费视频| 中文字幕综合一区二区| 韩国黄色一级二级三级| 国产剧情演绎系列丝袜高跟| 色综合久久五月色婷婷综合| 1000部国产精品成人观看视频| 亚洲欧美一区二区三区电影| 美女日逼视频免费观看| 最新国产亚洲精品中文在线| 加勒比视频在线免费观看| 三上悠亚和黑人665番号| 丰满熟女午夜福利视频| 老熟妇凹凸淫老妇女av在线观看| 精品亚洲在线免费观看| 偷拍美女一区二区三区| 日本真人性生活视频免费看| 黑人解禁人妻叶爱071| 18禁污污污app下载| jiujiure精品视频在线| 51国产成人精品视频| 亚洲人妻国产精品综合| 亚洲国产欧美一区二区三区…| 青春草视频在线免费播放| 视频在线亚洲一区二区| 99热99re在线播放| 日韩av大胆在线观看| 亚洲欧洲一区二区在线观看| 黄色中文字幕在线播放| 亚洲中文字幕国产日韩| 国产又粗又猛又爽又黄的视频在线| 亚洲视频在线视频看视频在线| 北条麻妃av在线免费观看| 中文字幕在线免费第一页| 四虎永久在线精品免费区二区| 毛茸茸的大外阴中国视频| 亚洲精品一线二线在线观看| 亚洲欧美福利在线观看| 五十路熟女人妻一区二| 99精品国自产在线人| 一区二区三区的久久的蜜桃的视频| 青青青青青手机视频| 性感美女高潮视频久久久| 国产精品3p和黑人大战| 久久这里只有精品热视频| 青青青青青操视频在线观看| av久久精品北条麻妃av观看| 蜜臀av久久久久蜜臀av麻豆| 婷婷久久一区二区字幕网址你懂得| 偷拍3456eee| 91社福利《在线观看| 动漫黑丝美女的鸡巴| 亚洲欧洲av天堂综合| 亚洲在线免费h观看网站| 欧美亚洲免费视频观看| 中文字幕在线视频一区二区三区 | 香港一级特黄大片在线播放| 懂色av之国产精品| 婷婷五月亚洲综合在线| 国产精品久久久久网| av乱码一区二区三区| 久久精品国产23696| 亚洲av日韩av网站| 国产日韩精品电影7777| 国产精品一区二区av国| 亚洲国产免费av一区二区三区| 一本一本久久a久久精品综合不卡| 欧美精品资源在线观看| 80电影天堂网官网| 91大神福利视频网| 中文字幕第1页av一天堂网| 一区二区三区久久久91| 大鸡巴操娇小玲珑的女孩逼| 大屁股肉感人妻中文字幕在线| 国产av欧美精品高潮网站| 天天干天天操天天扣| 亚洲人妻视频在线网| 狠狠躁狠狠爱网站视频| 天天射夜夜操狠狠干| 欧美日韩激情啪啪啪| 成人网18免费视频版国产| 97瑟瑟超碰在线香蕉| 成人av亚洲一区二区| 国产清纯美女al在线| 久久久久久久亚洲午夜综合福利| 93精品视频在线观看| 天天干夜夜操天天舔| 久草视频首页在线观看| 狠狠躁夜夜躁人人爽天天久天啪| 欧美亚洲免费视频观看| 免费无毒热热热热热热久| 青青操免费日综合视频观看| 人妻久久无码中文成人| 黑人进入丰满少妇视频| 青娱乐在线免费视频盛宴| 福利在线视频网址导航| 开心 色 六月 婷婷| 福利视频一区二区三区筱慧| 精品国产午夜视频一区二区| 国产清纯美女al在线| 国产揄拍高清国内精品对白| 四虎永久在线精品免费区二区| 亚洲精品国产久久久久久| 欧美在线偷拍视频免费看| 漂亮 人妻被中出中文| avjpm亚洲伊人久久| 日本av熟女在线视频| 岛国黄色大片在线观看| 日本性感美女视频网站| 97超碰免费在线视频| 一区二区麻豆传媒黄片| 青青擦在线视频国产在线| 综合一区二区三区蜜臀| 在线观看视频网站麻豆| 在线观看av观看av| 六月婷婷激情一区二区三区| 久久久久久久99精品| 国产大鸡巴大鸡巴操小骚逼小骚逼 | 一区二区视频在线观看视频在线| 色偷偷伊人大杳蕉综合网| 亚洲成人精品女人久久久| 宅男噜噜噜666免费观看| 日本免费一级黄色录像| 男女啪啪啪啪啪的网站| 亚洲欧美国产综合777| 午夜福利人人妻人人澡人人爽| 久久机热/这里只有| 国产一区二区视频观看| 国产精品自拍视频大全| 色综合久久久久久久久中文| 大黑人性xxxxbbbb| 黄片色呦呦视频免费看| 伊人成人在线综合网| 国产在线观看免费人成短视频| 青青草视频手机免费在线观看| 青青青青爽手机在线| 2021久久免费视频| 中文字幕奴隷色的舞台50| 欧美国产亚洲中英文字幕| 久久久精品精品视频视频| 女同性ⅹxx女同h偷拍| 超pen在线观看视频公开97| 欧美成一区二区三区四区| 东京热男人的av天堂| 一级黄色av在线观看| 国产在线观看黄色视频| 天天干天天搞天天摸| 亚洲欧美人精品高清| 337p日本大胆欧美人| 欧美黑人与人妻精品| 伊人综合aⅴ在线网| 100%美女蜜桃视频| 午夜福利资源综合激情午夜福利资| 被大鸡吧操的好舒服视频免费| 国产真实乱子伦a视频| 中文字幕第一页国产在线| 91国产在线视频免费观看| 久草视频中文字幕在线观看| 国产在线拍揄自揄视频网站| 欧美少妇性一区二区三区| 亚洲av一妻不如妾| 亚洲av黄色在线网站| 欧美日本在线视频一区| 午夜福利人人妻人人澡人人爽| 青青青艹视频在线观看| 好吊视频—区二区三区| 国产高清精品一区二区三区| 91精品国产高清自在线看香蕉网| 亚洲超碰97人人做人人爱|