国产无遮挡裸体免费直播视频,久久精品国产蜜臀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

最新評論

国产之丝袜脚在线一区二区三区 | 99热久久极品热亚洲| 国产又粗又黄又硬又爽| 偷拍自拍国产在线视频| 亚洲国产免费av一区二区三区 | 午夜国产免费福利av| 只有精品亚洲视频在线观看| 亚洲欧美精品综合图片小说| 超碰在线观看免费在线观看| 精品久久久久久久久久中文蒉| 国产高清在线在线视频| 在线观看国产网站资源| 亚洲一区二区三区av网站| 日韩不卡中文在线视频网站| tube69日本少妇| 在线免费观看99视频| 国产麻豆国语对白露脸剧情| 亚洲久久午夜av一区二区| 把腿张开让我插进去视频| 日韩精品二区一区久久| 18禁精品网站久久| 伊人综合免费在线视频| 黄色在线观看免费观看在线| 果冻传媒av一区二区三区| 最新的中文字幕 亚洲| 精品国产高潮中文字幕| 欧美精品激情在线最新观看视频| 国产精品污污污久久| 熟女在线视频一区二区三区| 国产综合高清在线观看| 日韩熟女av天堂系列| 99精品久久久久久久91蜜桃| 天天日夜夜干天天操| 亚洲日本一区二区久久久精品| 国产综合高清在线观看| 扒开让我视频在线观看| 激情啪啪啪啪一区二区三区| 婷婷综合亚洲爱久久| 美女张开腿让男生操在线看| 97人妻夜夜爽二区欧美极品| 水蜜桃一区二区三区在线观看视频| 欧美交性又色又爽又黄麻豆| 精品久久久久久久久久中文蒉| 中文字幕一区二区三区人妻大片| 精品少妇一二三视频在线| 精品人妻一二三区久久| 国产日韩一区二区在线看| 人妻av无码专区久久绿巨人| 很黄很污很色的午夜网站在线观看| 亚洲国产精品久久久久蜜桃| 欧美精品激情在线最新观看视频| 夫妻在线观看视频91| 黄色成人在线中文字幕| 日本免费午夜视频网站| 日本a级视频老女人| 在线视频免费观看网| 日本精品一区二区三区在线视频。| av网站色偷偷婷婷网男人的天堂| 亚洲一区二区久久久人妻| 国产内射中出在线观看| 亚洲第一伊人天堂网| 中文字幕高清在线免费播放| 午夜场射精嗯嗯啊啊视频| 久久99久久99精品影院| 青青青视频自偷自拍38碰| 亚洲成人免费看电影| 视频一区二区在线免费播放| 在线视频自拍第三页| 538精品在线观看视频| 国产真实乱子伦a视频| 噜噜色噜噜噜久色超碰| 亚洲av香蕉一区区二区三区犇| 久久久久久cao我的性感人妻| av视屏免费在线播放| 国产三级影院在线观看| 91极品新人『兔兔』精品新作| 青青青青视频在线播放| 天天日天天透天天操| 亚洲中文精品人人免费| 天天做天天爽夜夜做少妇| 亚洲天堂成人在线观看视频网站| 日韩少妇人妻精品无码专区| 亚洲va天堂va国产va久| 天天干天天操天天摸天天射| 97人妻无码AV碰碰视频| 青娱乐蜜桃臀av色| 黄色录像鸡巴插进去| 18禁美女羞羞免费网站| 2019av在线视频| 99精品一区二区三区的区| 超碰公开大香蕉97| 国产精品一区二区av国| 国产片免费观看在线观看| 亚洲中文字幕人妻一区| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | 国产女人被做到高潮免费视频| 五月天色婷婷在线观看视频免费| 婷婷综合蜜桃av在线| 97人妻色免费视频| 视频 国产 精品 熟女 | 欧洲亚洲欧美日韩综合| 婷婷综合亚洲爱久久| 天天日天天舔天天射进去| 91综合久久亚洲综合| 日比视频老公慢点好舒服啊| 99精品视频在线观看免费播放| 日本性感美女三级视频| 欧美日韩高清午夜蜜桃大香蕉| 很黄很污很色的午夜网站在线观看| 偷拍自拍福利视频在线观看| 国产中文字幕四区在线观看| 偷拍自拍福利视频在线观看| 特级无码毛片免费视频播放| 一区二区三区国产精选在线播放| 黄色大片男人操女人逼| 国产视频一区在线观看| 中国无遮挡白丝袜二区精品| 97人妻色免费视频| 视频一区二区三区高清在线| 91自产国产精品视频| 亚洲国产40页第21页| 99国产精品窥熟女精品| 高清一区二区欧美系列| 日本男女操逼视频免费看| 福利视频一区二区三区筱慧 | 手机看片福利盒子日韩在线播放| 班长撕开乳罩揉我胸好爽| 国产高清在线在线视频| 国产精品日韩欧美一区二区| 一区二区三区日韩久久| 天天干天天操天天爽天天摸| 在线免费视频 自拍| 国产夫妻视频在线观看免费| 亚洲欧美精品综合图片小说| 一区二区在线视频中文字幕| 欧亚日韩一区二区三区观看视频| 天天日天天摸天天爱| 男人靠女人的逼视频| 亚洲在线一区二区欧美| 亚洲免费成人a v| 青青青青视频在线播放| 日韩熟女av天堂系列| free性日本少妇| 精品黑人一区二区三区久久国产| 欧美日本在线观看一区二区| 人妻丝袜榨强中文字幕| 黑人乱偷人妻中文字幕| 亚洲成人av一区在线| 人人妻人人爽人人添夜| av资源中文字幕在线观看| 亚洲成人线上免费视频观看| 老司机免费福利视频网| 午夜免费体验区在线观看| 精品久久婷婷免费视频| 国产乱弄免费视频观看| 国产男女视频在线播放| 亚洲精品国品乱码久久久久| 三级等保密码要求条款| 精品高潮呻吟久久av| 天天色天天舔天天射天天爽| 国产女人叫床高潮大片视频| 色偷偷伊人大杳蕉综合网 | 亚洲精品乱码久久久本| sspd152中文字幕在线| 欧美一区二区中文字幕电影| 视频二区在线视频观看| 国产精品久久久黄网站| 果冻传媒av一区二区三区 | 国产亚洲天堂天天一区| 大香蕉大香蕉大香蕉大香蕉大香蕉| 福利视频一区二区三区筱慧 | 久久精品国产23696| 操操网操操伊剧情片中文字幕网| 毛茸茸的大外阴中国视频| 日韩精品中文字幕在线| 91啪国自产中文字幕在线| 日本精品视频不卡一二三| 在线观看日韩激情视频| 91精品综合久久久久3d动漫| 非洲黑人一级特黄片| 成人av在线资源网站| 亚洲一区制服丝袜美腿 | 日本精品视频不卡一二三| 岛国青草视频在线观看| 日本熟妇色熟妇在线观看| 国产日韩精品免费在线| 白白操白白色在线免费视频 | 色哟哟国产精品入口| 男人靠女人的逼视频| 国产V亚洲V天堂无码欠欠| 视频一区 视频二区 视频| 熟女国产一区亚洲中文字幕| 免费十精品十国产网站| 天天操天天干天天艹| 91欧美在线免费观看| 亚洲午夜伦理视频在线| 天天做天天干天天舔| 性色蜜臀av一区二区三区| 哥哥姐姐综合激情小说| 亚洲图片偷拍自拍区| 天天日夜夜干天天操| 天天躁日日躁狠狠躁躁欧美av| 爱有来生高清在线中文字幕| 青青草在观免费国产精品| 欧美地区一二三专区| 五十路在线观看完整版| 色伦色伦777国产精品| 99精品免费观看视频| 欧美精品一二三视频| 五月天中文字幕内射| 精品一区二区三区在线观看| 91九色porny蝌蚪国产成人| 青青青青青手机视频| 欧美中国日韩久久精品| 免费观看丰满少妇做受| 99久久久无码国产精品性出奶水| 成人在线欧美日韩国产| 啊啊啊想要被插进去视频| 日本性感美女三级视频| 老司机欧美视频在线看| av中文字幕福利网| 欧美视频综合第一页| 啊啊好大好爽啊啊操我啊啊视频 | 99国内精品永久免费视频| 成年人黄色片免费网站| 色综合久久无码中文字幕波多| 天天操夜夜操天天操天天操| 日本一区美女福利视频| 国产精品视频资源在线播放| 免费一级黄色av网站| 青青青青视频在线播放| 年轻的人妻被夫上司侵犯| 2020国产在线不卡视频| 日本女人一级免费片| 888欧美视频在线| 国产福利小视频二区| 亚洲午夜电影之麻豆| 中文字幕午夜免费福利视频| 在线网站你懂得老司机| 1区2区3区不卡视频| 国产日韩一区二区在线看| 精品国产在线手机在线| 3D动漫精品啪啪一区二区下载| 欧美日韩一区二区电影在线观看| 亚洲成人情色电影在线观看| 国产精品久久综合久久| 夏目彩春在线中文字幕| 孕妇奶水仑乱A级毛片免费看| 99视频精品全部15| 免费看国产av网站| 午夜频道成人在线91| 亚洲一区二区三区久久午夜| 日本男女操逼视频免费看| 天美传媒mv视频在线观看| 午夜精品久久久久麻豆影视| 偷拍自拍福利视频在线观看| 人妻丝袜精品中文字幕| 人人妻人人爱人人草| 日本韩国免费一区二区三区视频 | 午夜精品福利91av| 亚洲精品无码久久久久不卡| 欧美黄片精彩在线免费观看| 三级av中文字幕在线观看| av一本二本在线观看| 福利一二三在线视频观看| 最近中文字幕国产在线| xxx日本hd高清| 亚洲一区二区激情在线| 人妻熟女在线一区二区| 午夜大尺度无码福利视频| 亚洲午夜伦理视频在线| 亚洲精品无码色午夜福利理论片| 55夜色66夜色国产精品站| 78色精品一区二区三区| 亚洲成人av一区久久| 边摸边做超爽毛片18禁色戒| 国产麻豆91在线视频| 午夜久久香蕉电影网| 中文字幕在线视频一区二区三区| 日韩特级黄片高清在线看| www日韩a级s片av| 午夜精品在线视频一区| 在线免费观看黄页视频| 宅男噜噜噜666免费观看| 超碰公开大香蕉97| 黄色片一级美女黄色片| 黄色av网站免费在线| 一本一本久久a久久精品综合不卡| 国产成人自拍视频播放| 亚洲精品国品乱码久久久久| 不卡精品视频在线观看| 免费在线看的黄网站| 国产变态另类在线观看| 日日夜夜大香蕉伊人| 五月婷婷在线观看视频免费| 国产精品精品精品999| 三级黄色亚洲成人av| 日日夜夜大香蕉伊人| 久草电影免费在线观看| 国产亚洲精品品视频在线| 天天日天天添天天爽| 中文字幕亚洲久久久| 1000小视频在线| 9久在线视频只有精品| 中文字幕免费在线免费| 天天干天天啪天天舔| 夜夜嗨av一区二区三区中文字幕| 免费无毒热热热热热热久| 亚洲av色图18p| 精品视频中文字幕在线播放| 久久久精品999精品日本| 精品av国产一区二区三区四区| 国产精品久久久久久美女校花| 99人妻视频免费在线| 国产高潮无码喷水AV片在线观看| 91国产在线视频免费观看| 天天操天天插天天色| 亚洲图库另类图片区| 2021国产一区二区| 天天操天天干天天日狠狠插 | 国产乱弄免费视频观看| 丝袜亚洲另类欧美变态| 午夜美女少妇福利视频| 天天插天天狠天天操| 小泽玛利亚视频在线观看| 青草青永久在线视频18| 亚洲公开视频在线观看| 精品高跟鞋丝袜一区二区| 综合页自拍视频在线播放| 国产第一美女一区二区三区四区 | 久久久久只精品国产三级| 老师啊太大了啊啊啊尻视频| 少妇高潮一区二区三区| 18禁污污污app下载| 欧美成人小视频在线免费看| 国产精品自拍偷拍a| 国产精品久久久黄网站| 精品美女福利在线观看| 98视频精品在线观看| 在线免费观看国产精品黄色| 欧美麻豆av在线播放| 国产精品成久久久久三级蜜臀av| 丰满的子国产在线观看| 精品久久久久久久久久久久人妻 | 国产日韩精品一二三区久久久| 天天摸天天干天天操科普| 亚洲熟妇久久无码精品| 2020久久躁狠狠躁夜夜躁 | 天天日天天日天天射天天干| 亚洲推理片免费看网站| 国产一区二区视频观看| 日韩美女综合中文字幕pp| 天天日天天敢天天干| 日韩欧美亚洲熟女人妻| 传媒在线播放国产精品一区| 熟女人妻在线观看视频| 91精品国产91久久自产久强| 91啪国自产中文字幕在线| 无码精品一区二区三区人| 亚洲天堂精品久久久| 国产中文字幕四区在线观看| 中文字幕 亚洲av| 日本韩国免费一区二区三区视频 | 国产高清精品一区二区三区| av中文字幕福利网| 自拍偷拍日韩欧美一区二区| 中文字幕最新久久久| 免费看国产av网站| 免费手机黄页网址大全| 馒头大胆亚洲一区二区| 日韩欧美亚洲熟女人妻| 久久久久久cao我的性感人妻| 久久久久久99国产精品| 999九九久久久精品| 激情人妻校园春色亚洲欧美| 午夜精品一区二区三区福利视频| 男人插女人视频网站| 日本男女操逼视频免费看| 亚洲国产成人最新资源| 色天天天天射天天舔| 久久农村老妇乱69系列| 亚洲护士一区二区三区| 久久久制服丝袜中文字幕| 99久久99一区二区三区| 大胸性感美女羞爽操逼毛片| 精品黑人巨大在线一区| 午夜激情高清在线观看| 精品国产成人亚洲午夜| 在线观看av亚洲情色| 亚洲av日韩av网站| 人人妻人人澡欧美91精品| 国产精品大陆在线2019不卡| 1000部国产精品成人观看视频| 天天做天天干天天舔| 99精品国产aⅴ在线观看| 中文字幕一区的人妻欧美日韩| 美女张开腿让男生操在线看| 青青伊人一精品视频| 国产极品精品免费视频| 小泽玛利亚视频在线观看| 天天日天天干天天要| 人妻少妇一区二区三区蜜桃| 日本女人一级免费片| 精品久久久久久高潮| 久久美欧人妻少妇一区二区三区| 日本www中文字幕| av中文字幕在线导航| 香蕉aⅴ一区二区三区| 成人动漫大肉棒插进去视频| 中国熟女@视频91| 青草亚洲视频在线观看| 传媒在线播放国产精品一区| 在线观看视频网站麻豆| 天堂女人av一区二区| 国产三级影院在线观看| 欧美视频不卡一区四区| 一级A一级a爰片免费免会员| 男人的网址你懂的亚洲欧洲av| 亚洲午夜电影在线观看| 天天日天天干天天插舔舔| 在线制服丝袜中文字幕| 激情内射在线免费观看| 97精品成人一区二区三区| 精品人妻一二三区久久| 国产美女一区在线观看| 亚洲国产欧美一区二区丝袜黑人| 天天日夜夜操天天摸| 国产一区二区神马久久| 亚洲av黄色在线网站| japanese日本熟妇另类| 夜色17s精品人妻熟女| 蜜桃视频在线欧美一区| 日本又色又爽又黄又粗| 日韩美女精品视频在线观看网站 | 97瑟瑟超碰在线香蕉| 日本精品一区二区三区在线视频。| 欧美亚洲一二三区蜜臀| 午夜激情高清在线观看| 大骚逼91抽插出水视频| 国产欧美精品一区二区高清 | 日本又色又爽又黄又粗| 天天操天天操天天碰| 日本裸体熟妇区二区欧美| 视频一区 二区 三区 综合| 端庄人妻堕落挣扎沉沦| 亚洲av人人澡人人爽人人爱| 性色av一区二区三区久久久| 熟妇一区二区三区高清版| 黑人解禁人妻叶爱071| sspd152中文字幕在线| 91九色porny国产在线| 人人超碰国字幕观看97| 日本一本午夜在线播放| 精品黑人一区二区三区久久国产| 国产91嫩草久久成人在线视频| 日本午夜久久女同精女女| 久精品人妻一区二区三区 | 午夜福利资源综合激情午夜福利资| 日韩三级黄色片网站| 青青青青爽手机在线| 亚洲国产最大av综合| 任我爽精品视频在线播放| 快点插进来操我逼啊视频| 欧美久久一区二区伊人| 同居了嫂子在线播高清中文| 午夜91一区二区三区| 国产精品自拍偷拍a| 国产无遮挡裸体免费直播视频 | 天天日天天干天天干天天日| 韩国亚洲欧美超一级在线播放视频| 2020久久躁狠狠躁夜夜躁| 欧美一区二区三区四区性视频| 黄色录像鸡巴插进去| 久青青草视频手机在线免费观看| 青青草原网站在线观看| 亚洲熟妇无码一区二区三区| 人妻少妇精品久久久久久| 欧美精产国品一二三产品价格| 91亚洲精品干熟女蜜桃频道| 2021久久免费视频| 白嫩白嫩美女极品国产在线观看| 国产精品伦理片一区二区| av完全免费在线观看av| 天天做天天干天天操天天射| 国产视频在线视频播放| 亚洲日产av一区二区在线| 爱有来生高清在线中文字幕| aⅴ精产国品一二三产品| 啊啊好大好爽啊啊操我啊啊视频| 欧美精产国品一二三区| 国产av一区2区3区| 欧美精品久久久久久影院| 欧美韩国日本国产亚洲| 久久精品国产999| 美女小视频网站在线| 开心 色 六月 婷婷| 在线观看一区二区三级| 2018最新中文字幕在线观看| 国产又粗又黄又硬又爽| 欧美精品一二三视频| 亚欧在线视频你懂的| 经典av尤物一区二区| 91破解版永久免费| 热思思国产99re| 日本韩国免费福利精品| 国产精品视频资源在线播放| 日本免费视频午夜福利视频| 一区二区三区四区中文| 91人妻精品一区二区在线看| 天天日天天玩天天摸| 91九色porny国产在线| 青青草成人福利电影| 亚洲久久午夜av一区二区| 亚洲老熟妇日本老妇| 亚洲熟女久久久36d| 亚洲综合色在线免费观看| 淫秽激情视频免费观看| 精品91自产拍在线观看一区| 日韩亚国产欧美三级涩爱| 深田咏美亚洲一区二区| 91she九色精品国产| 午夜精品亚洲精品五月色| 91色九色porny| 成人精品视频99第一页| 黄色无码鸡吧操逼视频| 视频啪啪啪免费观看| 色婷婷综合激情五月免费观看| 久久免看30视频口爆视频| 国产高清女主播在线| 巨乳人妻日下部加奈被邻居中出| 在线不卡成人黄色精品| 中文字幕日韩无敌亚洲精品| 天天草天天色天天干| 中文字幕日韩精品日本| 欧美另类一区二区视频| 亚洲一级美女啪啪啪| 美女在线观看日本亚洲一区| 亚洲免费福利一区二区三区| 老熟妇凹凸淫老妇女av在线观看| 中文字幕乱码人妻电影| 久草视频 久草视频2| 日本熟妇色熟妇在线观看| 亚洲丝袜老师诱惑在线观看| 手机看片福利盒子日韩在线播放| 视频在线免费观看你懂得| 国产变态另类在线观看| 视频久久久久久久人妻| 超碰97人人做人人爱| 婷婷激情四射在线观看视频| 黄色成人在线中文字幕| 夜色17s精品人妻熟女| 无码国产精品一区二区高潮久久4| 免费成人va在线观看| 精品老妇女久久9g国产| 91精品国产观看免费| 3337p日本欧洲大胆色噜噜| 欧美日韩国产一区二区三区三州 | 最新97国产在线视频| 水蜜桃国产一区二区三区| 青草青永久在线视频18| av天堂中文免费在线| 搞黄色在线免费观看| 激情五月婷婷综合色啪| 亚洲最大黄了色网站| 天天躁日日躁狠狠躁av麻豆| 中文字幕在线欧美精品| 一区二区三区精品日本| 亚洲专区激情在线观看视频| 第一福利视频在线观看 | 日本女大学生的黄色小视频| 天天想要天天操天天干| 三级av中文字幕在线观看| 99热碰碰热精品a中文| av一区二区三区人妻| 久久艹在线观看视频| 中文字幕人妻一区二区视频| 九色porny九色9l自拍视频| av中文字幕电影在线看| 91麻豆精品91久久久久同性| 久草视频首页在线观看| 黄色成年网站午夜在线观看| 国产在线拍揄自揄视频网站| 亚洲图片偷拍自拍区| 青娱乐极品视频青青草| 99热久久这里只有精品| 亚洲精品无码色午夜福利理论片| 欧美女同性恋免费a| 天天日天天添天天爽| 亚洲免费在线视频网站| 888欧美视频在线| 中文字幕第一页国产在线| 亚国产成人精品久久久| 午夜蜜桃一区二区三区| 99热99re在线播放| 天天日天天添天天爽| 国产精品视频资源在线播放| 青青在线视频性感少妇和隔壁黑丝 | 美日韩在线视频免费看| 狠狠操操操操操操操操操| 国产aⅴ一线在线观看| 国产视频一区二区午夜| 超污视频在线观看污污污| 一区二区视频在线观看视频在线| 韩国爱爱视频中文字幕| 老鸭窝在线观看一区| 成人乱码一区二区三区av| 黄片大全在线观看观看| www日韩毛片av| 国产高清在线在线视频| 成人18禁网站在线播放| 亚洲精品色在线观看视频| 国产一区二区在线欧美| 青青青青青青草国产| 国产使劲操在线播放| 亚洲图库另类图片区| 亚洲av男人的天堂你懂的| 色狠狠av线不卡香蕉一区二区 | 日韩av大胆在线观看| 午夜在线精品偷拍一区二| 青青青艹视频在线观看| 青草亚洲视频在线观看| 亚洲精品 日韩电影| 国产日韩av一区二区在线| 黄色三级网站免费下载| 77久久久久国产精产品| 欧美日韩人妻久久精品高清国产| 久久永久免费精品人妻专区| 亚洲欧美精品综合图片小说| 在线免费观看黄页视频| 成人30分钟免费视频| 午夜精品在线视频一区| 亚洲天堂精品久久久| 亚洲伊人色一综合网| 在线观看免费视频色97| 同居了嫂子在线播高清中文| jiuse91九色视频| 国产精品入口麻豆啊啊啊| 日韩激情文学在线视频| 男人的天堂一区二区在线观看| 激情内射在线免费观看| 中文字幕人妻三级在线观看| 欧美黄片精彩在线免费观看| 国产黄色片在线收看| 亚洲青青操骚货在线视频| 五月色婷婷综合开心网4438| 女蜜桃臀紧身瑜伽裤| 女同久久精品秋霞网| 顶级尤物粉嫩小尤物网站| 黄色片黄色片wyaa| 亚洲一区制服丝袜美腿| 男人天堂av天天操| 动漫精品视频在线观看| 欧美日韩高清午夜蜜桃大香蕉| 女同性ⅹxx女同hd| 亚洲视频乱码在线观看| 成年人的在线免费视频| 亚洲1区2区3区精华液| 亚洲欧美清纯唯美另类| 国产麻豆精品人妻av| 一区二区三区av高清免费| 2022天天干天天操| 男人天堂av天天操| 国产免费高清视频视频| 免费看国产av网站| 日本一二三中文字幕| 中文字日产幕乱六区蜜桃| 欧美中国日韩久久精品| 日本一区二区三区免费小视频| 亚洲一区二区三区久久午夜| 搡老熟女一区二区在线观看| 国产熟妇一区二区三区av | 亚洲精品无码久久久久不卡| 天堂av在线官网中文| 中文字幕视频一区二区在线观看| jiujiure精品视频在线| 欧美区一区二区三视频| 亚洲欧美久久久久久久久| 亚洲 国产 成人 在线| 人人妻人人人操人人人爽| 精品一线二线三线日本| 99人妻视频免费在线| 绯色av蜜臀vs少妇| 青娱乐极品视频青青草| 岛国一区二区三区视频在线| 风流唐伯虎电视剧在线观看| 97人人模人人爽人人喊| 日本黄色特一级视频| 午夜精品福利91av| 天干天天天色天天日天天射 | 久久永久免费精品人妻专区 | 人人妻人人爱人人草| lutube在线成人免费看| 非洲黑人一级特黄片| 2020av天堂网在线观看| 粗大的内捧猛烈进出爽大牛汉子| 亚洲日本一区二区三区| 免费看国产av网站| 日韩在线中文字幕色| 亚洲成人激情av在线| 熟女视频一区,二区,三区| 中文字幕第一页国产在线| 中文字幕一区二区三区蜜月| 女人精品内射国产99| 可以在线观看的av中文字幕| 人妻丝袜精品中文字幕| 午夜精品一区二区三区4| 啪啪啪啪啪啪啪免费视频| 五月天久久激情视频| 精品一区二区亚洲欧美| 一区二区久久成人网| 黄色三级网站免费下载| 亚洲精品无码久久久久不卡| 国产欧美精品一区二区高清 | 在线观看日韩激情视频| 99久久99一区二区三区| 国产精品久久综合久久| 黄片大全在线观看观看| 国产剧情演绎系列丝袜高跟| 成人av天堂丝袜在线观看| 一区二区三区日韩久久| 一级黄片大鸡巴插入美女| 亚洲中文字幕校园春色| 国语对白xxxx乱大交| 欧亚乱色一区二区三区| 欧美日韩精品永久免费网址| 91香蕉成人app下载| 国产中文字幕四区在线观看| 亚洲护士一区二区三区| 极品丝袜一区二区三区| 国产 在线 免费 精品| 亚洲午夜电影在线观看| 好了av中文字幕在线| 一级黄片大鸡巴插入美女| 新婚人妻聚会被中出| 国产精品自偷自拍啪啪啪| 久久久超爽一二三av| 欧美成人精品在线观看| 精产国品久久一二三产区区别 | 国产精品入口麻豆啊啊啊| 成人国产激情自拍三区| 懂色av之国产精品| 国产va在线观看精品| 国产精品三级三级三级| 无套猛戳丰满少妇人妻| 亚洲国产欧美一区二区丝袜黑人| 在线免费观看靠比视频的网站| 精品国产亚洲av一淫| 欧美香蕉人妻精品一区二区| 男女之间激情网午夜在线| 欧美国品一二三产区区别| 天天日天天鲁天天操| yy6080国产在线视频| 中文字幕高清免费在线人妻| 亚洲自拍偷拍综合色| 亚洲日本一区二区久久久精品| 成人色综合中文字幕| 91九色国产porny蝌蚪| 亚洲精品无码色午夜福利理论片| 66久久久久久久久久久| 天天日夜夜操天天摸| 99精品视频在线观看婷婷| 社区自拍揄拍尻屁你懂的| 啪啪啪啪啪啪啪啪啪啪黄色| 中文字幕熟女人妻久久久| 免费黄高清无码国产| 中文字幕无码一区二区免费| 熟女91pooyn熟女| 欧美日韩激情啪啪啪 | 狠狠躁夜夜躁人人爽天天久天啪| caoporn蜜桃视频| 亚洲少妇高潮免费观看| 福利视频一区二区三区筱慧 | 红桃av成人在线观看| 91高清成人在线视频| 黄色的网站在线免费看| 天天躁日日躁狠狠躁av麻豆| 成年人该看的视频黄免费| 天天干夜夜操啊啊啊| 伊人日日日草夜夜草| 99精品免费观看视频| 一区二区三区四区视频| 国产日韩欧美美利坚蜜臀懂色| 亚洲欧美综合另类13p| 久久久久久国产精品| 91成人精品亚洲国产| 欧美成一区二区三区四区| 国产日韩一区二区在线看| 亚洲综合一区成人在线| 国产久久久精品毛片| 精品91自产拍在线观看一区| 中文字幕av熟女人妻| yy6080国产在线视频| 欧美一区二区中文字幕电影| 99国内小视频在现欢看| 亚洲av自拍天堂网| 亚洲女人的天堂av| 日本精品视频不卡一二三| 538精品在线观看视频| 天天干夜夜操啊啊啊| heyzo蜜桃熟女人妻| 又大又湿又爽又紧A视频| 中文字幕一区二区三区人妻大片| 啊用力插好舒服视频| 北条麻妃高跟丝袜啪啪| 老鸭窝在线观看一区| 亚洲人妻30pwc| 天堂中文字幕翔田av| 在线观看的黄色免费网站| 福利视频一区二区三区筱慧| 黄色资源视频网站日韩| 人妻久久久精品69系列| av手机免费在线观看高潮| 欧美日本aⅴ免费视频| 一区二区三区久久久91| 亚洲精品乱码久久久久久密桃明 | 天天干天天插天天谢| 欧美日韩v中文在线| 日韩精品激情在线观看| 欧美日韩人妻久久精品高清国产| 欧美国品一二三产区区别| 57pao国产一区二区| 免费手机黄页网址大全| 五十路熟女人妻一区二| 一个色综合男人天堂| 91国内视频在线观看| 性生活第二下硬不起来| 国产在线观看黄色视频| 精品美女福利在线观看| 欧美综合婷婷欧美综合| 欧美精品黑人性xxxx| 又色又爽又黄的美女裸体| 国产精品污污污久久| 青青草国内在线视频精选| 99热这里只有国产精品6| 好吊视频—区二区三区| 99国内小视频在现欢看| 国产一区二区在线欧美| 婷婷久久久久深爱网| 丝袜长腿第一页在线| 久久农村老妇乱69系列| 无码中文字幕波多野不卡| 国产日韩精品电影7777| 国产熟妇乱妇熟色T区| 亚洲日本一区二区久久久精品| 熟妇一区二区三区高清版| 在线观看免费视频网| 亚洲一级美女啪啪啪| 午夜福利人人妻人人澡人人爽| 亚洲综合乱码一区二区| 国产性生活中老年人视频网站| 亚洲日本一区二区三区| 国产视频网站国产视频| 3344免费偷拍视频| 婷婷色国产黑丝少妇勾搭AV| 国产精品视频资源在线播放| 国产又粗又猛又爽又黄的视频美国| 国产使劲操在线播放| 极品粉嫩小泬白浆20p主播| 国产精品女邻居小骚货| 国产a级毛久久久久精品| 国产成人综合一区2区| 亚洲 欧美 精品 激情 偷拍| 亚洲图片欧美校园春色| 中文字幕在线免费第一页| 日本真人性生活视频免费看| 在线视频免费观看网| 加勒比视频在线免费观看| 在线制服丝袜中文字幕| 亚洲一级av大片免费观看| 欧美韩国日本国产亚洲| 午夜精品久久久久麻豆影视| 国产成人自拍视频播放| 国产午夜男女爽爽爽爽爽视频| 综合激情网激情五月天| 大鸡八强奸视频在线观看| 日韩亚国产欧美三级涩爱| 91精品国产91青青碰| 青草青永久在线视频18| 少妇一区二区三区久久久| 91av中文视频在线| 在线免费观看99视频| 中文字幕奴隷色的舞台50| 青娱乐极品视频青青草| 伊人情人综合成人久久网小说| 国产在线一区二区三区麻酥酥| 一级A一级a爰片免费免会员| 韩国男女黄色在线观看| 久精品人妻一区二区三区| 青青青视频手机在线观看| 欧美日韩一区二区电影在线观看| 国产av国片精品一区二区| 换爱交换乱高清大片| 午夜成午夜成年片在线观看 | 免费福利av在线一区二区三区| 日韩欧美一级黄片亚洲| 换爱交换乱高清大片| 又色又爽又黄又刺激av网站| 一区二区三区综合视频| 国产真实灌醉下药美女av福利| 岛国av高清在线成人在线| 亚洲av黄色在线网站| 日本熟妇喷水xxx| 在线观看国产免费麻豆| 亚洲免费在线视频网站| AV天堂一区二区免费试看| 精品国产污污免费网站入口自| 国产妇女自拍区在线观看| 日比视频老公慢点好舒服啊| 六月婷婷激情一区二区三区| 大鸡吧插入女阴道黄色片| 久久人人做人人妻人人玩精品vr| 免费av岛国天堂网站| av欧美网站在线观看| 91免费放福利在线观看| 久久精品久久精品亚洲人| 在线观看免费岛国av| 欧美日本在线观看一区二区 | 亚洲第17页国产精品| 毛片av在线免费看| 88成人免费av网站| www,久久久,com| 一区二区三区四区五区性感视频| 国产日韩精品电影7777| 黄色在线观看免费观看在线| 91色秘乱一区二区三区| 精品国产乱码一区二区三区乱| 99精品一区二区三区的区| 97青青青手机在线视频| 久草视频在线一区二区三区资源站| 少妇露脸深喉口爆吞精| 亚洲在线免费h观看网站| 中文字日产幕乱六区蜜桃| 欧美特级特黄a大片免费| 亚洲综合乱码一区二区| 一区二区三区在线视频福利| 福利国产视频在线观看| 摧残蹂躏av一二三区| 欧美怡红院视频在线观看| 农村胖女人操逼视频| 一级黄片大鸡巴插入美女| 2022国产综合在线干| lutube在线成人免费看| 精品一区二区三区三区色爱| 日本熟妇一区二区x x| 亚洲 国产 成人 在线| 天天综合天天综合天天网| 国产日本欧美亚洲精品视| 中文字幕一区二区亚洲一区| 午夜精品亚洲精品五月色| 女同性ⅹxx女同h偷拍| 日本av高清免费网站| 亚洲第17页国产精品| 欧美老鸡巴日小嫩逼| 日本一道二三区视频久久| 99精品国产aⅴ在线观看| 国产精品视频欧美一区二区| 中文字幕乱码人妻电影| 北条麻妃av在线免费观看| 中文字幕无码一区二区免费| 久久久久只精品国产三级| 真实国模和老外性视频| av完全免费在线观看av| 熟女俱乐部一二三区| 啪啪啪18禁一区二区三区| 精品一区二区三区午夜| 夏目彩春在线中文字幕| 18禁精品网站久久| 国产亚洲视频在线二区| 精品国产午夜视频一区二区| 成年人该看的视频黄免费| 91色秘乱一区二区三区| 老师让我插进去69AV| 黄片色呦呦视频免费看| 男人的网址你懂的亚洲欧洲av| 香蕉aⅴ一区二区三区| av高潮迭起在线观看| 2022国产综合在线干| 国产视频网站国产视频| 中文字幕在线视频一区二区三区| 97精品人妻一区二区三区精品| 亚洲天天干 夜夜操| 国产成人无码精品久久久电影 | 欧美视频中文一区二区三区| 又粗又硬又猛又爽又黄的| 色综合久久无码中文字幕波多| 精品日产卡一卡二卡国色天香 | 激情五月婷婷免费视频| 在线免费观看国产精品黄色| 亚洲欧美成人综合在线观看| 天天干天天操天天扣| 久久久久久cao我的性感人妻| 欧美日本在线观看一区二区| 国产成人精品福利短视频| 日本一区美女福利视频| 早川濑里奈av黑人番号| 国产露脸对白在线观看| 国产91久久精品一区二区字幕| 男女啪啪视频免费在线观看 | 91国产在线视频免费观看| 专门看国产熟妇的网站| 最新激情中文字幕视频| 欧美aa一级一区三区四区| 国产精品欧美日韩区二区| 黑人变态深video特大巨大| 快点插进来操我逼啊视频| 国产亚洲欧美45p| 成人H精品动漫在线无码播放| 人人妻人人爽人人澡人人精品| 在线可以看的视频你懂的| 999热精品视频在线| 91在线视频在线精品3| 国产一区成人在线观看视频 | 日本免费一级黄色录像| 香蕉aⅴ一区二区三区| 18禁无翼鸟成人在线| 美女大bxxxx内射| 91一区精品在线观看| 国产精品入口麻豆啊啊啊| 日本啪啪啪啪啪啪啪| 91试看福利一分钟| 超碰公开大香蕉97| 日韩美女福利视频网| 一区二区三区蜜臀在线| 老司机福利精品免费视频一区二区| 熟女视频一区,二区,三区| 超碰97人人做人人爱| 欧美日韩中文字幕欧美| 亚洲国产精品中文字幕网站| 视频在线免费观看你懂得| 一区二区三区麻豆福利视频| caoporm超碰国产| 欧美久久一区二区伊人| 91精品啪在线免费| 2017亚洲男人天堂| 成人伊人精品色xxxx视频| 91免费观看在线网站| 少妇系列一区二区三区视频| 日本午夜爽爽爽爽爽视频在线观看| 欧洲亚洲欧美日韩综合| 四川乱子伦视频国产vip| 欧美日韩激情啪啪啪| 第一福利视频在线观看| 天天通天天透天天插| 一区二区三区欧美日韩高清播放| 红桃av成人在线观看| 99热碰碰热精品a中文| 欧美视频中文一区二区三区| 香蕉aⅴ一区二区三区| 中文字幕人妻av在线观看| 午夜精品福利一区二区三区p | 91九色国产porny蝌蚪| 免费观看污视频网站| 91av精品视频在线| 一本一本久久a久久精品综合不卡| av黄色成人在线观看| 熟女视频一区,二区,三区| av亚洲中文天堂字幕网| 日本后入视频在线观看| 午夜在线观看一区视频| 黄色黄色黄片78在线| 99精品视频之69精品视频 | 久久免看30视频口爆视频| 日韩av有码中文字幕| 欧美第一页在线免费观看视频| 国产在线自在拍91国语自产精品 | 亚洲av无乱一区二区三区性色| 大鸡吧插逼逼视频免费看| 久久亚洲天堂中文对白| 中国无遮挡白丝袜二区精品| 日本一道二三区视频久久| 国产chinesehd精品麻豆| 欧美日韩情色在线观看| 五十路在线观看完整版| 色在线观看视频免费的| 国产午夜激情福利小视频在线| 午夜91一区二区三区| 在线不卡日韩视频播放| 18禁免费av网站| 一区二区三区美女毛片| 在线不卡成人黄色精品| 91福利在线视频免费观看| 亚洲 中文 自拍 另类 欧美| 少妇一区二区三区久久久| 啊用力插好舒服视频| 老司机福利精品免费视频一区二区| 国产亚洲天堂天天一区| 青青青视频手机在线观看| 精品乱子伦一区二区三区免费播| 一区二区三区视频,福利一区二区| 亚洲最大黄 嗯色 操 啊| 硬鸡巴动态操女人逼视频| 美女大bxxxx内射| 自拍偷拍vs一区二区三区| 日韩影片一区二区三区不卡免费 | 国产性感美女福利视频| 日韩加勒比东京热二区| 爆乳骚货内射骚货内射在线| 在线观看免费岛国av| 国产亚洲精品品视频在线| 蝴蝶伊人久久中文娱乐网| 免费十精品十国产网站| 一区二区三区久久久91| 99久久久无码国产精品性出奶水| 久久久久久9999久久久久| 性色av一区二区三区久久久| 97欧洲一区二区精品免费| chinese国产盗摄一区二区| 天天干天天操天天玩天天射| 高清成人av一区三区| 超级碰碰在线视频免费观看| 久久精品在线观看一区二区| 天天干天天日天天谢综合156| 国产真实灌醉下药美女av福利| 中文字幕 亚洲av| 美女大bxxxx内射| 18禁免费av网站| 男人靠女人的逼视频| 中文字幕日韩人妻在线三区| 视频在线免费观看你懂得| 91中文字幕免费在线观看| 女同性ⅹxx女同h偷拍| nagger可以指黑人吗| 成人免费公开视频无毒| 日韩二区视频一线天婷婷五| 91免费放福利在线观看| 亚洲激情av一区二区| 亚洲少妇人妻无码精品| 国产麻豆国语对白露脸剧情 | 一区二区三区的久久的蜜桃的视频| 国产清纯美女al在线| 久草视频首页在线观看| 天天操天天干天天艹| 亚洲福利精品福利精品福利| 国产九色91在线视频| 大陆胖女人与丈夫操b国语高清| 国产白袜脚足J棉袜在线观看| 中文字幕免费福利视频6| 国产精品久久久久久久女人18| 久久精品美女免费视频| 91社福利《在线观看| 97人妻无码AV碰碰视频| 啪啪啪操人视频在线播放| 激情图片日韩欧美人妻| 男人插女人视频网站| 天天做天天干天天舔| 日本熟女精品一区二区三区| 视频一区二区综合精品| 看一级特黄a大片日本片黑人| 久久久久久久一区二区三| 91人妻精品一区二区在线看| 岛国毛片视频免费在线观看| 国际av大片在线免费观看| 青青青青在线视频免费观看| 亚洲中文精品人人免费| 在线观看视频网站麻豆| 免费黄高清无码国产| 爱爱免费在线观看视频| 久久艹在线观看视频| 国产精品人妻熟女毛片av久| 伊人成人在线综合网| 欧美韩国日本国产亚洲| 国产成人精品亚洲男人的天堂| 久久久久久久一区二区三| 亚洲国产欧美一区二区三区…| 天天色天天爱天天爽| 精品老妇女久久9g国产| 亚洲嫩模一区二区三区| 精品人妻每日一部精品| 搞黄色在线免费观看| 任我爽精品视频在线播放| 亚洲成人线上免费视频观看| 3D动漫精品啪啪一区二区下载| 亚洲无码一区在线影院| 在线 中文字幕 一区| 人妻少妇中文有码精品| 青青青aaaa免费| 性色蜜臀av一区二区三区| 性欧美激情久久久久久久| 看一级特黄a大片日本片黑人| 日本乱人一区二区三区| 一区二区三区日本伦理| 天天日天天爽天天干| 蜜桃精品久久久一区二区| 韩国三级aaaaa高清视频| 日日摸夜夜添夜夜添毛片性色av| 国产在线拍揄自揄视频网站| 精品久久久久久久久久久久人妻 | 亚洲欧洲一区二区在线观看| 亚洲av自拍天堂网| 在线免费91激情四射| 青青伊人一精品视频| 亚洲日本一区二区三区| 午夜精品久久久久麻豆影视| 91久久综合男人天堂| 中文字幕av熟女人妻| 一区二区三区日本伦理| 精内国产乱码久久久久久| 精品美女在线观看视频在线观看| 韩国三级aaaaa高清视频| 男人在床上插女人视频| 99热这里只有精品中文| 亚洲一区二区人妻av| 国产卡一卡二卡三乱码手机| 亚洲一区二区三区精品乱码| 2021国产一区二区| 2021最新热播中文字幕| 超级碰碰在线视频免费观看| 粉嫩av懂色av蜜臀av| 日本黄色三级高清视频| 又黄又刺激的午夜小视频| 福利午夜视频在线观看| 东游记中文字幕版哪里可以看到| ka0ri在线视频| 国产精彩对白一区二区三区| 青青伊人一精品视频| 精品少妇一二三视频在线| 欧美精品欧美极品欧美视频| 天天日天天敢天天干| 日韩美女搞黄视频免费| 欧美怡红院视频在线观看| av久久精品北条麻妃av观看 | 91色网站免费在线观看| 国产又色又刺激在线视频| 日本乱人一区二区三区| 亚洲成人熟妇一区二区三区| 国产高清在线在线视频| 亚洲成人三级在线播放| 视频一区二区在线免费播放| 啊用力插好舒服视频| 高潮视频在线快速观看国家快速| 日韩美女福利视频网| 国产中文精品在线观看| 久久久久久国产精品| 丰满的子国产在线观看| 77久久久久国产精产品| av成人在线观看一区| 性感美女福利视频网站| 天天干天天搞天天摸| 天天干天天操天天玩天天射| 精品亚洲在线免费观看| 亚洲欧美在线视频第一页| 2017亚洲男人天堂| heyzo蜜桃熟女人妻| 91she九色精品国产| 午夜dv内射一区区| 日韩av大胆在线观看| 日本av熟女在线视频| 亚洲国产中文字幕啊啊啊不行了| 福利一二三在线视频观看| 在线 中文字幕 一区| 日本丰满熟妇BBXBBXHD| 插逼视频双插洞国产操逼插洞| 青春草视频在线免费播放| 午夜精品福利一区二区三区p| 韩国爱爱视频中文字幕| 桃色视频在线观看一区二区| 国产成人精品亚洲男人的天堂| 午夜在线观看一区视频| 2018在线福利视频| 538精品在线观看视频| 免费国产性生活视频| 国产之丝袜脚在线一区二区三区| 538精品在线观看视频| 午夜成午夜成年片在线观看| 亚洲欧美国产综合777| 亚洲精品乱码久久久久久密桃明| 91久久综合男人天堂| 亚洲精品乱码久久久本| 中文字幕在线乱码一区二区| 黑人3p华裔熟女普通话| 把腿张开让我插进去视频| 国产高清女主播在线| 亚洲青青操骚货在线视频| 丰满少妇翘臀后进式| 国产第一美女一区二区三区四区| 国产熟妇一区二区三区av | 国产成人精品av网站| 中出中文字幕在线观看| 久久精品36亚洲精品束缚| 亚洲美女美妇久久字幕组| 91天堂天天日天天操| 亚洲一区二区三区久久午夜| 蜜桃专区一区二区在线观看| 亚洲中文字幕乱码区| 亚洲久久午夜av一区二区| 国产精品国产三级国产午| av完全免费在线观看av| 少妇高潮一区二区三区| 最新激情中文字幕视频| 99精品亚洲av无码国产另类| 欧美日韩人妻久久精品高清国产 | 欧美精品久久久久久影院| 亚洲一区二区激情在线| 日本黄色特一级视频| 小泽玛利亚视频在线观看| 98视频精品在线观看| 大陆胖女人与丈夫操b国语高清 | 婷婷激情四射在线观看视频| 任我爽精品视频在线播放| 欧美精品一区二区三区xxxx| 欧美亚洲自偷自拍 在线| 9l人妻人人爽人人爽| 大尺度激情四射网站| 女生自摸在线观看一区二区三区 | 97精品成人一区二区三区| 国产之丝袜脚在线一区二区三区| 国产va在线观看精品| 久久久麻豆精亚洲av麻花| 欧美一区二区三区高清不卡tv| 伊拉克及约旦宣布关闭领空| 青青草原网站在线观看| 国产亚洲视频在线观看| 国产欧美精品一区二区高清| 日韩精品中文字幕播放| 中文字幕人妻av在线观看| 免费人成黄页网站在线观看国产| 欧美成人精品在线观看| 久久热久久视频在线观看| 黄色大片男人操女人逼| 日本五十路熟新垣里子| 中文字幕一区二区三区蜜月 | 欧美va亚洲va天堂va| 91久久国产成人免费网站| 一二三中文乱码亚洲乱码one| 欧美精产国品一二三产品价格| 清纯美女在线观看国产| 在线免费观看av日韩| 亚洲va天堂va国产va久| 日韩欧美制服诱惑一区在线| 一二三中文乱码亚洲乱码one| 欧美精品伦理三区四区| 扒开腿挺进肉嫩小18禁视频| 久久精品在线观看一区二区| 久久综合老鸭窝色综合久久 | 2022国产综合在线干| 青青青国产片免费观看视频| 久久久精品欧洲亚洲av| 91高清成人在线视频| 天天躁日日躁狠狠躁av麻豆| 粉嫩av蜜乳av蜜臀| 亚洲高清自偷揄拍自拍| 欧美久久一区二区伊人| 亚洲国产香蕉视频在线播放| 人妻熟女在线一区二区| 欧美国产亚洲中英文字幕| 老师让我插进去69AV| 成人性黑人一级av| 国际av大片在线免费观看| 久久热久久视频在线观看| 91精品免费久久久久久| 欧美成人综合视频一区二区| 在线制服丝袜中文字幕| 美女操逼免费短视频下载链接| 97a片免费在线观看| 国产黄色高清资源在线免费观看| 亚洲熟女女同志女同| 亚洲精品ww久久久久久| 欧美激情电影免费在线| 在线成人日韩av电影| 久久久久只精品国产三级| 精品成人啪啪18免费蜜臀| 久久久精品999精品日本| 亚洲成av人无码不卡影片一| 中文字幕在线欧美精品| 欧洲亚洲欧美日韩综合| 天天干天天操天天爽天天摸| 人妻最新视频在线免费观看| 视频 国产 精品 熟女 | 青青擦在线视频国产在线| 色哟哟国产精品入口| 最后99天全集在线观看| 最新激情中文字幕视频| 成人蜜桃美臀九一一区二区三区| 超碰中文字幕免费观看| 精品亚洲在线免费观看| 一区二区三区四区中文| 欧美xxx成人在线| 99热久久这里只有精品| 一区二区视频视频视频| 青青青青在线视频免费观看| 日韩精品中文字幕播放| 成人蜜桃美臀九一一区二区三区| 黄色无码鸡吧操逼视频| 老鸭窝在线观看一区| 1区2区3区不卡视频| 日本免费午夜视频网站| 中文字幕在线视频一区二区三区| 国产三级片久久久久久久| 清纯美女在线观看国产| 午夜频道成人在线91| 亚洲综合乱码一区二区| 黄色三级网站免费下载| 在线免费观看av日韩| 伊人情人综合成人久久网小说| 成人18禁网站在线播放| 999九九久久久精品| 小泽玛利亚视频在线观看| 日韩av免费观看一区| 欧美精品 日韩国产| 精品人人人妻人人玩日产欧| 亚洲精品三级av在线免费观看| 天天日天天日天天射天天干| 国产精品久久久黄网站| 亚洲 色图 偷拍 欧美| 国产在线免费观看成人| 免费69视频在线看| 91久久国产成人免费网站| 性感美女诱惑福利视频| 免费黄高清无码国产| 粉嫩av蜜乳av蜜臀| 中文字幕,亚洲人妻| 日本午夜久久女同精女女| 粉嫩欧美美人妻小视频| 国产日韩精品电影7777| 人人妻人人爽人人澡人人精品| 男人天堂最新地址av| 国产午夜无码福利在线看| 91老师蜜桃臀大屁股| 日日夜夜狠狠干视频| 欧美交性又色又爽又黄麻豆| 国产福利小视频大全| 激情国产小视频在线| 中文字幕在线观看国产片| 91国产资源在线视频| 日韩精品二区一区久久| 日本乱人一区二区三区| 大胸性感美女羞爽操逼毛片| 久久永久免费精品人妻专区| 女同久久精品秋霞网| 92福利视频午夜1000看| 93精品视频在线观看| 国产福利小视频二区| 天天做天天爽夜夜做少妇| 高潮喷水在线视频观看| 青青青激情在线观看视频| 91色九色porny| 香蕉av影视在线观看| 丰满熟女午夜福利视频| 激情图片日韩欧美人妻| av网站色偷偷婷婷网男人的天堂| 亚洲欧美综合另类13p| 最新中文字幕乱码在线| 成人精品视频99第一页| 伊人综合免费在线视频| 99re久久这里都是精品视频| asmr福利视频在线观看| 天天色天天舔天天射天天爽| 天天日天天透天天操| 国产亚洲精品品视频在线| 国产清纯美女al在线| 97精品视频在线观看| 四川乱子伦视频国产vip| 人妻少妇亚洲精品中文字幕| 免费国产性生活视频| 91破解版永久免费| 91破解版永久免费| 色天天天天射天天舔| 天天躁夜夜躁日日躁a麻豆| 欧美国品一二三产区区别| 99一区二区在线观看| 国产亚洲精品品视频在线| 欧美一级色视频美日韩| 亚洲一区二区三区久久受| 国产高清精品极品美女| 国产精品久久久久国产三级试频| 婷婷综合亚洲爱久久| 午夜蜜桃一区二区三区| 人妻丝袜av在线播放网址| 无码国产精品一区二区高潮久久4| 97青青青手机在线视频| 免费一级特黄特色大片在线观看 | 亚洲精品在线资源站| 99热这里只有精品中文| 2022国产精品视频| 阿v天堂2014 一区亚洲| 欧美爆乳肉感大码在线观看| 国产清纯美女al在线| 人妻av无码专区久久绿巨人 | 中文字幕人妻一区二区视频| 91国偷自产一区二区三区精品| av中文字幕国产在线观看| 免费av岛国天堂网站| 日韩剧情片电影在线收看| 亚洲另类在线免费观看| 青青草原色片网站在线观看| 亚洲 欧美 精品 激情 偷拍 | 99视频精品全部15| 亚洲美女高潮喷浆视频| 国产美女一区在线观看| 最新91精品视频在线| 99热久久这里只有精品| 天天躁日日躁狠狠躁av麻豆| 国产九色91在线观看精品| 亚洲一级 片内射视正片| 午夜久久久久久久精品熟女| av高潮迭起在线观看| 五月激情婷婷久久综合网| 馒头大胆亚洲一区二区| 日本黄在免费看视频| 精品区一区二区三区四区人妻| av中文字幕网址在线| 最新国产亚洲精品中文在线| 国产chinesehd精品麻豆| 日韩不卡中文在线视频网站| 亚洲免费在线视频网站| 国产精选一区在线播放| 青青尤物在线观看视频网站| 午夜精品久久久久久99热| 2017亚洲男人天堂| 国产精品亚洲а∨天堂免| 大鸡巴操娇小玲珑的女孩逼| 欧美色婷婷综合在线| 国产成人自拍视频播放| 2018最新中文字幕在线观看| 国产在线观看黄色视频| 亚洲国产成人最新资源| 人妻素人精油按摩中出| 在线可以看的视频你懂的| 中国产一级黄片免费视频播放| 精品人人人妻人人玩日产欧| 国产精品污污污久久| 在线免费观看视频一二区| 中国熟女@视频91| 综合一区二区三区蜜臀| 亚洲欧美成人综合视频| 一区二区三区麻豆福利视频| 亚洲天天干 夜夜操| 成人蜜臀午夜久久一区| 91麻豆精品秘密入口在线观看| 九九视频在线精品播放| 欧美viboss性丰满| 中文字幕在线永久免费播放| 精品日产卡一卡二卡国色天香| 欧美xxx成人在线| 青青草视频手机免费在线观看| 大香蕉伊人国产在线| 婷婷激情四射在线观看视频| 成人伊人精品色xxxx视频| 国产精品福利小视频a| 日本一二三区不卡无| 午夜毛片不卡免费观看视频| 国产1区,2区,3区| 四虎永久在线精品免费区二区| 中文字幕在线欧美精品| 91 亚洲视频在线观看| 黄色中文字幕在线播放| 日日夜夜大香蕉伊人| 国产麻豆91在线视频| 久久www免费人成一看片| 2o22av在线视频| 国产精品人久久久久久| 日本熟女50视频免费| 日韩特级黄片高清在线看| 一区二区三区久久中文字幕| 日韩少妇人妻精品无码专区| 日韩无码国产精品强奸乱伦| 欧美在线偷拍视频免费看| 超pen在线观看视频公开97| 最近中文2019年在线看| av中文字幕在线观看第三页| 中文人妻AV久久人妻水| 97青青青手机在线视频| 在线观看视频一区麻豆| 久久www免费人成一看片| 中文字幕一区二 区二三区四区| 国产三级影院在线观看| 亚洲成人熟妇一区二区三区| 亚洲另类综合一区小说| 全国亚洲男人的天堂| 青青青青青操视频在线观看| 国产精品黄色的av| 加勒比视频在线免费观看| 亚洲av日韩精品久久久| 中国熟女一区二区性xx| 直接能看的国产av| 任你操任你干精品在线视频| 非洲黑人一级特黄片| 丝袜长腿第一页在线| 亚洲一级av无码一级久久精品| 91片黄在线观看喷潮| 毛片av在线免费看| 99的爱精品免费视频| 国产精品人久久久久久| 天天草天天色天天干| 日韩一区二区三区三州| 亚洲av男人天堂久久| 88成人免费av网站| 噜噜色噜噜噜久色超碰| 亚洲国产精品免费在线观看| 91chinese在线视频| 青青青视频自偷自拍38碰| av天堂中文免费在线| 成人24小时免费视频| 午夜国产福利在线观看| 中文字幕日韩精品就在这里| 91av精品视频在线| 99国产精品窥熟女精品| 日韩三级黄色片网站| 不卡一区一区三区在线| 11久久久久久久久久久| 激情图片日韩欧美人妻| 中英文字幕av一区| 欧美精产国品一二三产品区别大吗| 免费黄高清无码国产| 亚洲无线观看国产高清在线| 99一区二区在线观看| 午夜在线观看岛国av,com| 日本性感美女三级视频| 欧美日韩情色在线观看| 中文字幕在线视频一区二区三区| 人妻素人精油按摩中出| 亚洲一区二区三区av网站| 青青草成人福利电影| 岳太深了紧紧的中文字幕| 人妻3p真实偷拍一二区| 啊啊啊视频试看人妻| 青青青青青手机视频| 国产精品伦理片一区二区| 在线免费观看靠比视频的网站 | 国产又大又黄免费观看| av在线播放国产不卡| av俺也去在线播放| 亚洲免费va在线播放| 亚洲av一妻不如妾| 色av色婷婷人妻久久久精品高清| 热思思国产99re| 最新黄色av网站在线观看| wwwxxx一级黄色片| 国产大学生援交正在播放| 中英文字幕av一区| 绝顶痉挛大潮喷高潮无码| 欧美日韩国产一区二区三区三州| 丝袜亚洲另类欧美变态| 天天日天天鲁天天操| 任你操视频免费在线观看| 国产精品日韩欧美一区二区| 老熟妇凹凸淫老妇女av在线观看| yellow在线播放av啊啊啊| 天天色天天舔天天射天天爽 | 青青草精品在线视频观看| 国内自拍第一页在线观看| 不戴胸罩引我诱的隔壁的人妻| 日韩亚洲高清在线观看| 欧美日韩一级黄片免费观看| 视频 一区二区在线观看| 中文字幕日韩人妻在线三区| 激情小视频国产在线| 国内自拍第一页在线观看| 中文字幕日本人妻中出| 中出中文字幕在线观看| 91中文字幕免费在线观看| 天码人妻一区二区三区在线看| 人妻少妇精品久久久久久 | av中文字幕网址在线| 青青青青在线视频免费观看| 国产亚洲欧美另类在线观看| 欧美成人猛片aaaaaaa| 天天操天天爽天天干| 91天堂天天日天天操| caoporm超碰国产| 青青青aaaa免费| 日韩人妻xxxxx| 2019av在线视频| 99re国产在线精品| 91精品免费久久久久久| 2021年国产精品自拍| 大鸡吧插入女阴道黄色片| 亚洲自拍偷拍精品网| 亚洲最大免费在线观看| 视频一区二区综合精品| 91社福利《在线观看| 亚洲av自拍天堂网| 操日韩美女视频在线免费看| av老司机亚洲一区二区| 五十路熟女av天堂| 日韩av熟妇在线观看| 成人高潮aa毛片免费| 亚洲av日韩av第一区二区三区| 超碰97人人澡人人| 99精品视频在线观看婷婷| 538精品在线观看视频| 黑人大几巴狂插日本少妇| 国产 在线 免费 精品| 亚洲一区二区三区精品视频在线| 在线观看av2025| 九色精品视频在线播放| 视频一区 视频二区 视频| 538精品在线观看视频| 日本女大学生的黄色小视频| 久久久久国产成人精品亚洲午夜| 搡老熟女一区二区在线观看| 特级无码毛片免费视频播放| 成人区人妻精品一区二视频 | 日本男女操逼视频免费看| 最新中文字幕免费视频| 播放日本一区二区三区电影| 亚洲精品久久视频婷婷| 国产精选一区在线播放| 97年大学生大白天操逼| 亚洲欧美国产麻豆综合| 3337p日本欧洲大胆色噜噜| 亚洲精品午夜aaa久久| 欧美一区二区三区啪啪同性| 国产极品精品免费视频| 久草视频在线看免费| 9色精品视频在线观看| 日韩一区二区电国产精品| 精品久久久久久久久久中文蒉| 人妻3p真实偷拍一二区| 精品美女在线观看视频在线观看 | 国产激情av网站在线观看| 亚洲午夜电影之麻豆| 日韩欧美国产一区ab| 中文字幕,亚洲人妻| 精品成人午夜免费看| 国产在线观看免费人成短视频| 丝袜长腿第一页在线| 日本精品视频不卡一二三| 国产老熟女伦老熟妇ⅹ| 欧美黑人与人妻精品| 伊人开心婷婷国产av| 2019av在线视频| 天天干天天搞天天摸| 91成人在线观看免费视频| 一区二区三区国产精选在线播放| 在线观看免费av网址大全| 在线观看黄色成年人网站 | 999九九久久久精品| 精品一区二区三四区| 欧美激情精品在线观看| 91一区精品在线观看| 四川乱子伦视频国产vip| 国产一区二区久久久裸臀| 强行扒开双腿猛烈进入免费版| 成人精品在线观看视频| 久久这里只有精彩视频免费| 中国黄片视频一区91| 免费av岛国天堂网站| 人妻少妇中文有码精品| 青青青爽视频在线播放| 精品av国产一区二区三区四区| 天天干天天搞天天摸| 中文字幕 码 在线视频| av天堂中文免费在线| 91九色国产熟女一区二区| 80电影天堂网官网| 欧美va不卡视频在线观看| 91‖亚洲‖国产熟女| 2020中文字幕在线播放| 精品一线二线三线日本| 男人的天堂av日韩亚洲| 视频在线免费观看你懂得| 国产高潮无码喷水AV片在线观看| 成人亚洲精品国产精品| 久久久极品久久蜜桃| 一本一本久久a久久精品综合不卡| 自拍偷拍,中文字幕| 亚洲激情,偷拍视频| 中文字幕av男人天堂| 天天做天天干天天舔| 亚洲欧美一区二区三区电影| 久久这里有免费精品| 成人免费毛片aaaa| 天天摸天天日天天操| 国产又粗又猛又爽又黄的视频美国| 国产精品久久久黄网站| 免费黄高清无码国产| 三级av中文字幕在线观看| 日日夜夜狠狠干视频| 国产女人被做到高潮免费视频| 91中文字幕免费在线观看| 伊人网中文字幕在线视频| 亚洲 欧美 精品 激情 偷拍| 91国产在线视频免费观看| 成人精品视频99第一页| 日韩特级黄片高清在线看| 中国黄色av一级片| 一区二区三区久久久91| 国产a级毛久久久久精品| 揄拍成人国产精品免费看视频| 福利视频一区二区三区筱慧| 精品少妇一二三视频在线| 久久丁香婷婷六月天| 人妻久久久精品69系列| 自拍偷拍 国产资源| 欧美精品欧美极品欧美视频| 18禁美女无遮挡免费| 青青青激情在线观看视频| 九色精品视频在线播放| 日韩北条麻妃一区在线| 风流唐伯虎电视剧在线观看| 精品美女在线观看视频在线观看 | 福利片区一区二体验区| 在线观看欧美黄片一区二区三区| 久久久精品欧洲亚洲av| 亚洲一区二区三区uij| 亚洲精品国产久久久久久| 色吉吉影音天天干天天操 | 18禁美女羞羞免费网站| 免费黄色成人午夜在线网站| 青青青青青免费视频| 成人区人妻精品一区二视频| 亚洲av成人网在线观看| 中文字幕av第1页中文字幕| 亚洲av琪琪男人的天堂| 免费看高清av的网站| 中文字日产幕乱六区蜜桃 | 91国产资源在线视频| 国产大鸡巴大鸡巴操小骚逼小骚逼| 亚洲欧美激情国产综合久久久 | 亚洲一区二区三区av网站| 66久久久久久久久久久| 国产性色生活片毛片春晓精品 | 91色秘乱一区二区三区| 摧残蹂躏av一二三区| 91久久人澡人人添人人爽乱| 特大黑人巨大xxxx| 午夜精品一区二区三区4| 欧美韩国日本国产亚洲| 亚洲超碰97人人做人人爱| 欧美成人猛片aaaaaaa| 人妻素人精油按摩中出| 少妇一区二区三区久久久| 国产欧美精品一区二区高清| 99热这里只有国产精品6| 亚洲精品色在线观看视频| 久久这里只有精品热视频| 中字幕人妻熟女人妻a62v网| 偷拍自拍 中文字幕| 国产视频在线视频播放| 五月色婷婷综合开心网4438| 九色视频在线观看免费| 动漫精品视频在线观看| 精品一区二区三区在线观看| 日本后入视频在线观看 | 久久久精品999精品日本| 狠狠的往里顶撞h百合| 国产av福利网址大全| 超黄超污网站在线观看| 97超碰免费在线视频| 免费看国产又粗又猛又爽又黄视频| 天天操天天干天天艹| 18禁美女羞羞免费网站| 天天躁夜夜躁日日躁a麻豆| 欧美爆乳肉感大码在线观看 | 亚洲偷自拍高清视频| 国产真实乱子伦a视频| 粉嫩小穴流水视频在线观看| 亚洲成人线上免费视频观看| av网址国产在线观看| 久草视频在线一区二区三区资源站 | 精品高潮呻吟久久av| 久碰精品少妇中文字幕av| 中国无遮挡白丝袜二区精品 | 啊慢点鸡巴太大了啊舒服视频| 亚洲国产成人无码麻豆艾秋| 人妻少妇中文有码精品| 国产精彩对白一区二区三区 | 天天日夜夜操天天摸| 99热这里只有国产精品6| 丰满少妇人妻xxxxx| 国产黄色a级三级三级三级| 熟女俱乐部一二三区| 91成人精品亚洲国产| 在线免费观看欧美小视频| 含骚鸡巴玩逼逼视频| 综合激情网激情五月天| 国产精品亚洲在线观看| 欲满人妻中文字幕在线| 欧美一区二区三区激情啪啪啪 | 男生用鸡操女生视频动漫| 日韩少妇人妻精品无码专区| 快点插进来操我逼啊视频| 男人天堂最新地址av| 青青操免费日综合视频观看| 欧美视频中文一区二区三区| 日本美女成人在线视频| 午夜频道成人在线91| 黄色片一级美女黄色片| 偷拍自拍 中文字幕| 日本性感美女写真视频| 4个黑人操素人视频网站精品91| 天码人妻一区二区三区在线看| 制丝袜业一区二区三区| 国产刺激激情美女网站| 男生舔女生逼逼视频| 欧美一区二区三区高清不卡tv| 中国视频一区二区三区| 天天色天天操天天舔| 午夜精品亚洲精品五月色| 在线免费观看黄页视频| 91快播视频在线观看| 天堂v男人视频在线观看| 精品人妻伦一二三区久| 韩国女主播精品视频网站| 绝色少妇高潮3在线观看| 天天干夜夜操啊啊啊| av亚洲中文天堂字幕网| 一级黄片久久久久久久久| 93人妻人人揉人人澡人人| 91国内精品久久久久精品一| 中文字幕一区二区三区人妻大片| 无套猛戳丰满少妇人妻| 中文字幕免费福利视频6| 亚洲欧美福利在线观看| 中文字幕在线欧美精品| wwwxxx一级黄色片| av在线观看网址av| 精品一区二区三区在线观看| 亚洲成高清a人片在线观看| 欧美亚洲牲夜夜综合久久| 日本韩国免费一区二区三区视频| 免费观看成年人视频在线观看| 国产免费高清视频视频| 91传媒一区二区三区| 亚洲精品国偷自产在线观看蜜桃| 日韩不卡中文在线视频网站| 男女啪啪视频免费在线观看| 99精品视频在线观看免费播放| av男人天堂狠狠干| 99热99这里精品6国产| 最新国产精品网址在线观看| 2022国产精品视频| 我想看操逼黄色大片| 日本阿v视频在线免费观看| 91大屁股国产一区二区| 久久精品久久精品亚洲人| 日本少妇的秘密免费视频| 天天躁日日躁狠狠躁av麻豆| 伊人精品福利综合导航| 青青社区2国产视频| 国内资源最丰富的网站| 亚洲另类伦春色综合小| 女同互舔一区二区三区| 免费福利av在线一区二区三区| 黄色的网站在线免费看| 97小视频人妻一区二区| 国产福利小视频免费观看| 日日操夜夜撸天天干| 93视频一区二区三区| av老司机亚洲一区二区| 欧美激情电影免费在线| 熟妇一区二区三区高清版| 黑人性生活视频免费看| 国产欧美精品免费观看视频| 新婚人妻聚会被中出| 欧美一区二区三区四区性视频| caoporm超碰国产| 精品少妇一二三视频在线| 新97超碰在线观看| 狠狠的往里顶撞h百合| 亚洲美女高潮喷浆视频| 色爱av一区二区三区| 亚洲免费成人a v| 精品视频国产在线观看| 综合一区二区三区蜜臀| 亚洲成a人片777777| 男人在床上插女人视频| 哥哥姐姐综合激情小说| 日本美女成人在线视频| 少妇被强干到高潮视频在线观看| 青青青青青免费视频| 午夜91一区二区三区| 18禁美女羞羞免费网站| 超黄超污网站在线观看| 欧美另类一区二区视频| 日本中文字幕一二区视频| a v欧美一区=区三区| 在线免费观看欧美小视频| 欧美3p在线观看一区二区三区| huangse网站在线观看| 把腿张开让我插进去视频| 亚洲av自拍偷拍综合| 亚洲欧美自拍另类图片| 天天干天天操天天插天天日| 999热精品视频在线| 天天干天天日天天谢综合156| 自拍偷拍亚洲精品第2页| 久久精品亚洲成在人线a| 18禁免费av网站| 快插进小逼里大鸡吧视频| 3D动漫精品啪啪一区二区下载| 美女福利写真在线观看视频| 国产品国产三级国产普通话三级| 欧美亚洲免费视频观看| 亚洲成人午夜电影在线观看| 午夜精品久久久久麻豆影视| 888亚洲欧美国产va在线播放| 91av中文视频在线| 特级欧美插插插插插bbbbb| 精品国产乱码一区二区三区乱| 欧美日韩亚洲国产无线码| 十八禁在线观看地址免费| 欧美女同性恋免费a| 后入美女人妻高清在线| 狠狠的往里顶撞h百合| 激情图片日韩欧美人妻| 日韩欧美一级黄片亚洲| yellow在线播放av啊啊啊| 好吊视频—区二区三区| 亚洲va国产va欧美精品88| 丰满的继坶3中文在线观看| 亚洲中文字字幕乱码| 超黄超污网站在线观看| 亚洲一级美女啪啪啪| 后入美女人妻高清在线| 自拍偷拍亚洲另类色图| 2025年人妻中文字幕乱码在线| 久久这里只有精彩视频免费| 欧美xxx成人在线| 在线免费观看日本伦理| 国产一区二区欧美三区| 美女日逼视频免费观看| 岛国毛片视频免费在线观看| 日日操综合成人av| 一区二区三区蜜臀在线| 国产精品伦理片一区二区| 成人24小时免费视频| 夜夜骑夜夜操夜夜奸| av久久精品北条麻妃av观看| 日韩亚洲高清在线观看| 久草福利电影在线观看| 综合国产成人在线观看| 国产一区二区神马久久| 欧美精产国品一二三区| 亚洲中文字幕综合小综合| 亚洲高清免费在线观看视频| 99视频精品全部15| 又黄又刺激的午夜小视频| 久久久久久cao我的性感人妻 | 真实国模和老外性视频| 国产精品视频资源在线播放 | 制丝袜业一区二区三区| 国产精品久久9999| 亚洲推理片免费看网站| www日韩a级s片av| 日韩成人免费电影二区| 亚洲一区二区三区久久午夜| 大白屁股精品视频国产| 欧美va不卡视频在线观看| 亚洲无线观看国产高清在线| 国产又大又黄免费观看| 国产在线自在拍91国语自产精品| 护士特殊服务久久久久久久| 中文字母永久播放1区2区3区| 青青青青青操视频在线观看| 91传媒一区二区三区| 青青色国产视频在线| 一区二区三区精品日本| 久久精品美女免费视频| 国产在线自在拍91国语自产精品 | 少妇人妻二三区视频| 欧美专区日韩专区国产专区| 中文字幕中文字幕人妻| 在线观看黄色成年人网站| 最新国产精品网址在线观看| 国产视频网站国产视频| 久久久久久9999久久久久| 中文字幕高清免费在线人妻| 在线观看免费视频网| 啪啪啪啪啪啪啪啪啪啪黄色| 国产黑丝高跟鞋视频在线播放| 免费福利av在线一区二区三区| 国产精品一二三不卡带免费视频| 亚洲女人的天堂av| 亚洲最大免费在线观看| 成年人午夜黄片视频资源| 国产刺激激情美女网站| 97人人妻人人澡人人爽人人精品| 日韩a级黄色小视频| 久久久久久久一区二区三| 国产一区av澳门在线观看| 色婷婷六月亚洲综合香蕉| 黄色黄色黄片78在线| 2021国产一区二区| 偷拍自拍亚洲美腿丝袜| 免费看高清av的网站| 人妻爱爱 中文字幕| 精品亚洲中文字幕av| 亚洲第一黄色在线观看| 亚洲国产精品中文字幕网站| 巨乳人妻日下部加奈被邻居中出 | 精品人妻伦一二三区久 | 2021年国产精品自拍| 久久久久久久久久久久久97| 亚洲成人av一区久久| 国产精品sm调教视频| 亚洲精品高清自拍av| 亚洲天堂第一页中文字幕| 国产片免费观看在线观看| 国产一级精品综合av| 中文字幕在线免费第一页| 天天干天天搞天天摸| 中文字幕免费在线免费| 日辽宁老肥女在线观看视频| 一区二区三区 自拍偷拍| 国产欧美精品一区二区高清| 婷婷久久久久深爱网| 亚洲人妻视频在线网| 一区二区三区另类在线| 99国内小视频在现欢看| 一区二区三区精品日本| 青青草亚洲国产精品视频| 抽查舔水白紧大视频| 亚洲熟女女同志女同| 日曰摸日日碰夜夜爽歪歪| 韩国男女黄色在线观看| 91精品一区二区三区站长推荐| 青青青爽视频在线播放| 91色老99久久九九爱精品| 亚洲熟女久久久36d| 久久综合老鸭窝色综合久久| japanese五十路熟女熟妇| 日韩av有码一区二区三区4| 成年人该看的视频黄免费| 亚洲精品亚洲人成在线导航 | 成人H精品动漫在线无码播放| 黑人巨大精品欧美视频| 一区二区视频在线观看免费观看| 久久免费看少妇高潮完整版| 77久久久久国产精产品| 真实国模和老外性视频| 精品一区二区三区三区色爱| 91九色porny蝌蚪国产成人| 国产免费高清视频视频| 超鹏97历史在线观看| 91免费放福利在线观看| 九一传媒制片厂视频在线免费观看 | 蜜臀成人av在线播放| 熟女人妻一区二区精品视频| 日韩成人性色生活片| 2017亚洲男人天堂| 中文字幕在线免费第一页| 男人天堂最新地址av| 精品亚洲国产中文自在线| 一区二区三区久久中文字幕| 国产伊人免费在线播放| 夜夜嗨av蜜臀av| 日日摸夜夜添夜夜添毛片性色av| 国产综合视频在线看片| 天天日天天摸天天爱| 欧美亚洲自偷自拍 在线| 老鸭窝日韩精品视频观看| 97成人免费在线观看网站| 欧美成人黄片一区二区三区| 男人天堂最新地址av| 九九热99视频在线观看97| 精彩视频99免费在线| 中文字幕免费在线免费| 蜜臀av久久久久久久| 天堂v男人视频在线观看| 91片黄在线观看喷潮| 91香蕉成人app下载| 亚洲免费在线视频网站| 我想看操逼黄色大片| 免费十精品十国产网站| 人妻熟女中文字幕aⅴ在线| 最近中文2019年在线看| 中文字幕乱码av资源| 91精品激情五月婷婷在线| 亚洲老熟妇日本老妇| 日本在线不卡免费视频| 成人亚洲精品国产精品 | 91精品视频在线观看免费| 91国内精品久久久久精品一| 一区二区三区综合视频| 少妇一区二区三区久久久| 女生被男生插的视频网站| 黑人性生活视频免费看| 老司机午夜精品视频资源| 78色精品一区二区三区| 亚洲国产在人线放午夜| 国产黄色大片在线免费播放| 国内资源最丰富的网站| 国产在线观看免费人成短视频| 中文字幕日韩精品就在这里| av男人天堂狠狠干| 99久久久无码国产精品性出奶水 | 啊慢点鸡巴太大了啊舒服视频| 精品国产亚洲av一淫| 18禁精品网站久久| 亚洲精品欧美日韩在线播放| 亚洲av色香蕉一区二区三区| 中国黄片视频一区91| 精品日产卡一卡二卡国色天香| av一区二区三区人妻| AV无码一区二区三区不卡| 男女啪啪啪啪啪的网站| 日韩精品中文字幕播放| 亚洲的电影一区二区三区| 天天插天天狠天天操| 亚洲少妇高潮免费观看| 亚洲欧美福利在线观看| 欧美特色aaa大片| 性色av一区二区三区久久久| 99热碰碰热精品a中文| 欧美地区一二三专区| 特一级特级黄色网片| 男人操女人逼逼视频网站| 女同久久精品秋霞网| 一本久久精品一区二区| 天天爽夜夜爽人人爽QC| 欧美美女人体视频一区| 99久久成人日韩欧美精品| 亚洲国产精品美女在线观看| 很黄很污很色的午夜网站在线观看| 欧美麻豆av在线播放| 久久这里只有精品热视频| 国产日韩欧美视频在线导航| 亚洲午夜伦理视频在线| 成熟熟女国产精品一区| 日本av在线一区二区三区| av乱码一区二区三区| 久久久久久97三级| 美女张开两腿让男人桶av| 亚洲日本一区二区久久久精品| 日韩美av高清在线| 久久精品亚洲成在人线a| 大学生A级毛片免费视频| 国产精品亚洲在线观看| 69精品视频一区二区在线观看 | 亚洲综合色在线免费观看| 天天操天天插天天色| 97少妇精品在线观看| 亚洲av天堂在线播放| 精品国产高潮中文字幕| 欧美老鸡巴日小嫩逼| 中文字幕高清免费在线人妻| 天天躁日日躁狠狠躁躁欧美av| 国产成人精品一区在线观看| 亚洲福利天堂久久久久久| wwwxxx一级黄色片| 东游记中文字幕版哪里可以看到| 亚洲av日韩精品久久久久久hd| 国产在线观看黄色视频| 亚洲 中文 自拍 另类 欧美| 日韩精品中文字幕播放| 国产精品中文av在线播放| 中文 成人 在线 视频| 精品久久婷婷免费视频| 92福利视频午夜1000看| 2020国产在线不卡视频| 国产av福利网址大全| 一区二区三区久久久91| 18禁污污污app下载| 丰满的继坶3中文在线观看| 亚洲成人精品女人久久久| 91精品国产91久久自产久强| 国产成人无码精品久久久电影| 特一级特级黄色网片| 丰满熟女午夜福利视频| 少妇高潮一区二区三区| 国产+亚洲+欧美+另类| 99精品亚洲av无码国产另类 | 午夜福利人人妻人人澡人人爽| 国产乱子伦精品视频潮优女| 亚洲区美熟妇久久久久| 欧美黑人巨大性xxxxx猛交| 欧美精品久久久久久影院| 亚洲图库另类图片区| 伊人综合aⅴ在线网| 免费高清自慰一区二区三区网站 | 风流唐伯虎电视剧在线观看| 国产+亚洲+欧美+另类| 狍和女人的王色毛片| 唐人色亚洲av嫩草| 国产视频一区二区午夜| 久久久久久久精品成人热| 亚洲 中文 自拍 另类 欧美| 免费观看成年人视频在线观看| 国产亚洲成人免费在线观看| 熟女在线视频一区二区三区| 国产精品午夜国产小视频| 老鸭窝在线观看一区| av破解版在线观看| 精品黑人巨大在线一区| 三级黄色亚洲成人av| 在线观看视频一区麻豆| 日韩中文字幕福利av| 美女av色播在线播放| 成人综合亚洲欧美一区 | 免费啪啪啪在线观看视频| av高潮迭起在线观看| 无套猛戳丰满少妇人妻| 国产污污污污网站在线| 亚洲国产在线精品国偷产拍| 5528327男人天堂| 欧美黑人与人妻精品| 国产精品久久9999| 社区自拍揄拍尻屁你懂的| 性感美女高潮视频久久久| 国产熟妇一区二区三区av| 免费一级特黄特色大片在线观看 | 日韩av有码中文字幕| 欧美第一页在线免费观看视频| 性色av一区二区三区久久久| 国产亚洲欧美视频网站| 欧美中文字幕一区最新网址| 一二三中文乱码亚洲乱码one| 日本女大学生的黄色小视频| 国产成人精品午夜福利训2021| 午夜精品一区二区三区城中村| 9l人妻人人爽人人爽| 婷婷久久久综合中文字幕| 天天干天天插天天谢| 爆乳骚货内射骚货内射在线| 亚洲自拍偷拍综合色| 天天操天天操天天碰| 日本午夜福利免费视频| AV无码一区二区三区不卡| 国产亚洲欧美45p| 日本脱亚入欧是指什么| 亚洲激情偷拍一区二区| 国产精品成人xxxx| 岛国青草视频在线观看| 大学生A级毛片免费视频| 亚洲图片偷拍自拍区| 国产91嫩草久久成人在线视频| 18禁美女黄网站色大片下载| 2022中文字幕在线| 黄色成年网站午夜在线观看| 日本韩国在线观看一区二区| 日韩二区视频一线天婷婷五| 欧洲黄页网免费观看| 91免费福利网91麻豆国产精品| 超鹏97历史在线观看| 欧美80老妇人性视频| 天天通天天透天天插| 99久久超碰人妻国产| 北条麻妃高跟丝袜啪啪| av天堂资源最新版在线看| 欧美精品一二三视频| 国产精品成人xxxx| 一二三区在线观看视频| 绝顶痉挛大潮喷高潮无码| 黄色视频成年人免费观看| 欧美成人综合视频一区二区 | 亚洲人人妻一区二区三区| 91亚洲手机在线视频播放| 天天日天天干天天干天天日| 中文字幕中文字幕人妻| 麻豆精品成人免费视频| 老师让我插进去69AV| 亚洲精品欧美日韩在线播放| av乱码一区二区三区| 久久农村老妇乱69系列| 久久精品美女免费视频| 日本少妇精品免费视频| 3D动漫精品啪啪一区二区下载| 天天做天天爽夜夜做少妇| 漂亮 人妻被中出中文| 自拍偷区二区三区麻豆| 日韩av免费观看一区| 黄色成人在线中文字幕| 18禁免费av网站| 国产福利在线视频一区| 亚洲天天干 夜夜操| 老司机福利精品免费视频一区二区| 大鸡八强奸视频在线观看| 2021年国产精品自拍| 97年大学生大白天操逼| 亚洲免费成人a v| 黄色三级网站免费下载| av一区二区三区人妻| 在线观看黄色成年人网站| 狠狠鲁狠狠操天天晚上干干| 国产中文精品在线观看| 社区自拍揄拍尻屁你懂的| 欧美亚洲自偷自拍 在线| 亚洲国产成人av在线一区| 成人福利视频免费在线| 91高清成人在线视频| 亚洲久久午夜av一区二区| 一二三区在线观看视频| 国产精品久久久久久美女校花| 100%美女蜜桃视频| 精品av国产一区二区三区四区 | 日韩欧美制服诱惑一区在线| 免费av岛国天堂网站| 青青青国产片免费观看视频| 老有所依在线观看完整版| 青青伊人一精品视频| 成人av中文字幕一区| 国产精品视频欧美一区二区| 无码精品一区二区三区人 | 日韩一区二区三区三州| 大尺度激情四射网站| 视频在线亚洲一区二区| 日噜噜噜夜夜噜噜噜天天噜噜噜| 秋霞午夜av福利经典影视| 久久精品国产999| 青青青青青免费视频| 视频在线免费观看你懂得| 国产视频一区在线观看| 亚洲国际青青操综合网站| 美女张开两腿让男人桶av| 极品性荡少妇一区二区色欲| 啊啊好慢点插舔我逼啊啊啊视频 | 欧美日本在线视频一区| 国产精品久久久黄网站| 一区二区在线观看少妇| 欧美韩国日本国产亚洲| 日韩美在线观看视频黄| 亚洲精品国产综合久久久久久久久 | 亚洲自拍偷拍综合色| 麻豆精品成人免费视频| 真实国产乱子伦一区二区| 亚洲欧美一区二区三区爱爱动图| 真实国模和老外性视频| 天天操夜夜操天天操天天操| 日本脱亚入欧是指什么| 日本av高清免费网站| 欧美亚洲中文字幕一区二区三区| 在线免费观看亚洲精品电影| 亚洲高清视频在线不卡| 晚上一个人看操B片| 啊啊啊想要被插进去视频| 人人爽亚洲av人人爽av| 亚洲欧美另类手机在线| 日韩黄色片在线观看网站| 国产在线自在拍91国语自产精品| 久久三久久三久久三久久| 亚洲成a人片777777| 日韩亚洲高清在线观看| 视频一区二区在线免费播放| 日韩av熟妇在线观看| 97国产在线av精品| 亚洲成av人无码不卡影片一| 经典av尤物一区二区|