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

最新評論

天天色天天舔天天射天天爽| 国产成人午夜精品福利| 清纯美女在线观看国产| 午夜在线精品偷拍一区二| 日视频免费在线观看| 丰满熟女午夜福利视频| 国产老熟女伦老熟妇ⅹ| 大陆胖女人与丈夫操b国语高清 | 精品亚洲中文字幕av| 国产亚洲国产av网站在线| www日韩毛片av| 欧美viboss性丰满| 91人妻精品一区二区在线看| 午夜精品亚洲精品五月色| 中文字幕高清资源站| 在线免费视频 自拍| AV无码一区二区三区不卡| aⅴ精产国品一二三产品| 欧洲国产成人精品91铁牛tv| 欧美一区二区三区激情啪啪啪| 欧美亚洲免费视频观看| 人妻丝袜诱惑我操她视频| 国产高清在线观看1区2区| 亚洲一级av无码一级久久精品| 天天日天天爽天天爽| 老司机在线精品福利视频| 青草久久视频在线观看| 一区二区免费高清黄色视频| av网址在线播放大全| 一区二区三区欧美日韩高清播放| 2018在线福利视频| 最新激情中文字幕视频| 午夜精品在线视频一区| 98精产国品一二三产区区别| 亚洲超碰97人人做人人爱| 久久精品久久精品亚洲人| 天天日夜夜干天天操| 亚洲午夜电影之麻豆| 在线观看视频一区麻豆| 深田咏美亚洲一区二区| 国产精品sm调教视频| 嫩草aⅴ一区二区三区| 国产又粗又硬又猛的毛片视频| 香蕉91一区二区三区| 亚洲熟妇久久无码精品| 成人在线欧美日韩国产| 四川五十路熟女av| 免费观看国产综合视频| 国产麻豆国语对白露脸剧情 | 国产精品人妻熟女毛片av久| 熟女国产一区亚洲中文字幕| 直接能看的国产av| 天天日天天干天天舔天天射| 久青青草视频手机在线免费观看| www天堂在线久久| 99精品免费观看视频| avjpm亚洲伊人久久| 91啪国自产中文字幕在线| 中文字幕乱码人妻电影| 久久三久久三久久三久久| 亚洲高清国产拍青青草原| 巨乳人妻日下部加奈被邻居中出| 国产精品久久久久国产三级试频| 亚洲成人激情av在线| 在线新三级黄伊人网| 亚洲av午夜免费观看| 久久久久久国产精品| 91九色porny国产蝌蚪视频| av中文在线天堂精品| 欧美日韩精品永久免费网址| 国产成人一区二区三区电影网站 | 成人30分钟免费视频| 91精品综合久久久久3d动漫 | 国产老熟女伦老熟妇ⅹ| 欧美成人精品在线观看| 天天干天天爱天天色| 337p日本大胆欧美人| 很黄很污很色的午夜网站在线观看 | 自拍偷拍 国产资源| 国产精品sm调教视频| 亚洲一区二区三区久久午夜| 性欧美激情久久久久久久| av森泽佳奈在线观看| 日韩一个色综合导航| 午夜91一区二区三区| 高潮喷水在线视频观看| 自拍偷拍 国产资源| 一区二区三区精品日本| 又色又爽又黄的美女裸体| 日本福利午夜电影在线观看| av网址国产在线观看| 午夜美女少妇福利视频| 黄色av网站免费在线| 久久久精品国产亚洲AV一 | 亚洲国产欧美国产综合在线| 色97视频在线播放| 日韩三级电影华丽的外出| 毛片av在线免费看| 丝袜长腿第一页在线| 久久精品亚洲成在人线a| 制服丝袜在线人妻中文字幕| 国产亚洲精品欧洲在线观看| 国产黄色大片在线免费播放| 2021国产一区二区| 在线国产精品一区二区三区| 国产高清97在线观看视频| 天天做天天干天天舔| 动漫美女的小穴视频| 2020国产在线不卡视频| 中文字幕日本人妻中出| 2021久久免费视频| 四川乱子伦视频国产vip| 亚洲国产精品免费在线观看| 国产精品国产精品一区二区| 美女福利视频网址导航| 女蜜桃臀紧身瑜伽裤 | 免费观看污视频网站| 丝袜肉丝一区二区三区四区在线看| 91老熟女连续高潮对白| 人人在线视频一区二区| eeuss鲁片一区二区三区| 亚洲中文字幕人妻一区| 57pao国产一区二区| 中文字幕综合一区二区| 亚洲超碰97人人做人人爱| 午夜在线观看一区视频| 国产精品久久久久久久精品视频| 看一级特黄a大片日本片黑人| 国产成人精品一区在线观看| 亚洲狠狠婷婷综合久久app| 天天射夜夜操狠狠干| 91精品国产高清自在线看香蕉网 | 免费无毒热热热热热热久| 99视频精品全部15| 国产精品中文av在线播放 | 动漫黑丝美女的鸡巴| 久久久久久久久久一区二区三区| 都市家庭人妻激情自拍视频| 亚洲国产中文字幕啊啊啊不行了| 亚洲国产精品中文字幕网站| 在线免费视频 自拍| av天堂加勒比在线| 人人妻人人澡人人爽人人dvl| 亚洲Av无码国产综合色区| 熟女在线视频一区二区三区| 日本在线一区二区不卡视频| 天天日天天天天天天天天天天| 天美传媒mv视频在线观看| 不卡精品视频在线观看| 人妻少妇亚洲精品中文字幕| 久久久久久久亚洲午夜综合福利| 大屁股肉感人妻中文字幕在线| 国产又粗又猛又爽又黄的视频在线 | 日本少妇高清视频xxxxx| 97精品综合久久在线| 成年午夜影片国产片| 亚洲免费va在线播放| 青娱乐在线免费视频盛宴| brazzers欧熟精品系列| 99热久久这里只有精品| 亚洲一区二区久久久人妻| 香蕉av影视在线观看| 蜜桃视频入口久久久| 亚洲欧美另类自拍偷拍色图| 白嫩白嫩美女极品国产在线观看| 在线观看视频污一区| 亚洲在线免费h观看网站| 日韩亚洲高清在线观看| 亚洲国产精品久久久久久6| 天堂中文字幕翔田av| 香港一级特黄大片在线播放| 国产一区自拍黄视频免费观看| 最新国产精品拍在线观看| 久草视频在线一区二区三区资源站 | 亚洲护士一区二区三区| 北条麻妃高跟丝袜啪啪| 国产成人精品一区在线观看| 欧美成人黄片一区二区三区| 亚洲国产精品久久久久久6| 亚洲超碰97人人做人人爱| 成年人黄色片免费网站| 快插进小逼里大鸡吧视频| 激情五月婷婷综合色啪| 特一级特级黄色网片| 天堂资源网av中文字幕| 天天干天天操天天摸天天射| 综合国产成人在线观看| 国产在线一区二区三区麻酥酥| 久草视频在线一区二区三区资源站| 日韩a级黄色小视频| 国产变态另类在线观看| 亚洲伊人色一综合网| 一区二区视频视频视频| 在线观看视频 你懂的| 一级黄片大鸡巴插入美女| 成年午夜影片国产片| 美女 午夜 在线视频| 黄色在线观看免费观看在线| 亚洲少妇人妻无码精品| 一级黄色片夫妻性生活| 国产欧美日韩在线观看不卡| 国产aⅴ一线在线观看| 国产一区二区视频观看| 久久久久久久亚洲午夜综合福利| 偷拍自拍亚洲美腿丝袜| 中国熟女一区二区性xx| 色狠狠av线不卡香蕉一区二区| 九一传媒制片厂视频在线免费观看| 亚洲精品亚洲人成在线导航| 91国语爽死我了不卡| 人妻熟女在线一区二区| 亚洲中文字幕综合小综合| 中文字幕日韩精品就在这里| 最新激情中文字幕视频| 熟女人妻三十路四十路人妻斩| 亚洲国产精品久久久久蜜桃| 自拍偷拍日韩欧美亚洲| 国产女人露脸高潮对白视频| 国产欧美精品一区二区高清 | 在线播放国产黄色av| 国产精品成久久久久三级蜜臀av | 欧美精品欧美极品欧美视频 | aⅴ精产国品一二三产品| 都市家庭人妻激情自拍视频| 不卡精品视频在线观看| 天天摸天天亲天天舔天天操天天爽 | 欧美亚洲国产成人免费在线| 伊人网中文字幕在线视频| 天天做天天爽夜夜做少妇| 在线制服丝袜中文字幕| 天天日天天摸天天爱| 日韩一个色综合导航| 中文字幕av熟女人妻| 亚洲粉嫩av一区二区三区| 99视频精品全部15| 做爰视频毛片下载蜜桃视频1| 亚洲另类伦春色综合小| 免费在线看的黄片视频| 日本一道二三区视频久久 | 一个人免费在线观看ww视频| 黄页网视频在线免费观看| 男生舔女生逼逼视频| 日辽宁老肥女在线观看视频| 天天日天天爽天天爽| 国产午夜亚洲精品不卡在线观看| 亚洲精品国产综合久久久久久久久 | 热思思国产99re| 成人av在线资源网站| 天天插天天色天天日| 亚洲无线观看国产高清在线| 日辽宁老肥女在线观看视频| 91中文字幕免费在线观看| 粉嫩欧美美人妻小视频| 色哟哟国产精品入口| 亚洲人妻国产精品综合| 日本熟女50视频免费| 成人在线欧美日韩国产| 93精品视频在线观看| 老司机免费视频网站在线看| 伊人网中文字幕在线视频| 婷婷久久久综合中文字幕| jiuse91九色视频| 五十路息与子猛烈交尾视频| av久久精品北条麻妃av观看| 91精品资源免费观看| 精品一区二区三区三区88| 亚洲 色图 偷拍 欧美| 77久久久久国产精产品| 91大神福利视频网| 青青在线视频性感少妇和隔壁黑丝 | 蜜臀成人av在线播放| 亚洲 欧美 精品 激情 偷拍| 国产揄拍高清国内精品对白| 欧洲国产成人精品91铁牛tv| 婷婷色中文亚洲网68| 亚洲日本一区二区久久久精品| 亚洲福利精品福利精品福利| 免费成人av中文字幕| 婷婷五月亚洲综合在线| 久久久久久性虐视频| 色婷婷综合激情五月免费观看| 国产福利小视频免费观看| 欧美成人猛片aaaaaaa| 亚洲欧美日韩视频免费观看| 在线观看免费岛国av| 国产一区二区火爆视频| 天堂资源网av中文字幕| 97国产福利小视频合集| 蝴蝶伊人久久中文娱乐网| 99精品国产aⅴ在线观看| 日韩一区二区电国产精品| 91国产资源在线视频| 中文字幕AV在线免费看 | 日本脱亚入欧是指什么| 在线免费观看日本伦理| 国产超码片内射在线| 中文人妻AV久久人妻水| 99精品视频之69精品视频| 精品av国产一区二区三区四区| 91精品资源免费观看| 中文字幕人妻av在线观看| 国产成人精品亚洲男人的天堂| 香蕉av影视在线观看| 国产亚洲天堂天天一区| 久久久久久久久久久久久97| 韩国AV无码不卡在线播放| 粗大的内捧猛烈进出爽大牛汉子| 国产揄拍高清国内精品对白| 啊啊啊想要被插进去视频| 综合一区二区三区蜜臀| av天堂中文免费在线| 少妇人妻真实精品视频| 中国把吊插入阴蒂的视频| 免费看国产又粗又猛又爽又黄视频| 熟女人妻一区二区精品视频| av天堂加勒比在线| 新97超碰在线观看| 天天爽夜夜爽人人爽QC| 日本成人不卡一区二区| 91国产在线视频免费观看| yy96视频在线观看| 无码日韩人妻精品久久| 中文字幕日韩精品就在这里| 日韩精品啪啪视频一道免费| 3337p日本欧洲大胆色噜噜| 狠狠躁夜夜躁人人爽天天天天97| 91超碰青青中文字幕| 欧美伊人久久大香线蕉综合| 果冻传媒av一区二区三区| 欧美成人精品在线观看| 亚洲女人的天堂av| 午夜国产免费福利av| 国产一区成人在线观看视频| 成人亚洲精品国产精品| 亚洲国产精品黑丝美女| 最新中文字幕乱码在线| 人妻熟女中文字幕aⅴ在线| 在线免费观看日本片| 白嫩白嫩美女极品国产在线观看| 亚洲人人妻一区二区三区| 精品高潮呻吟久久av| 亚洲国产第一页在线观看| 亚洲国际青青操综合网站| 亚洲午夜精品小视频| 青青草国内在线视频精选| 精产国品久久一二三产区区别| 人妻自拍视频中国大陆| 视频 国产 精品 熟女 | 中国视频一区二区三区| 欧美特级特黄a大片免费| 亚洲最大黄了色网站| 啪啪啪啪啪啪啪啪啪啪黄色| 18禁无翼鸟成人在线| 国产亚洲精品品视频在线| 免费看国产av网站| 可以免费看的www视频你懂的| 国产精彩对白一区二区三区| 亚洲国产第一页在线观看| 中文字幕之无码色多多| 最新97国产在线视频| 九九热99视频在线观看97| 爆乳骚货内射骚货内射在线 | 成人性黑人一级av| 日韩精品激情在线观看| 日本一区精品视频在线观看| 国产黄色片在线收看| 久久久精品999精品日本| 五十路息与子猛烈交尾视频 | 啪啪啪18禁一区二区三区| 男大肉棒猛烈插女免费视频| av俺也去在线播放| 亚洲精品乱码久久久久久密桃明| 偷青青国产精品青青在线观看| 日本少妇的秘密免费视频| 91国内精品自线在拍白富美| 精品区一区二区三区四区人妻| 国产高潮无码喷水AV片在线观看| 瑟瑟视频在线观看免费视频| 人妻少妇一区二区三区蜜桃| 香蕉91一区二区三区| 毛片一级完整版免费| 馒头大胆亚洲一区二区| 亚洲 欧美 精品 激情 偷拍| 超级碰碰在线视频免费观看| 亚洲精品久久视频婷婷| 精品一区二区三四区| 在线视频这里只有精品自拍| 亚洲综合在线视频可播放| 亚洲女人的天堂av| 黑人3p华裔熟女普通话| 国产一区二区神马久久| 成年午夜影片国产片| 日辽宁老肥女在线观看视频| 色综合久久五月色婷婷综合| 成人国产影院在线观看| 久久这里只有精品热视频| 国产熟妇一区二区三区av | 骚逼被大屌狂草视频免费看| 日辽宁老肥女在线观看视频| 国产亚洲精品视频合集| 51国产成人精品视频| 亚洲av日韩高清hd| 9国产精品久久久久老师| 精品久久久久久久久久中文蒉| 国产精品国产精品一区二区| 欧美天堂av无线av欧美| 国产精品手机在线看片| 18禁无翼鸟成人在线| jiuse91九色视频| 绝顶痉挛大潮喷高潮无码| 国产欧美日韩第三页| v888av在线观看视频| 爱爱免费在线观看视频| 一本久久精品一区二区| 超级av免费观看一区二区三区| 夜夜操,天天操,狠狠操| 密臀av一区在线观看| jiujiure精品视频在线| 91免费黄片可看视频 | 一区二区三区久久中文字幕| 中文字幕人妻熟女在线电影| 国产午夜亚洲精品不卡在线观看| 精品人妻每日一部精品| 青青在线视频性感少妇和隔壁黑丝| 精品久久婷婷免费视频| 天堂中文字幕翔田av| 97精品视频在线观看| 第一福利视频在线观看| 欧美色婷婷综合在线| 熟女妇女老妇一二三区| 免费观看丰满少妇做受| 国产亚洲精品视频合集| 中文字母永久播放1区2区3区| 国产刺激激情美女网站| 日韩伦理短片在线观看| 亚洲一区二区三区av网站| 亚洲国产成人av在线一区| 亚洲高清国产一区二区三区| 亚洲另类在线免费观看| 黄色大片免费观看网站| 经典av尤物一区二区| 老司机深夜免费福利视频在线观看| 日日夜夜狠狠干视频| 精品老妇女久久9g国产| 成年美女黄网站18禁久久| 亚洲熟女女同志女同| 色综合久久无码中文字幕波多| 在线观看视频 你懂的| 人妻丰满熟妇综合网| 人妻素人精油按摩中出| 亚洲午夜在线视频福利| 99精品国产自在现线观看| 亚洲av日韩精品久久久久久hd| 日美女屁股黄邑视频| 国产精品国产三级国产午| 毛茸茸的大外阴中国视频| 蜜臀成人av在线播放| 天天日天天干天天要| 欧美专区日韩专区国产专区| 首之国产AV医生和护士小芳| 黄网十四区丁香社区激情五月天| 精品suv一区二区69| 亚洲精品ww久久久久久| 亚洲一区二区三区五区| 国产乱子伦一二三区| 东游记中文字幕版哪里可以看到| 五色婷婷综合狠狠爱| 亚洲va欧美va人人爽3p| 国产一区二区神马久久| 国产a级毛久久久久精品| 97超碰人人搞人人| 91精品国产黑色丝袜| 福利在线视频网址导航| 不卡日韩av在线观看| 少妇系列一区二区三区视频| 日韩欧美一级精品在线观看| 成人乱码一区二区三区av| 白白操白白色在线免费视频| 成人24小时免费视频| av网址在线播放大全| 国产91精品拍在线观看| 快插进小逼里大鸡吧视频| 青青青青青手机视频| 久久精品亚洲成在人线a| 狠狠操狠狠操免费视频| 激情人妻校园春色亚洲欧美 | 欧美激情电影免费在线| 亚洲一区久久免费视频| 亚洲国产成人在线一区| 北条麻妃肉色丝袜视频| 日本三极片中文字幕| 狠狠躁夜夜躁人人爽天天久天啪| 日本五十路熟新垣里子| av在线资源中文字幕| 久久丁香婷婷六月天| 亚欧在线视频你懂的| 色哟哟在线网站入口| 东京热男人的av天堂| 秋霞午夜av福利经典影视| 国产污污污污网站在线| 亚洲中文字幕人妻一区| 播放日本一区二区三区电影| 天码人妻一区二区三区在线看 | 国产va精品免费观看| 制丝袜业一区二区三区| 亚洲一区二区三区久久受| 在线观看av2025| 日韩a级黄色小视频| 少妇高潮一区二区三区| 黄色黄色黄片78在线| 韩国三级aaaaa高清视频| 亚洲国产欧美一区二区三区久久 | 欧美在线一二三视频| 欧美精品激情在线最新观看视频| 国产黑丝高跟鞋视频在线播放| 中文字幕一区二区三区人妻大片| 5528327男人天堂| 青青青国产片免费观看视频 | 欧美aa一级一区三区四区| 91国产资源在线视频| 中文字幕综合一区二区| 成人av久久精品一区二区| 国产日韩精品电影7777| 日噜噜噜夜夜噜噜噜天天噜噜噜| 蜜臀av久久久久久久| 欧美日韩精品永久免费网址 | huangse网站在线观看| 91自产国产精品视频| sspd152中文字幕在线| 好吊操视频这里只有精品| 视频一区二区在线免费播放| 成人伊人精品色xxxx视频| 一区二区三区四区视频在线播放| 久精品人妻一区二区三区 | 91av中文视频在线| 欧美性感尤物人妻在线免费看| 天天操夜夜操天天操天天操| 欧美va亚洲va天堂va| 精品国产亚洲av一淫| 欧美特色aaa大片| 蜜桃专区一区二区在线观看| 青青青青青手机视频| av一区二区三区人妻| 97精品成人一区二区三区| 午夜福利资源综合激情午夜福利资 | 91色网站免费在线观看| 91国产在线免费播放| 日本少妇精品免费视频| 青青草亚洲国产精品视频| 在线视频自拍第三页| 天天艹天天干天天操| 日曰摸日日碰夜夜爽歪歪| 亚洲欧美自拍另类图片| 欧美黑人性猛交xxxxⅹooo| 88成人免费av网站| 激情人妻校园春色亚洲欧美| 欧美精品一二三视频| 亚洲免费福利一区二区三区| 国产午夜福利av导航| 国产在线自在拍91国语自产精品 | 国产精品三级三级三级| 国产欧美日韩第三页| 999久久久久999| 亚洲成人精品女人久久久| 男人天堂最新地址av| 亚洲欧美综合另类13p| 少妇被强干到高潮视频在线观看| 中文字母永久播放1区2区3区| 不卡一区一区三区在线| 人妻少妇精品久久久久久| 色吉吉影音天天干天天操| 国产九色91在线视频| 国产无遮挡裸体免费直播视频| 福利视频广场一区二区| 初美沙希中文字幕在线| 超碰中文字幕免费观看| 天天射夜夜操综合网| av在线观看网址av| 日韩二区视频一线天婷婷五| 扒开腿挺进肉嫩小18禁视频| 青青青aaaa免费| 国产高清在线在线视频| 久久久久久9999久久久久| 亚洲中文精品字幕在线观看| 狠狠躁夜夜躁人人爽天天天天97| 国产精品视频欧美一区二区| 自拍偷拍 国产资源| 桃色视频在线观看一区二区 | 欧美黑人与人妻精品| 99精品久久久久久久91蜜桃| 午夜毛片不卡免费观看视频| 国产午夜福利av导航| 人妻素人精油按摩中出| 男人操女人逼逼视频网站| 美女吃鸡巴操逼高潮视频| 中文字幕视频一区二区在线观看| 视频 一区二区在线观看| 亚洲 欧美 自拍 偷拍 在线| 黄色无码鸡吧操逼视频| 激情内射在线免费观看| 老司机免费视频网站在线看| 高潮喷水在线视频观看| 1000部国产精品成人观看视频| 久久久久只精品国产三级| 午夜av一区二区三区 | 国产精品成久久久久三级蜜臀av| 亚洲av香蕉一区区二区三区犇| 欧美黑人与人妻精品| 五十路av熟女松本翔子| 久草视频首页在线观看| 美女在线观看日本亚洲一区| 久久久麻豆精亚洲av麻花| 亚洲av日韩高清hd| 亚洲va天堂va国产va久| 国产又粗又猛又爽又黄的视频在线| 久草视频在线一区二区三区资源站| 中文字幕高清在线免费播放| 福利在线视频网址导航| 中文字幕一区二区人妻电影冢本| 国产美女一区在线观看| 亚洲美女美妇久久字幕组| 亚洲日本一区二区三区| 国产亚洲精品欧洲在线观看| 久久免看30视频口爆视频| 黄色片年轻人在线观看| 亚洲最大黄 嗯色 操 啊| 亚洲 国产 成人 在线| 成人国产影院在线观看| 91久久精品色伊人6882| 福利视频一区二区三区筱慧| av成人在线观看一区| 国产精品国产三级麻豆| 中文字幕高清免费在线人妻 | av高潮迭起在线观看| 中国熟女@视频91| 热思思国产99re| 99精品国产自在现线观看| 国产精品一区二区av国| 久久精品亚洲成在人线a| av乱码一区二区三区| 国产亚洲四十路五十路| 亚洲青青操骚货在线视频| 日噜噜噜夜夜噜噜噜天天噜噜噜| 中文字幕乱码av资源| 国产精品午夜国产小视频 | 精产国品久久一二三产区区别| 熟女少妇激情五十路| 激情五月婷婷综合色啪| 后入美女人妻高清在线| 亚洲 欧美 自拍 偷拍 在线| 淫秽激情视频免费观看| 亚洲av可乐操首页| 美女操逼免费短视频下载链接| 亚洲国产美女一区二区三区软件| 青青草在观免费国产精品| 日本韩国免费福利精品| 国产精品黄片免费在线观看| 操人妻嗷嗷叫视频一区二区| 又色又爽又黄的美女裸体| av完全免费在线观看av| 欧美日韩人妻久久精品高清国产| 人人超碰国字幕观看97| 75国产综合在线视频| 亚洲av午夜免费观看| 一区二区视频在线观看免费观看 | 97香蕉碰碰人妻国产樱花| 国产妇女自拍区在线观看| 首之国产AV医生和护士小芳| 护士特殊服务久久久久久久| 福利午夜视频在线合集| 亚洲中文字幕校园春色| 中文字幕AV在线免费看 | 天天日天天干天天要| av网址在线播放大全| 久久丁香花五月天色婷婷| 亚洲欧美福利在线观看| 国产视频网站国产视频| 2020国产在线不卡视频| 又大又湿又爽又紧A视频| 天天插天天狠天天操| 天天干天天操天天玩天天射| 91精品一区二区三区站长推荐| 免费成人va在线观看| 日韩视频一区二区免费观看| 老司机福利精品免费视频一区二区 | 人妻少妇亚洲精品中文字幕| 青青青青青免费视频| 伊人精品福利综合导航| 女蜜桃臀紧身瑜伽裤| 激情国产小视频在线| 日韩不卡中文在线视频网站| 日日操夜夜撸天天干| 亚洲高清免费在线观看视频| 91老师蜜桃臀大屁股| 视频久久久久久久人妻| 2022中文字幕在线| 91色老99久久九九爱精品| AV无码一区二区三区不卡| 人人妻人人澡欧美91精品| av在线资源中文字幕| 亚洲成人av一区久久| 99热99这里精品6国产| 日本av高清免费网站| 大陆精品一区二区三区久久| 国产自拍在线观看成人| 欧美日本在线观看一区二区 | 99久久激情婷婷综合五月天| 特大黑人巨大xxxx| 爆乳骚货内射骚货内射在线| 黑人性生活视频免费看| 人妻无码色噜噜狠狠狠狠色| 国内资源最丰富的网站| 免费成人va在线观看| 91免费观看国产免费| 亚洲人成精品久久久久久久| 一级黄片大鸡巴插入美女| 日本韩国免费福利精品| chinese国产盗摄一区二区| 在线免费91激情四射 | 亚洲熟妇无码一区二区三区| 91麻豆精品久久久久| 亚洲成av人无码不卡影片一| 日韩国产乱码中文字幕| 日辽宁老肥女在线观看视频| 亚洲一区制服丝袜美腿 | 日韩影片一区二区三区不卡免费| 色花堂在线av中文字幕九九| 欧美一区二区中文字幕电影| 亚洲熟妇x久久av久久| 日本中文字幕一二区视频| 国产美女精品福利在线| 人妻少妇性色欲欧美日韩| 日韩欧美一级aa大片| 78色精品一区二区三区| 最新97国产在线视频| 97超碰人人搞人人| 成年人午夜黄片视频资源| 老司机午夜精品视频资源| 直接观看免费黄网站| 狠狠躁夜夜躁人人爽天天久天啪| 日本美女性生活一级片| 久久久制服丝袜中文字幕| 中文字幕在线视频一区二区三区| 午夜av一区二区三区| brazzers欧熟精品系列| 视频一区二区三区高清在线| 免费黄高清无码国产| 天天草天天色天天干| 夜夜骑夜夜操夜夜奸| 亚洲精品久久综合久| 最新欧美一二三视频| 久久久久国产成人精品亚洲午夜| www,久久久,com| 天天操天天操天天碰| 韩国女主播精品视频网站| 香蕉aⅴ一区二区三区| 欧美黄片精彩在线免费观看| 亚洲欧美另类手机在线| 丝袜肉丝一区二区三区四区在线| 91精品国产黑色丝袜| 欧美交性又色又爽又黄麻豆| 人妻少妇亚洲一区二区| 熟女俱乐部一二三区| 久久www免费人成一看片| 国产91嫩草久久成人在线视频| 一区二区三区蜜臀在线| 天天摸天天亲天天舔天天操天天爽 | 国产成人精品一区在线观看| 久久精品亚洲国产av香蕉| 久久机热/这里只有| 国产黑丝高跟鞋视频在线播放| 精品黑人一区二区三区久久国产| 白白操白白色在线免费视频| 80电影天堂网官网| 国产福利小视频二区| 欧美精品黑人性xxxx| 熟女人妻在线中出观看完整版| 91极品大一女神正在播放| 久久机热/这里只有| 亚洲国产欧美一区二区三区…| 黄色在线观看免费观看在线| 国产1区,2区,3区| 亚洲精品ww久久久久久| 93精品视频在线观看| 免费高清自慰一区二区三区网站 | 久草电影免费在线观看| 啊用力插好舒服视频| 中文 成人 在线 视频| 日本少妇在线视频大香蕉在线观看 | 9国产精品久久久久老师| 水蜜桃国产一区二区三区| 在线不卡日韩视频播放| 亚洲午夜电影之麻豆 | 大黑人性xxxxbbbb| 色天天天天射天天舔| 啪啪啪18禁一区二区三区| 国产日韩精品一二三区久久久| 天天射夜夜操狠狠干| 日韩北条麻妃一区在线| 中文字幕在线视频一区二区三区| 北条麻妃肉色丝袜视频| 天天日天天日天天射天天干| 97香蕉碰碰人妻国产樱花| 国产一区av澳门在线观看| 亚洲蜜臀av一区二区三区九色| 91国偷自产一区二区三区精品| 经典av尤物一区二区| 国产中文精品在线观看| 社区自拍揄拍尻屁你懂的| 欧美日韩一区二区电影在线观看| 日日夜夜精品一二三| 女同互舔一区二区三区| 国产精品中文av在线播放| 黄色三级网站免费下载| 天堂av在线官网中文| 国产欧美精品一区二区高清| 天天操天天干天天日狠狠插| 日韩美女福利视频网| 欧美爆乳肉感大码在线观看| 免费福利av在线一区二区三区| 亚洲综合另类精品小说| 欧美亚洲少妇福利视频| 色av色婷婷人妻久久久精品高清| 在线免费91激情四射| 国产乱子伦一二三区| 国产精品入口麻豆啊啊啊| 北条麻妃肉色丝袜视频| 大黑人性xxxxbbbb| 综合页自拍视频在线播放| 亚洲中文字幕校园春色| 天天日天天爽天天爽| 天堂av在线官网中文| 日韩精品一区二区三区在线播放| 国产91嫩草久久成人在线视频| 亚洲欧美一卡二卡三卡| 亚洲天堂第一页中文字幕| 97精品人妻一区二区三区精品| 成人网18免费视频版国产| 欧美老鸡巴日小嫩逼| 欧美专区第八页一区在线播放 | 一区二区三区美女毛片| 免费十精品十国产网站| 国产亚洲精品品视频在线| 日本丰满熟妇大屁股久久| 成人sm视频在线观看| 91麻豆精品久久久久| 另类av十亚洲av| 亚洲av在线观看尤物| 75国产综合在线视频| 日本美女成人在线视频| 国产综合精品久久久久蜜臀| 日韩欧美国产精品91| 中文字幕—97超碰网| 中文字幕一区二 区二三区四区 | 免费一级黄色av网站| 日本乱人一区二区三区| 青青青视频自偷自拍38碰| 欧美日韩不卡一区不区二区| 一区二区三区精品日本| 风流唐伯虎电视剧在线观看| 亚洲精品国产久久久久久| 中文字幕在线观看国产片| aaa久久久久久久久| 国产密臀av一区二区三| 中文字幕人妻av在线观看| av在线免费观看亚洲天堂| 成人H精品动漫在线无码播放| 五十路人妻熟女av一区二区| 欧美一区二区中文字幕电影| 亚洲综合另类精品小说| 美女大bxxxx内射| 农村胖女人操逼视频| 白嫩白嫩美女极品国产在线观看| 伊人日日日草夜夜草| 初美沙希中文字幕在线| 2019av在线视频| 香港三日本三韩国三欧美三级| 国产精品久久综合久久| 一区二区三区蜜臀在线| 亚洲高清国产自产av| 黑人性生活视频免费看| 亚洲蜜臀av一区二区三区九色| 淫秽激情视频免费观看| 中文字幕一区二区三区蜜月| 欧美少妇性一区二区三区| 888亚洲欧美国产va在线播放| 亚洲 中文 自拍 另类 欧美| 久精品人妻一区二区三区| 国语对白xxxx乱大交| 黄色成人在线中文字幕| 班长撕开乳罩揉我胸好爽| 不卡精品视频在线观看| 亚洲人人妻一区二区三区| 国产乱子伦一二三区| 亚洲综合在线观看免费| 第一福利视频在线观看| 亚洲精品国产久久久久久| 亚洲男人让女人爽的视频| 亚洲精品久久视频婷婷| 国产精品视频欧美一区二区| 男人的天堂一区二区在线观看| 中文字幕高清免费在线人妻| 午夜91一区二区三区| sejizz在线视频| 国产精品视频一区在线播放| 端庄人妻堕落挣扎沉沦| 国产高潮无码喷水AV片在线观看| 天天躁日日躁狠狠躁躁欧美av| 老司机福利精品视频在线| 老司机免费视频网站在线看| 激情色图一区二区三区| 清纯美女在线观看国产| 国产午夜亚洲精品不卡在线观看| tube69日本少妇| 热99re69精品8在线播放| 男人靠女人的逼视频| 又粗又硬又猛又黄免费30| 久久艹在线观看视频| 91‖亚洲‖国产熟女| 天堂中文字幕翔田av| 亚洲精品午夜久久久久| 国产日本欧美亚洲精品视| 欧美一区二区三区高清不卡tv | 懂色av蜜桃a v| 日韩美av高清在线| 中文字幕无码一区二区免费| 天堂资源网av中文字幕| 狠狠鲁狠狠操天天晚上干干| 99热久久极品热亚洲| 日韩av免费观看一区| 亚洲熟女综合色一区二区三区四区| 97国产在线av精品| 亚洲成人免费看电影| 亚洲免费在线视频网站| 国产熟妇人妻ⅹxxxx麻豆| 午夜福利人人妻人人澡人人爽| 黄色中文字幕在线播放| 香蕉片在线观看av| 人妻另类专区欧美制服| 1024久久国产精品| xxx日本hd高清| 老师啊太大了啊啊啊尻视频| 中文字幕在线欧美精品| 黄页网视频在线免费观看| 国产亚洲天堂天天一区| 成人免费毛片aaaa| 在线观看视频网站麻豆| 91欧美在线免费观看| 91人妻精品一区二区久久| 亚洲国产精品免费在线观看| 欧亚乱色一区二区三区| 亚洲精品国偷自产在线观看蜜桃| 免费人成黄页网站在线观看国产 | 久久免看30视频口爆视频| mm131美女午夜爽爽爽| 精品日产卡一卡二卡国色天香| 在线观看av观看av| 国产aⅴ一线在线观看| 精品黑人一区二区三区久久国产| 欧美一区二区三区久久久aaa| 一区二区视频在线观看视频在线| 一区二区三区久久中文字幕| 亚洲国产精品免费在线观看| 青青青aaaa免费| 久久久精品欧洲亚洲av| 婷婷午夜国产精品久久久| 日本高清撒尿pissing| 亚洲av色图18p| 久草视频在线看免费| 人人妻人人爽人人添夜| 日本黄色特一级视频| 人人妻人人澡人人爽人人dvl| 成年人免费看在线视频| 日韩熟女av天堂系列| 91免费观看在线网站| 91麻豆精品秘密入口在线观看| 第一福利视频在线观看| 九色视频在线观看免费| 18禁网站一区二区三区四区| 2019av在线视频| 欧美精品久久久久久影院| 天天日夜夜操天天摸| 黑人借宿ntr人妻的沦陷2| 青青青青草手机在线视频免费看| 国产精品中文av在线播放| 欧美一区二区三区激情啪啪啪| 中文字幕 人妻精品| 国产+亚洲+欧美+另类| 91人妻精品久久久久久久网站| 日本人竟这样玩学生妹| 日韩欧美一级精品在线观看| 偷拍自拍福利视频在线观看| 欧美日韩v中文在线| 国产妇女自拍区在线观看| 中文字幕av一区在线观看| 少妇人妻真实精品视频| 神马午夜在线观看视频| h国产小视频福利在线观看| 综合色区亚洲熟妇shxstz| 日韩影片一区二区三区不卡免费| 亚洲超碰97人人做人人爱| 欧美日韩激情啪啪啪| 大鸡吧插逼逼视频免费看 | 日韩欧美高清免费在线| 天天操天天爽天天干| 91天堂精品一区二区| 91高清成人在线视频| 激情内射在线免费观看| 亚洲欧美自拍另类图片| 一区二区在线视频中文字幕| 大香蕉福利在线观看| 91精品视频在线观看免费| 中国无遮挡白丝袜二区精品| 久草视频在线免播放| 日本丰满熟妇大屁股久久| 一区二区三区 自拍偷拍| 亚洲av一妻不如妾| 国产精品大陆在线2019不卡| 国产高清97在线观看视频| 中文 成人 在线 视频| 中国无遮挡白丝袜二区精品| 亚洲欧美激情人妻偷拍| 欧美偷拍自拍色图片| av新中文天堂在线网址| 欧美偷拍亚洲一区二区| 男女第一次视频在线观看| 日韩一区二区三区三州| 狠狠操操操操操操操操操 | 欧美日本在线视频一区| 99精品视频在线观看婷婷| 亚洲美女美妇久久字幕组| 久久久久久国产精品| 91极品新人『兔兔』精品新作| 亚洲激情偷拍一区二区| 漂亮 人妻被中出中文| 男人在床上插女人视频| 人人妻人人澡欧美91精品| 夜色福利视频在线观看| 亚洲中文精品人人免费| 免费在线观看视频啪啪| 91国偷自产一区二区三区精品| 91精品啪在线免费| 欧美性受xx黑人性猛交| 9久在线视频只有精品| 青青社区2国产视频| 亚洲精品久久综合久| 久久三久久三久久三久久| 2022国产综合在线干| 亚洲成人激情视频免费观看了| 少妇与子乱在线观看| 特级无码毛片免费视频播放| 水蜜桃国产一区二区三区| 老熟妇凹凸淫老妇女av在线观看| 视频一区 二区 三区 综合| 国产1区,2区,3区| 亚洲精品乱码久久久本| 激情伦理欧美日韩中文字幕| 欧美黑人巨大性xxxxx猛交| av在线观看网址av| 亚洲护士一区二区三区| 97年大学生大白天操逼| 视频 一区二区在线观看| 视频久久久久久久人妻| 日韩av有码一区二区三区4| 97人妻无码AV碰碰视频| 亚洲黄色av网站免费播放| 91p0rny九色露脸熟女| 国产超码片内射在线| 亚洲国产美女一区二区三区软件| 大鸡巴操娇小玲珑的女孩逼| 日本免费一级黄色录像| 中文字幕在线第一页成人| 日韩a级黄色小视频| 偷拍自拍 中文字幕| 国产精品午夜国产小视频| 精品一区二区三四区| 精品人妻伦一二三区久| 男人和女人激情视频| 97黄网站在线观看| 亚洲国产精品中文字幕网站| 日日日日日日日日夜夜夜夜夜夜| 精品乱子伦一区二区三区免费播| 青草亚洲视频在线观看| 黄色中文字幕在线播放| 中国黄片视频一区91| 国产在线自在拍91国语自产精品| 97精品综合久久在线| 五月婷婷在线观看视频免费| 黑人性生活视频免费看| aⅴ五十路av熟女中出| 亚洲视频在线视频看视频在线| 日本高清在线不卡一区二区| 男生用鸡操女生视频动漫 | 中文字幕亚洲久久久| 韩国爱爱视频中文字幕| 黑人大几巴狂插日本少妇| 蜜臀成人av在线播放| 亚洲av自拍偷拍综合| 成人亚洲精品国产精品| 老有所依在线观看完整版| 超碰公开大香蕉97| 天天做天天干天天舔| 欧美中文字幕一区最新网址| 阿v天堂2014 一区亚洲| 欧美日韩精品永久免费网址| 男人的天堂在线黄色| 免费国产性生活视频| 韩国黄色一级二级三级| 欧美美女人体视频一区| v888av在线观看视频| 一区二区三区视频,福利一区二区| 亚洲av色香蕉一区二区三区| ka0ri在线视频| 免费在线福利小视频| 久久精品久久精品亚洲人| 午夜精品九一唐人麻豆嫩草成人 | 一区二区三区麻豆福利视频| 不卡一区一区三区在线| 美女少妇亚洲精选av| 只有精品亚洲视频在线观看| 人妻久久无码中文成人| 熟女少妇激情五十路| 午夜在线观看岛国av,com| 东京热男人的av天堂| 欧美爆乳肉感大码在线观看| 青青社区2国产视频| 久久久人妻一区二区| 91福利视频免费在线观看| 欧美 亚洲 另类综合| 亚洲精品三级av在线免费观看| 亚洲综合自拍视频一区| 黄工厂精品视频在线观看| 五十路熟女人妻一区二| 国产白袜脚足J棉袜在线观看| 国产一区二区三免费视频| 揄拍成人国产精品免费看视频| 精品人妻伦一二三区久| 女生自摸在线观看一区二区三区 | 91av精品视频在线| 天天干天天插天天谢| 大胸性感美女羞爽操逼毛片| 午夜精品久久久久麻豆影视| 欧美精产国品一二三产品区别大吗| 青春草视频在线免费播放| 91免费放福利在线观看| 天天日天天天天天天天天天天| 亚洲精品欧美日韩在线播放 | 啊慢点鸡巴太大了啊舒服视频| 久久久久久9999久久久久| 黑人巨大精品欧美视频| 80电影天堂网官网| 中文字幕中文字幕人妻| 中文字幕日本人妻中出| 一区二区三区四区视频| 亚洲中文字幕校园春色| 自拍偷拍日韩欧美一区二区| 亚洲av成人网在线观看| 中文字母永久播放1区2区3区| 黄色录像鸡巴插进去| 久久久久国产成人精品亚洲午夜| 中文字幕日韩精品日本| 夜色撩人久久7777| 很黄很污很色的午夜网站在线观看 | 韩国AV无码不卡在线播放| av视屏免费在线播放| 91国内精品久久久久精品一| sspd152中文字幕在线| 久草电影免费在线观看| 51精品视频免费在线观看| 日本在线不卡免费视频| 亚洲1069综合男同| 亚洲高清国产一区二区三区| 亚洲中文字幕校园春色| 亚洲特黄aaaa片| 91亚洲精品干熟女蜜桃频道| heyzo蜜桃熟女人妻| 视频一区 视频二区 视频| 亚洲 国产 成人 在线| 精品一区二区三四区| 岛国av高清在线成人在线| 99久久激情婷婷综合五月天| 内射久久久久综合网| 3D动漫精品啪啪一区二区下载| 色哟哟国产精品入口| 99精品视频在线观看免费播放| 亚洲成人国产av在线| 亚洲av琪琪男人的天堂| 女蜜桃臀紧身瑜伽裤| 九色精品视频在线播放| 日韩欧美中文国产在线| 午夜极品美女福利视频| 中文字幕av第1页中文字幕| 精品国产成人亚洲午夜| 欧亚乱色一区二区三区| 日视频免费在线观看| 欧美精品欧美极品欧美视频| 1区2区3区4区视频在线观看| 亚洲精品色在线观看视频| 中国把吊插入阴蒂的视频| 天天日天天干天天干天天日| 欧美成一区二区三区四区| 夜夜骑夜夜操夜夜奸| 亚洲国产精品美女在线观看 | 成人动漫大肉棒插进去视频| 91国内视频在线观看| 伊人精品福利综合导航| av在线免费中文字幕| 国产黄网站在线观看播放| 国产av国片精品一区二区| 亚洲精品午夜久久久久| 2021最新热播中文字幕| 99热久久极品热亚洲| 黄页网视频在线免费观看| 亚洲人一区二区中文字幕| 黑人巨大的吊bdsm| 青青青激情在线观看视频| 欧美成人一二三在线网| 免费观看国产综合视频| 国产精品国产三级麻豆| 亚洲成人激情视频免费观看了 | 在线免费观看日本伦理| 欧美特级特黄a大片免费| 初美沙希中文字幕在线| 国产大鸡巴大鸡巴操小骚逼小骚逼| 黄工厂精品视频在线观看| 日韩av大胆在线观看| 色呦呦视频在线观看视频| 老司机免费福利视频网| 欧美视频一区免费在线| 天天摸天天日天天操| 夜色福利视频在线观看| 亚洲欧美综合在线探花| 日韩欧美高清免费在线| 亚洲成人熟妇一区二区三区 | 成人18禁网站在线播放| 青青伊人一精品视频| 亚洲国产欧美国产综合在线| 端庄人妻堕落挣扎沉沦| 免费成人va在线观看| 亚洲国产精品中文字幕网站| 精品美女福利在线观看| 日韩av熟妇在线观看| 黑人巨大精品欧美视频| 欧美韩国日本国产亚洲| 人妻3p真实偷拍一二区| 日韩欧美制服诱惑一区在线| 国产普通话插插视频| 天天干天天日天天干天天操| asmr福利视频在线观看| 亚洲 图片 欧美 图片| 大鸡巴后入爆操大屁股美女| 特级无码毛片免费视频播放| 日韩欧美国产精品91| 亚洲高清视频在线不卡| 天美传媒mv视频在线观看| 国产男女视频在线播放| 一区二区三区的久久的蜜桃的视频| 老司机福利精品视频在线| 午夜精品九一唐人麻豆嫩草成人| 黄网十四区丁香社区激情五月天| 毛片av在线免费看| 黑人巨大的吊bdsm| 日日夜夜精品一二三| av男人天堂狠狠干| 日韩亚洲高清在线观看| 国产揄拍高清国内精品对白| 亚洲中文字幕国产日韩| 日韩美在线观看视频黄| 麻豆性色视频在线观看| heyzo蜜桃熟女人妻| 久久久久久久精品成人热| eeuss鲁片一区二区三区| 男生用鸡操女生视频动漫| 另类av十亚洲av| 成人性黑人一级av| 性色av一区二区三区久久久| 91免费观看在线网站| 亚洲第一伊人天堂网| 极品粉嫩小泬白浆20p主播| 国产在线观看免费人成短视频| 久久三久久三久久三久久| 亚洲一区二区三区久久午夜| 亚洲国产欧美一区二区三区…| 久久久久久久久久久久久97| 中文字幕在线永久免费播放| 青青草视频手机免费在线观看| 9国产精品久久久久老师| 粉嫩小穴流水视频在线观看| 午夜国产福利在线观看| 91人妻人人做人人爽在线| 亚洲成人精品女人久久久| 日本a级视频老女人| 日韩精品中文字幕在线| 一区二区三区蜜臀在线| 老司机福利精品免费视频一区二区 | 日本少妇的秘密免费视频| 女人精品内射国产99| 国产视频精品资源网站| 在线观看的黄色免费网站| 美女大bxxxx内射| 成人sm视频在线观看| 99热这里只有国产精品6| 亚洲少妇人妻无码精品| 亚洲2021av天堂| 日本脱亚入欧是指什么| 色综合久久久久久久久中文| 欧美日韩精品永久免费网址| 一色桃子久久精品亚洲| 91 亚洲视频在线观看| 扒开让我视频在线观看| huangse网站在线观看| 免费高清自慰一区二区三区网站 | 喷水视频在线观看这里只有精品| 精品一区二区亚洲欧美| 午夜激情高清在线观看| 桃色视频在线观看一区二区| 日韩熟女av天堂系列| 久久亚洲天堂中文对白| 久久久久久久久久性潮| 亚洲老熟妇日本老妇| 后入美女人妻高清在线| 欧美精品免费aaaaaa| 视频一区二区在线免费播放| 日本真人性生活视频免费看| 人妻激情图片视频小说| 亚洲无线观看国产高清在线| 色哟哟在线网站入口| 日韩av大胆在线观看| 日韩欧美高清免费在线| 午夜精品在线视频一区| 国产日韩欧美美利坚蜜臀懂色| 亚洲推理片免费看网站| 亚洲在线一区二区欧美| 大鸡吧插逼逼视频免费看| 天天操天天爽天天干| xxx日本hd高清| 中文字幕日韩人妻在线三区| 亚洲乱码中文字幕在线| 亚洲另类图片蜜臀av| 888亚洲欧美国产va在线播放| 一级黄片久久久久久久久| 18禁网站一区二区三区四区| 天天干夜夜操天天舔| 亚洲国产精品黑丝美女| 日本午夜爽爽爽爽爽视频在线观看 | 97年大学生大白天操逼| 蜜桃久久久久久久人妻| 又黄又刺激的午夜小视频| 欧美精产国品一二三产品价格| 中文字幕一区二区三区人妻大片| 韩国女主播精品视频网站| 青青青激情在线观看视频| 亚洲成人av一区久久| 欧美另类一区二区视频| 日本一二三中文字幕| 日韩人妻在线视频免费| 含骚鸡巴玩逼逼视频| 一区二区三区毛片国产一区| 一区二区三区久久中文字幕| 亚洲麻豆一区二区三区| 中文字幕一区二 区二三区四区| 成人动漫大肉棒插进去视频| 免费在线观看污污视频网站| 日本在线不卡免费视频| 夜夜骑夜夜操夜夜奸| 女生被男生插的视频网站| 老司机99精品视频在线观看| 噜噜色噜噜噜久色超碰| 亚洲熟妇久久无码精品| 国产成人自拍视频播放| 成人影片高清在线观看| 丝袜肉丝一区二区三区四区在线 | 亚洲欧美综合在线探花| 国产在线91观看免费观看| 青青青青视频在线播放| 99re6热在线精品| 欧美日本国产自视大全| 最新中文字幕乱码在线| 深田咏美亚洲一区二区| 午夜精品久久久久久99热| 丰满少妇人妻xxxxx| 亚洲中文字幕综合小综合| 天干天天天色天天日天天射 | 91极品新人『兔兔』精品新作| 大鸡巴后入爆操大屁股美女| 伊拉克及约旦宣布关闭领空| 1000部国产精品成人观看视频 | 天天干天天操天天扣| 韩国黄色一级二级三级| 91久久精品色伊人6882| 青青青青在线视频免费观看| 亚洲精品午夜aaa久久| 精品亚洲中文字幕av | 99精品免费观看视频| 最新黄色av网站在线观看| 蜜桃色婷婷久久久福利在线| 免费在线观看视频啪啪| 一级黄色av在线观看| 国产精选一区在线播放| 天天干天天搞天天摸| 国产视频网站国产视频| 亚洲国产40页第21页| 中文亚洲欧美日韩无线码| 老司机免费视频网站在线看| 污污小视频91在线观看| 精品美女福利在线观看| 亚洲2021av天堂| 国产精品国产三级国产午| 天天干天天插天天谢| 日本av在线一区二区三区| 中文字幕视频一区二区在线观看| 国产精选一区在线播放| 欧美日本aⅴ免费视频| 日韩特级黄片高清在线看| 摧残蹂躏av一二三区| aaa久久久久久久久| 日本xx片在线观看| 任你操任你干精品在线视频| 丝袜亚洲另类欧美变态| 人妻素人精油按摩中出| 中文字幕在线永久免费播放| 一区二区在线观看少妇| 97瑟瑟超碰在线香蕉| 国产揄拍高清国内精品对白| 中文字幕乱码av资源| 99热色原网这里只有精品| 国产超码片内射在线| 大胆亚洲av日韩av| av天堂中文字幕最新| 欧美女同性恋免费a| 中文字幕中文字幕 亚洲国产| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 久久机热/这里只有| 亚洲熟女综合色一区二区三区四区 | 国产视频一区在线观看| 国产福利小视频免费观看| 亚洲综合另类精品小说| 亚洲丝袜老师诱惑在线观看| 久久精品国产999| 九色porny九色9l自拍视频| 色呦呦视频在线观看视频| 欧美视频综合第一页| 97精品人妻一区二区三区精品 | 男人靠女人的逼视频| 久久永久免费精品人妻专区| 大香蕉大香蕉在线有码 av| 久草福利电影在线观看| 午夜在线观看岛国av,com| 亚洲免费国产在线日韩| 欧洲日韩亚洲一区二区三区| 亚洲精品 日韩电影| 福利午夜视频在线观看| 精品国产高潮中文字幕| 78色精品一区二区三区| 国产高清精品一区二区三区| 国产av福利网址大全| 大香蕉大香蕉大香蕉大香蕉大香蕉| 国产一区自拍黄视频免费观看| 青青草人人妻人人妻| 这里只有精品双飞在线播放| 日本特级片中文字幕| 成人影片高清在线观看| 日韩成人免费电影二区| 亚欧在线视频你懂的| 4个黑人操素人视频网站精品91| 青青在线视频性感少妇和隔壁黑丝| 欧美日韩v中文在线| 777奇米久久精品一区| 天天操天天插天天色| 国产精品久久9999| 国产精品久久久久网| 社区自拍揄拍尻屁你懂的 | 一区二区三区四区视频| 国产九色91在线观看精品| 青青青青视频在线播放| 国产精品久久久久久久久福交| 欧美性受xx黑人性猛交| 欧美aa一级一区三区四区| 中文字幕日本人妻中出| 亚洲激情偷拍一区二区| 日本性感美女三级视频| 97成人免费在线观看网站| 日本少妇高清视频xxxxx| 最新黄色av网站在线观看| 国产va在线观看精品| 国产性生活中老年人视频网站| 中文字幕AV在线免费看 | 福利片区一区二体验区| 人人妻人人澡人人爽人人dvl| 18禁美女黄网站色大片下载| 最新激情中文字幕视频| 国产福利在线视频一区| 亚洲熟女综合色一区二区三区四区| 99热色原网这里只有精品| 国产高清精品极品美女| 天天日夜夜干天天操| 亚洲av成人网在线观看| 亚洲精品国产久久久久久| 中文字幕在线乱码一区二区| 9色在线视频免费观看| 91精品激情五月婷婷在线| 青草久久视频在线观看| 性感美女福利视频网站| 久久精品36亚洲精品束缚| 中文字幕在线乱码一区二区| 午夜毛片不卡免费观看视频| 操日韩美女视频在线免费看| 亚洲人成精品久久久久久久| 午夜国产福利在线观看| 久久久久久9999久久久久| 久久www免费人成一看片| 综合精品久久久久97| 玩弄人妻熟妇性色av少妇| 国产欧美日韩在线观看不卡| 护士小嫩嫩又紧又爽20p| 社区自拍揄拍尻屁你懂的 | 国产无遮挡裸体免费直播视频| 18禁网站一区二区三区四区| 成人福利视频免费在线| av在线资源中文字幕| 91九色国产熟女一区二区| 伊人日日日草夜夜草| 动漫精品视频在线观看| 中字幕人妻熟女人妻a62v网| 午夜激情精品福利视频| 超污视频在线观看污污污 | 直接能看的国产av| 亚洲天堂有码中文字幕视频| 久久热这里这里只有精品| 人人妻人人人操人人人爽| 自拍偷拍 国产资源| 亚洲综合一区二区精品久久| 干逼又爽又黄又免费的视频| 中文字幕高清免费在线人妻| 国产成人精品福利短视频| 超污视频在线观看污污污| 日本韩国在线观看一区二区| 国产福利小视频免费观看| 成人国产激情自拍三区| 国产av国片精品一区二区| 日韩午夜福利精品试看| 亚洲中文字幕人妻一区| 年轻的人妻被夫上司侵犯| 国产精品中文av在线播放 | av大全在线播放免费| 日本人妻精品久久久久久| 在线国产日韩欧美视频| 1000部国产精品成人观看视频| 国产一区自拍黄视频免费观看| 一色桃子久久精品亚洲| av天堂中文免费在线| 久草免费人妻视频在线| 日韩精品啪啪视频一道免费| 美女被肏内射视频网站| 亚洲午夜伦理视频在线| 色秀欧美视频第一页| 国产精品污污污久久| 熟女国产一区亚洲中文字幕| 亚洲欧美色一区二区| 国产麻豆精品人妻av| 人妻少妇精品久久久久久| 免费手机黄页网址大全| 在线免费观看99视频| 欧美老妇精品另类不卡片| 亚洲国产成人av在线一区| 国产片免费观看在线观看| 国产 在线 免费 精品| 午夜成午夜成年片在线观看| brazzers欧熟精品系列| 人妻少妇亚洲一区二区| 国产乱子伦一二三区| 日韩激情文学在线视频| 免费费一级特黄真人片| 天天干天天操天天扣| 加勒比视频在线免费观看| 中文字幕日韩精品日本| 人妻自拍视频中国大陆| 国产精品国产三级国产午| 午夜国产福利在线观看| 精品国产污污免费网站入口自| 天天射夜夜操狠狠干| 亚洲狠狠婷婷综合久久app| 五十路熟女人妻一区二区9933| 国产日韩精品电影7777| 又粗又硬又猛又爽又黄的| 天天干天天操天天扣| 日本在线一区二区不卡视频| 精品久久久久久久久久久a√国产| 欧美精产国品一二三区| 97精品视频在线观看| 欧美精品黑人性xxxx| 11久久久久久久久久久| 国产精品黄页网站视频| 欧美在线一二三视频| 密臀av一区在线观看| 又粗又硬又猛又爽又黄的| 精品久久久久久久久久久a√国产| 亚洲一区二区三区久久受| 福利视频一区二区三区筱慧| 88成人免费av网站| 福利午夜视频在线观看| 91人妻精品久久久久久久网站| 国产高清97在线观看视频| 黄网十四区丁香社区激情五月天| 人妻熟女在线一区二区| 亚洲人人妻一区二区三区| 偷拍自拍亚洲视频在线观看| 中文字幕最新久久久| 欧美久久一区二区伊人| 91精品一区二区三区站长推荐| 蜜桃臀av蜜桃臀av| 女同互舔一区二区三区| 亚洲日产av一区二区在线| 一区二区三区美女毛片| 欧美黑人与人妻精品| 日本人妻少妇18—xx| 亚洲欧美清纯唯美另类| 日本韩国在线观看一区二区| 100%美女蜜桃视频| 亚洲精品亚洲人成在线导航| 美女在线观看日本亚洲一区| 国产精品污污污久久| 不卡日韩av在线观看| 精品乱子伦一区二区三区免费播| 国产高清精品极品美女| 久久久久久久99精品| 欧美一区二区三区在线资源| 在线免费观看黄页视频| av男人天堂狠狠干| 亚洲午夜伦理视频在线| 天天操天天干天天日狠狠插 | 国产日韩精品一二三区久久久| 日本韩国亚洲综合日韩欧美国产 | 伊人开心婷婷国产av| 人妻丝袜av在线播放网址| 成人在线欧美日韩国产| 啊啊啊想要被插进去视频| 人妻最新视频在线免费观看| 国产真实乱子伦a视频| 欧美精品国产综合久久| av线天堂在线观看| 亚洲Av无码国产综合色区| 亚洲第一伊人天堂网| 韩国爱爱视频中文字幕| 成人免费毛片aaaa| 欧洲亚洲欧美日韩综合| 91精品国产高清自在线看香蕉网| av网址国产在线观看| 女警官打开双腿沦为性奴| tube69日本少妇| 非洲黑人一级特黄片| 国产露脸对白在线观看| 亚洲中文字字幕乱码| 亚洲综合乱码一区二区| 国产黑丝高跟鞋视频在线播放| 亚洲熟妇久久无码精品| 亚洲另类图片蜜臀av| 成人国产激情自拍三区| 任我爽精品视频在线播放| 亚洲欧美成人综合视频| 99精品国产aⅴ在线观看| 又粗又硬又猛又爽又黄的| 日韩熟女系列一区二区三区| 欧美久久久久久三级网| 国产精品国产三级麻豆| gay gay男男瑟瑟在线网站| 国产精品久久久久久久久福交 | 日本一区精品视频在线观看| 亚洲成人国产综合一区| 午夜蜜桃一区二区三区| 亚洲超碰97人人做人人爱| 欧美爆乳肉感大码在线观看| 91国偷自产一区二区三区精品| okirakuhuhu在线观看| 男女第一次视频在线观看| 亚洲成人熟妇一区二区三区 | 免费黄高清无码国产| 欧美精品黑人性xxxx| 女警官打开双腿沦为性奴| 亚洲激情av一区二区| 看一级特黄a大片日本片黑人| 精品一区二区三区三区88| 中文字幕午夜免费福利视频| 黄色av网站免费在线| 最近中文字幕国产在线| 成人福利视频免费在线| 亚洲图片欧美校园春色| 9l人妻人人爽人人爽| 99精品免费观看视频| 成人30分钟免费视频| 性欧美激情久久久久久久| 伊人成人综合开心网| 2012中文字幕在线高清| 99久久99久国产黄毛片| 亚洲午夜精品小视频| av完全免费在线观看av| 99热99re在线播放| 久久机热/这里只有| 91超碰青青中文字幕| 哥哥姐姐综合激情小说 | 熟女91pooyn熟女| 啊啊好大好爽啊啊操我啊啊视频 | 天天夜天天日天天日| 天天操天天干天天艹| 扒开腿挺进肉嫩小18禁视频| 五十路熟女av天堂| 日韩中文字幕在线播放第二页 | 国产精品手机在线看片| 9l人妻人人爽人人爽| 欧美专区第八页一区在线播放| 久草视频 久草视频2| 老师让我插进去69AV| 99精品视频之69精品视频| 日本裸体熟妇区二区欧美| 快插进小逼里大鸡吧视频| 日本女人一级免费片| 成人精品在线观看视频| 欧美亚洲自偷自拍 在线| 亚洲成人三级在线播放| 亚洲高清一区二区三区视频在线| 天码人妻一区二区三区在线看| 少妇系列一区二区三区视频| 午夜激情久久不卡一区二区| 日韩欧美国产精品91| 久碰精品少妇中文字幕av| 国产刺激激情美女网站| 日本xx片在线观看| 黄色片黄色片wyaa| 欧美精品欧美极品欧美视频| 午夜在线精品偷拍一区二| 懂色av之国产精品| 天天色天天操天天舔| 在线网站你懂得老司机| 亚洲精品麻豆免费在线观看| 国产麻豆国语对白露脸剧情| 中文字幕1卡1区2区3区| 免费一级黄色av网站| 五月色婷婷综合开心网4438| 亚洲人一区二区中文字幕| 国产 在线 免费 精品| 欧美另类一区二区视频| 制丝袜业一区二区三区| 日本一二三区不卡无| 欧美另类z0z变态| 天天通天天透天天插| 青青色国产视频在线| 人妻久久久精品69系列| 亚洲av一妻不如妾| 91国内精品久久久久精品一| 亚洲美女自偷自拍11页| 日韩成人综艺在线播放| 人妻少妇av在线观看| 中文字幕视频一区二区在线观看| 国产黄网站在线观看播放| 性生活第二下硬不起来| 亚洲欧美精品综合图片小说| 涩爱综合久久五月蜜臀| 亚洲第一伊人天堂网| 免费黄页网站4188| 成年午夜影片国产片| 综合激情网激情五月五月婷婷| yellow在线播放av啊啊啊| 男人的网址你懂的亚洲欧洲av| 一区二区三区久久中文字幕| 97超碰免费在线视频| 男人的网址你懂的亚洲欧洲av| 经典av尤物一区二区| 阴茎插到阴道里面的视频| 午夜精品久久久久久99热| 欧洲国产成人精品91铁牛tv| 久久免看30视频口爆视频| 一级A一级a爰片免费免会员| 中国黄片视频一区91| 亚洲天堂成人在线观看视频网站| 亚洲黄色av网站免费播放| 欧美xxx成人在线| 天天干夜夜操啊啊啊| 日韩剧情片电影在线收看| 玖玖一区二区在线观看| 国产亚洲视频在线二区| 国产亚洲视频在线观看| 国产又粗又猛又爽又黄的视频在线| 人人妻人人爽人人添夜| 欧美在线一二三视频| 中国视频一区二区三区| 在线免费观看国产精品黄色| 五十路熟女人妻一区二区9933| 免费福利av在线一区二区三区| 九九热99视频在线观看97| 亚洲成人av一区久久| 国产女人被做到高潮免费视频| 日本午夜久久女同精女女| 久久精品美女免费视频| 日韩精品激情在线观看| 久久久久久久久久一区二区三区| 九色视频在线观看免费| 2020中文字幕在线播放| eeuss鲁片一区二区三区| 欧洲精品第一页欧洲精品亚洲| 亚洲一级av大片免费观看| 亚洲成人av在线一区二区| 97少妇精品在线观看| 精品一区二区亚洲欧美| 国产女人被做到高潮免费视频| 国产日韩欧美美利坚蜜臀懂色| 把腿张开让我插进去视频| 成年人免费看在线视频| 日本高清撒尿pissing| sspd152中文字幕在线| 欧美地区一二三专区| 精品高跟鞋丝袜一区二区| 女生自摸在线观看一区二区三区| 国产三级片久久久久久久| 91超碰青青中文字幕| 亚洲欧美激情中文字幕| 高清一区二区欧美系列| 亚洲中文字幕综合小综合| 欧美中文字幕一区最新网址| 特级无码毛片免费视频播放| 日韩视频一区二区免费观看| 久精品人妻一区二区三区 | 亚洲天堂有码中文字幕视频| 精品亚洲中文字幕av| 中文字幕在线欧美精品| 午夜大尺度无码福利视频| 欧洲亚洲欧美日韩综合| free性日本少妇| 熟女视频一区,二区,三区| 可以在线观看的av中文字幕| 亚洲成人激情视频免费观看了| 国产一区二区神马久久| av黄色成人在线观看| 精品国产在线手机在线| 中国产一级黄片免费视频播放| www骚国产精品视频| 欧美日本在线视频一区| 天天干天天操天天爽天天摸| huangse网站在线观看| 任你操任你干精品在线视频| 日韩精品中文字幕播放| 亚洲日本一区二区三区| av完全免费在线观看av| 中文字幕高清在线免费播放 | 中文字幕1卡1区2区3区| 国产欧美精品不卡在线| 欧美亚洲中文字幕一区二区三区| 免费无码人妻日韩精品一区二区| 天天插天天色天天日| 3337p日本欧洲大胆色噜噜| 成年人的在线免费视频| 美日韩在线视频免费看| av亚洲中文天堂字幕网| 80电影天堂网官网| 男人操女人的逼免费视频| av无限看熟女人妻另类av| 97少妇精品在线观看| 亚洲av可乐操首页| 2021年国产精品自拍| 亚洲在线一区二区欧美| 揄拍成人国产精品免费看视频| 一区二区三区欧美日韩高清播放| 午夜久久香蕉电影网| 丰满的子国产在线观看| 蜜臀成人av在线播放| 男人天堂av天天操| 91高清成人在线视频| 欧美视频不卡一区四区| 一区二区在线观看少妇| 蜜臀成人av在线播放| 夜夜嗨av蜜臀av| 亚洲狠狠婷婷综合久久app| 欧美视频不卡一区四区| 午夜毛片不卡免费观看视频| 国产自拍在线观看成人| 中文字幕在线欧美精品| 日本性感美女写真视频| 欧美日韩国产一区二区三区三州 | 2020中文字幕在线播放| 漂亮 人妻被中出中文| 91亚洲国产成人精品性色| 肏插流水妹子在线乐播下载 | 蜜臀成人av在线播放| 中出中文字幕在线观看 | 偷拍自拍 中文字幕| av高潮迭起在线观看| 99热99这里精品6国产| 超碰中文字幕免费观看| 精品一区二区三区三区88 | 欧美aa一级一区三区四区| 97人妻总资源视频| 久久丁香花五月天色婷婷| 国产一区二区欧美三区| 一二三区在线观看视频| 日韩精品电影亚洲一区| 91破解版永久免费| 晚上一个人看操B片| 最新国产精品网址在线观看| 天天日天天爽天天干| 天天通天天透天天插| 天天操天天干天天艹| 亚洲欧美福利在线观看| 综合激情网激情五月五月婷婷| 成年人啪啪视频在线观看| av中文字幕福利网| 动漫av网站18禁| 欧美一区二区三区啪啪同性| 久久三久久三久久三久久| 国产高清在线在线视频| 91免费观看国产免费| 午夜精品一区二区三区福利视频| 成人sm视频在线观看| 在线观看黄色成年人网站| 最近中文2019年在线看| av视屏免费在线播放| 农村胖女人操逼视频| av视网站在线观看| 男人操女人的逼免费视频| 国产a级毛久久久久精品| 亚洲国产欧美一区二区三区久久| 欧美偷拍自拍色图片| 国产乱子伦一二三区| 日本一区美女福利视频| 最近的中文字幕在线mv视频| 在线观看国产网站资源| 久久这里只有精品热视频| 一级A一级a爰片免费免会员| 蜜桃视频入口久久久| 中文字幕之无码色多多| 中文亚洲欧美日韩无线码 | 大胆亚洲av日韩av| 人妻3p真实偷拍一二区| 欧美特级特黄a大片免费| 日韩av有码一区二区三区4| 姐姐的朋友2在线观看中文字幕 | 99国内精品永久免费视频| 日本三极片中文字幕| 亚洲日本一区二区三区 | av视屏免费在线播放| 成人精品在线观看视频| 亚洲熟女女同志女同| 欧美成人精品欧美一级黄色| 国产精品国产三级麻豆| 日韩精品啪啪视频一道免费| 日韩不卡中文在线视频网站| 日本性感美女三级视频| 伊人日日日草夜夜草| 国产精品人妻66p| 亚洲成人熟妇一区二区三区| 亚洲人妻30pwc| 人妻在线精品录音叫床| 黄色成人在线中文字幕| 91亚洲精品干熟女蜜桃频道| 中国无遮挡白丝袜二区精品| 9国产精品久久久久老师| 一二三中文乱码亚洲乱码one| 丝袜美腿视频诱惑亚洲无 | 色哟哟国产精品入口| 老司机免费福利视频网| 国产成人综合一区2区| av中文在线天堂精品| 年轻的人妻被夫上司侵犯| 污污小视频91在线观看| 91国内精品自线在拍白富美| 爱有来生高清在线中文字幕| 亚洲综合自拍视频一区| 日本熟妇丰满厨房55| 色哟哟国产精品入口| 亚洲一区久久免费视频| 日本高清在线不卡一区二区| 美女av色播在线播放| 午夜毛片不卡免费观看视频| 97人人妻人人澡人人爽人人精品| 国产视频精品资源网站| 自拍 日韩 欧美激情| 最新黄色av网站在线观看| 欧美视频中文一区二区三区| 五十路老熟女码av| 人人爽亚洲av人人爽av| 视频在线亚洲一区二区| 亚洲欧美清纯唯美另类| 宅男噜噜噜666免费观看| 一区二区三区精品日本| 久久久精品999精品日本| 六月婷婷激情一区二区三区| 国产精品国产精品一区二区| 国产成人精品av网站| 国产97在线视频观看| 最新黄色av网站在线观看| 18禁美女黄网站色大片下载| 在线免费观看靠比视频的网站| 精品视频一区二区三区四区五区| 美女福利写真在线观看视频| 蜜桃臀av蜜桃臀av| 亚洲免费va在线播放| 97人妻人人澡爽人人精品| 国产精品久久综合久久| 国产va在线观看精品| 手机看片福利盒子日韩在线播放| 无码精品一区二区三区人| 午夜精品久久久久久99热| 中文字幕在线免费第一页| 91试看福利一分钟| 欧美viboss性丰满| 人妻少妇一区二区三区蜜桃| 成人福利视频免费在线| 日韩精品中文字幕播放| 美女被肏内射视频网站| 香港三日本三韩国三欧美三级| 美洲精品一二三产区区别| 五十路丰满人妻熟妇| 成人蜜臀午夜久久一区| 午夜91一区二区三区| 青青青国产片免费观看视频| 色婷婷综合激情五月免费观看| 2021国产一区二区| 自拍偷拍日韩欧美亚洲| 超碰公开大香蕉97| 在线视频免费观看网| av中文在线天堂精品| 成人在线欧美日韩国产| 天天摸天天干天天操科普| 日辽宁老肥女在线观看视频| 91极品大一女神正在播放| av大全在线播放免费| 青娱乐极品视频青青草| 久久久久久国产精品| 97国产在线观看高清| 天天射夜夜操综合网| 精品av国产一区二区三区四区| 91破解版永久免费| 蜜桃视频17c在线一区二区| 99热99这里精品6国产| 亚洲精品久久视频婷婷| 亚洲精品久久视频婷婷| 国内精品在线播放第一页| 又粗又硬又猛又爽又黄的| 1000小视频在线| 国产av自拍偷拍盛宴| 日本美女成人在线视频| 偷拍自拍亚洲视频在线观看| 成年女人免费播放视频| 日韩欧美一级精品在线观看| 天天干天天日天天谢综合156| 激情五月婷婷免费视频| 久久机热/这里只有| 天堂资源网av中文字幕| 亚洲天堂第一页中文字幕| 日本a级视频老女人| 一区二区三区久久中文字幕| 国产精品国产三级国产精东| 伊人网中文字幕在线视频| 人妻少妇精品久久久久久| 青青草在观免费国产精品| 国产中文字幕四区在线观看| 午夜精彩视频免费一区| 在线观看成人国产电影| 久久这里有免费精品| 五十路老熟女码av| 国产乱弄免费视频观看| 无忧传媒在线观看视频| 同居了嫂子在线播高清中文| 日本人妻欲求不满中文字幕| 亚洲av自拍偷拍综合| aⅴ五十路av熟女中出| 欧美视频中文一区二区三区| 欧美偷拍自拍色图片| 中文字幕一区二区亚洲一区| 天天操天天插天天色| 2025年人妻中文字幕乱码在线| 91精品国产综合久久久蜜| www日韩a级s片av| 成人精品视频99第一页| 日本三极片视频网站观看| 日韩无码国产精品强奸乱伦| 五月天中文字幕内射| 粉嫩av蜜乳av蜜臀| 中英文字幕av一区| 亚洲精品色在线观看视频| 激情五月婷婷综合色啪| 国产亚洲视频在线二区| 亚洲久久午夜av一区二区| 天天摸天天亲天天舔天天操天天爽| 2021国产一区二区| 国产性生活中老年人视频网站| 一区二区三区久久久91| 97人妻人人澡爽人人精品| 亚洲嫩模一区二区三区| 欧美xxx成人在线| 欧美日韩人妻久久精品高清国产| 四川五十路熟女av| 国产精品人妻66p| 欧美黑人性暴力猛交喷水| 国产一区二区在线欧美| 888欧美视频在线| 特一级特级黄色网片| 中文字幕在线免费第一页| 日韩人妻xxxxx| 97小视频人妻一区二区| 国产精彩福利精品视频| 黄色片黄色片wyaa| 区一区二区三国产中文字幕| 天天摸天天亲天天舔天天操天天爽| 中文字幕av熟女人妻| 亚洲激情,偷拍视频| 护士小嫩嫩又紧又爽20p| 亚洲2021av天堂| 精品视频中文字幕在线播放| 中文字幕 人妻精品| 伊人成人在线综合网| 国产亚洲欧美45p| 91试看福利一分钟| 播放日本一区二区三区电影| 久久久久久97三级| 国产精品久久9999| 青青青青青青青青青青草青青 | 激情五月婷婷免费视频| av日韩在线观看大全| 国产一区二区火爆视频 | 婷婷久久久综合中文字幕| 一区二区三区久久中文字幕| 护士特殊服务久久久久久久| av天堂加勒比在线| 一色桃子久久精品亚洲| 国产成人无码精品久久久电影| 精品av国产一区二区三区四区 | 国产麻豆国语对白露脸剧情| 偷拍美女一区二区三区| 人人妻人人爱人人草| 久久久久久久精品老熟妇| 日韩美女综合中文字幕pp| 国产中文精品在线观看| 啊啊啊视频试看人妻| 国产熟妇人妻ⅹxxxx麻豆| 亚洲中文精品人人免费| 美女张开两腿让男人桶av| 欧美精产国品一二三产品区别大吗| 天堂女人av一区二区| 亚洲中文字幕人妻一区| 日韩无码国产精品强奸乱伦| 熟女妇女老妇一二三区| 久久久久久久亚洲午夜综合福利| 超碰公开大香蕉97| 大香蕉大香蕉大香蕉大香蕉大香蕉 | heyzo蜜桃熟女人妻| av中文在线天堂精品| 欧美韩国日本国产亚洲| 亚洲激情,偷拍视频| 亚洲国产精品黑丝美女| 动漫美女的小穴视频| 欧美一区二区三区高清不卡tv| 午夜影院在线观看视频羞羞羞| 欧美日韩一级黄片免费观看| 男生用鸡操女生视频动漫 | 日韩少妇人妻精品无码专区| 久久久久久cao我的性感人妻| 亚洲一区二区三区久久午夜| 天堂av在线播放免费| 污污小视频91在线观看| 中文字幕亚洲中文字幕| 国产日韩精品电影7777| 硬鸡巴动态操女人逼视频| 真实国模和老外性视频| 91精品综合久久久久3d动漫 | 黄页网视频在线免费观看| 日本在线不卡免费视频| 亚洲综合自拍视频一区| 青草亚洲视频在线观看| 韩国三级aaaaa高清视频| 国产a级毛久久久久精品| 日本av高清免费网站| 成人av亚洲一区二区| 啊啊啊想要被插进去视频| 天天日天天日天天擦| 日本真人性生活视频免费看| 国产美女一区在线观看| japanese日本熟妇另类| 免费在线观看污污视频网站| 夏目彩春在线中文字幕| 不卡精品视频在线观看| 久久久久久99国产精品| 日本少妇的秘密免费视频| 人妻av无码专区久久绿巨人| 搞黄色在线免费观看| 四虎永久在线精品免费区二区| 精品黑人巨大在线一区| 中文字幕在线一区精品| 久久农村老妇乱69系列| 日本黄在免费看视频| 精品亚洲国产中文自在线| 国产精品久久久黄网站| 日本熟妇丰满厨房55| 国产午夜亚洲精品不卡在线观看 | 成人区人妻精品一区二视频| 97青青青手机在线视频| 高潮视频在线快速观看国家快速 | 视频一区二区综合精品| 这里只有精品双飞在线播放| 免费在线看的黄片视频| 91九色porny国产在线| 国产欧美精品免费观看视频| 亚洲丝袜老师诱惑在线观看| 欧美日韩亚洲国产无线码| 免费观看丰满少妇做受| 美洲精品一二三产区区别| 东京热男人的av天堂| 久久久久久cao我的性感人妻| 在线免费观看黄页视频| av破解版在线观看| 高清成人av一区三区| 精品一区二区三区在线观看| 国产乱子伦一二三区| 97色视频在线观看| 少妇人妻100系列| 久草视频首页在线观看 | 青青青青青青青青青国产精品视频| 熟女人妻三十路四十路人妻斩| 欧美一区二区中文字幕电影 | 亚洲一区二区三区久久午夜| 国产精品3p和黑人大战| 韩国黄色一级二级三级| 在线观看成人国产电影| 一区二区熟女人妻视频| 国产精品视频资源在线播放 | 成人av中文字幕一区| 国产一线二线三线的区别在哪| 18禁精品网站久久| 888亚洲欧美国产va在线播放| 天天做天天干天天舔| 国产超码片内射在线| 久久机热/这里只有| 成人av在线资源网站| 污污小视频91在线观看| 黄色视频在线观看高清无码 | 久草视频在线一区二区三区资源站| 亚洲天堂精品久久久| 92福利视频午夜1000看| 99国内小视频在现欢看| 开心 色 六月 婷婷| 国产伦精品一区二区三区竹菊| 超碰中文字幕免费观看| www天堂在线久久| 中文字幕日本人妻中出| 97瑟瑟超碰在线香蕉| 午夜在线观看岛国av,com| 精品久久久久久高潮| 精品欧美一区二区vr在线观看 | 亚洲va国产va欧美精品88| 精品久久久久久久久久久a√国产| 75国产综合在线视频| 天天操天天干天天日狠狠插| av乱码一区二区三区| 免费看国产又粗又猛又爽又黄视频| 大鸡巴操娇小玲珑的女孩逼| 人妻少妇中文有码精品| 男人和女人激情视频| 亚洲国产欧美一区二区三区久久| 成人24小时免费视频| 亚洲欧美另类手机在线| 99精品亚洲av无码国产另类| 亚洲精品三级av在线免费观看| 欧美国品一二三产区区别| 午夜精品福利91av| 99一区二区在线观看| 一区二区三区蜜臀在线| 欧美熟妇一区二区三区仙踪林| 欧美成人猛片aaaaaaa| 国产精品自拍视频大全| 日韩精品中文字幕播放| 女同互舔一区二区三区| 日韩人妻丝袜中文字幕| av日韩在线免费播放| 久久精品在线观看一区二区| av破解版在线观看| 高清成人av一区三区| 老司机免费视频网站在线看| 婷婷久久一区二区字幕网址你懂得| 伊拉克及约旦宣布关闭领空| 亚洲精品国产综合久久久久久久久| av线天堂在线观看| 亚洲综合在线视频可播放| 狍和女人的王色毛片| 亚洲中文精品人人免费| 美女 午夜 在线视频| 1区2区3区不卡视频| 亚洲精品成人网久久久久久小说| 午夜在线精品偷拍一区二| 中文字幕一区二区亚洲一区| 亚洲午夜伦理视频在线| 免费高清自慰一区二区三区网站 | 久久久久久性虐视频| 晚上一个人看操B片| 999热精品视频在线| 国产第一美女一区二区三区四区| 老司机深夜免费福利视频在线观看| 亚洲成人三级在线播放| 直接能看的国产av| 精品久久久久久久久久久久人妻| 免费看美女脱光衣服的视频| 2025年人妻中文字幕乱码在线| 一级黄色片夫妻性生活| 免费男阳茎伸入女阳道视频 | 福利午夜视频在线合集| 亚洲欧美自拍另类图片| 欧美一区二区三区在线资源| 男人天堂av天天操| 人妻最新视频在线免费观看| 18禁网站一区二区三区四区 | 春色激情网欧美成人| 国产精品一区二区三区蜜臀av| 亚洲老熟妇日本老妇| 91中文字幕最新合集| 51国产偷自视频在线播放 | 老师让我插进去69AV| 欧美久久久久久三级网| 天天日天天摸天天爱| 国产va精品免费观看| av中文字幕网址在线| 欧美精品激情在线最新观看视频| 欧美熟妇一区二区三区仙踪林| 久草福利电影在线观看| 青草青永久在线视频18| 中英文字幕av一区| 免费观看污视频网站| av网站色偷偷婷婷网男人的天堂| 中文字幕在线免费第一页| 亚洲另类在线免费观看| 中文字幕日韩人妻在线三区| 天天日夜夜干天天操| 18禁免费av网站| 老司机深夜免费福利视频在线观看| 2020久久躁狠狠躁夜夜躁 | 亚洲综合自拍视频一区| 久久这里只有精品热视频| 欧美精品黑人性xxxx| 久久久久久99国产精品| 久草视频 久草视频2| 婷婷久久久综合中文字幕| 亚洲最大黄 嗯色 操 啊| 久久麻豆亚洲精品av| 超级福利视频在线观看| 亚洲精品久久视频婷婷| 国产 在线 免费 精品| 天天日天天爽天天干| 97香蕉碰碰人妻国产樱花| 亚洲一区二区三区uij| 亚洲欧美久久久久久久久| 国产免费高清视频视频| 91破解版永久免费| 精品久久久久久久久久久久人妻| 熟女国产一区亚洲中文字幕| 国际av大片在线免费观看| 午夜精品一区二区三区更新| 天天操天天爽天天干| 久久久制服丝袜中文字幕| 丝袜肉丝一区二区三区四区在线看| 动漫黑丝美女的鸡巴| 亚洲成人黄色一区二区三区| 女同互舔一区二区三区| 国产精品视频欧美一区二区| 日本韩国免费福利精品| 男生用鸡操女生视频动漫| 欧美香蕉人妻精品一区二区| 国产剧情演绎系列丝袜高跟| 日日日日日日日日夜夜夜夜夜夜| 亚洲成人精品女人久久久| 国产又粗又黄又硬又爽| 日本一道二三区视频久久| 免费观看理论片完整版| 夜色撩人久久7777| 91chinese在线视频| 久久国产精品精品美女| 五十路av熟女松本翔子| 天天草天天色天天干| aⅴ五十路av熟女中出| 黑人借宿ntr人妻的沦陷2| 国产91嫩草久久成人在线视频| 亚洲无码一区在线影院| 国产精品亚洲а∨天堂免| 国产日本欧美亚洲精品视| av黄色成人在线观看| av森泽佳奈在线观看| 国产又粗又硬又大视频| 91快播视频在线观看| 国产高清女主播在线| 91九色porny国产蝌蚪视频| 青青草视频手机免费在线观看| 日韩a级精品一区二区| 18禁美女黄网站色大片下载| 91老师蜜桃臀大屁股| sw137 中文字幕 在线| 97色视频在线观看| 精品一区二区三区欧美| 2022国产综合在线干| 美女日逼视频免费观看| 久草福利电影在线观看| 黄色男人的天堂视频| www久久久久久久久久久| 欧美亚洲牲夜夜综合久久| 欧美精品一二三视频| 天天日夜夜操天天摸| 欧美另类重口味极品在线观看| 国产精品黄片免费在线观看| 久久久麻豆精亚洲av麻花| 日本熟妇喷水xxx| 黄页网视频在线免费观看| 男人插女人视频网站| 日本女大学生的黄色小视频| 亚洲欧美成人综合在线观看| 国产精品3p和黑人大战| 国产综合视频在线看片| 精品首页在线观看视频| 成人亚洲国产综合精品| 人妻无码色噜噜狠狠狠狠色| 国产精品视频男人的天堂| 日韩欧美在线观看不卡一区二区 | 亚洲一级特黄特黄黄色录像片| 国产伊人免费在线播放| 在线观看视频网站麻豆| 北条麻妃高跟丝袜啪啪| 97精品综合久久在线| 青青青视频手机在线观看| 性感美女高潮视频久久久 | 国产1区,2区,3区| 大鸡吧插入女阴道黄色片| 国产精品视频资源在线播放| 日韩美女精品视频在线观看网站| 色综合久久久久久久久中文| 日韩不卡中文在线视频网站| 天天干狠狠干天天操 |