日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis教程--原始方式和mapper方式开发dao详解

發(fā)布時間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis教程--原始方式和mapper方式开发dao详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

mybatis開發(fā)dao的兩種方式

一、原始的dao開發(fā)方式

所謂的原始的dao的開發(fā)方式,其實就是和hibernate的開發(fā)方式類似的,需要dao的接口和dao的實現(xiàn)類,這個就是原始的開發(fā)方式,而mybatis的開發(fā)方式在后面將介紹。

1.1、創(chuàng)建po類user.java

package com.sihai.mybatis.po;import java.util.Date;/*** @author sihai*/ public class User {private int id;private String username;// 用戶姓名private String sex;// 性別private Date birthday;// 生日private String address;// 地址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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}} com.sihai.mybatis.po;import java.util.Date;/*** @author sihai*/ public class User {private int id;private String username;// 用戶姓名private String sex;// 性別private Date birthday;// 生日private String address;// 地址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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}}


1.2、創(chuàng)建UserMapper.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"> <!-- namespace命名空間,為了對sql語句進行隔離,方便管理 ,mapper開發(fā)dao方式,使用namespace有特殊作用 mapper代理開發(fā)時將namespace指定為mapper接口的全限定名--> <mapper namespace="com.sihai.mybatis.mapper.UserMapper"> <!-- 在mapper.xml文件中配置很多的sql語句,執(zhí)行每個sql語句時,封裝為MappedStatement對象 mapper.xml以statement為單位管理sql語句--><!-- 將用戶查詢條件定義為sql片段建議對單表的查詢條件單獨抽取sql片段,提高公用性注意:不要將where標簽放在sql片段--><sql id="query_user_where"><!-- 如果 userQueryVo中傳入查詢條件,再進行sql拼接--><!-- test中userCustom.username表示從userQueryVo讀取屬性值--><if test="userCustom!=null"><if test="userCustom.username!=null and userCustom.username!=''">and username like '%${userCustom.username}%'</if><if test="userCustom.sex!=null and userCustom.sex!=''">and sex = #{userCustom.sex}</if><!-- 根據(jù)id集合查詢用戶信息 --><!-- 最終拼接的效果:SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND id IN (16,22,25)collection:集合的屬性open:開始循環(huán)拼接的串close:結(jié)束循環(huán)拼接的串item:每次循環(huán)取到的對象separator:每兩次循環(huán)中間拼接的串--><foreach collection="ids" open=" AND id IN ( " close=")" item="id" separator=",">#{id}</foreach><!-- SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND (id = 16 OR id = 22 OR id = 25) <foreach collection="ids" open=" AND ( " close=")" item="id" separator="OR">id = #{id}</foreach>--><!-- 還有很的查詢條件 --></if></sql><!-- 定義resultMap,列名和屬性名映射配置id:mapper.xml中的唯一標識 type:最終要映射的pojo類型--><resultMap id="userListResultMap" type="user" ><!-- 列名id_,username_,birthday_id:要映射結(jié)果集的唯 一標識 ,稱為主鍵column:結(jié)果集的列名property:type指定的哪個屬性中--><id column="id_" property="id"/><!-- result就是普通列的映射配置 --><result column="username_" property="username"/><result column="birthday_" property="birthday"/></resultMap><!-- 根據(jù)id查詢用戶信息 --><!-- id:唯一標識 一個statement#{}:表示 一個占位符,如果#{}中傳入簡單類型的參數(shù),#{}中的名稱隨意parameterType:輸入 參數(shù)的類型,通過#{}接收parameterType輸入 的參數(shù)resultType:輸出結(jié)果 類型,不管返回是多條還是單條,指定單條記錄映射的pojo類型--><select id="findUserById" parameterType="int" resultType="user">SELECT * FROM USER WHERE id= #{id}</select><!-- 根據(jù)用戶名稱查詢用戶信息,可能返回多條${}:表示sql的拼接,通過${}接收參數(shù),將參數(shù)的內(nèi)容不加任何修飾拼接在sql中。--><select id="findUserByName" parameterType="java.lang.String" resultType="com.sihai.mybatis.po.User">select * from user where username like '%${value}%'</select><!-- 自定義查詢條件查詢用戶的信息parameterType:指定包裝類型%${userCustom.username}%:userCustom是userQueryVo中的屬性,通過OGNL獲取屬性的值--><select id="findUserList" parameterType="userQueryVo" resultType="user">select id,username,birthday from user<!-- where標簽相當(dāng) 于where關(guān)鍵字,可以自動去除第一個and --><where><!-- 引用sql片段,如果sql片段和引用處不在同一個mapper必須前邊加namespace --><include refid="query_user_where"></include><!-- 下邊還有很其它的條件 --><!-- <include refid="其它的sql片段"></include> --></where></select><!-- 使用resultMap作結(jié)果映射resultMap:如果引用resultMap的位置和resultMap的定義在同一個mapper.xml,直接使用resultMap的id,如果不在同一個mapper.xml要在resultMap的id前邊加namespace--><select id="findUserListResultMap" parameterType="userQueryVo" resultMap="userListResultMap">select id id_,username username_,birthday birthday_ from user where username like '%${userCustom.username}%'</select><!-- 輸出簡單類型功能:自定義查詢條件,返回查詢記錄個數(shù),通常用于實現(xiàn) 查詢分頁--><select id="findUserCount" parameterType="userQueryVo" resultType="int">select count(*) from user <!-- where標簽相當(dāng) 于where關(guān)鍵字,可以自動去除第一個and --><where><!-- 引用sql片段,如果sql片段和引用處不在同一個mapper必須前邊加namespace --><include refid="query_user_where"></include><!-- 下邊還有很其它的條件 --><!-- <include refid="其它的sql片段"></include> --></where></select><!-- 添加用戶parameterType:輸入 參數(shù)的類型,User對象 包括 username,birthday,sex,address#{}接收pojo數(shù)據(jù),可以使用OGNL解析出pojo的屬性值#{username}表示從parameterType中獲取pojo的屬性值selectKey:用于進行主鍵返回,定義了獲取主鍵值的sqlorder:設(shè)置selectKey中sql執(zhí)行的順序,相對于insert語句來說keyProperty:將主鍵值設(shè)置到哪個屬性resultType:select LAST_INSERT_ID()的結(jié)果 類型--><insert id="insertUser" parameterType="com.sihai.mybatis.po.User"><selectKey keyProperty="id" order="AFTER" resultType="int">select LAST_INSERT_ID()</selectKey>INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})</insert><!-- mysql的uuid生成主鍵 --><!-- <insert id="insertUser" parameterType="com.sihai.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="string">select uuid()</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- oracle在執(zhí)行insert之前執(zhí)行select 序列.nextval() from dual取出序列最大值,將值設(shè)置到user對象 的id屬性--><!-- <insert id="insertUser" parameterType="com.sihai.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="int">select 序列.nextval() from dual</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- 用戶刪除 --><delete id="deleteUser" parameterType="int">delete from user where id=#{id}</delete><!-- 用戶更新 要求:傳入的user對象中包括 id屬性值--><update id="updateUser" parameterType="com.sihai.mybatis.po.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update></mapper>com.sihai.mybatis.mapper.UserMapper"> <!-- 在mapper.xml文件中配置很多的sql語句,執(zhí)行每個sql語句時,封裝為MappedStatement對象 mapper.xml以statement為單位管理sql語句--><!-- 將用戶查詢條件定義為sql片段建議對單表的查詢條件單獨抽取sql片段,提高公用性注意:不要將where標簽放在sql片段--><sql id="query_user_where"><!-- 如果 userQueryVo中傳入查詢條件,再進行sql拼接--><!-- test中userCustom.username表示從userQueryVo讀取屬性值--><if test="userCustom!=null"><if test="userCustom.username!=null and userCustom.username!=''">and username like '%${userCustom.username}%'</if><if test="userCustom.sex!=null and userCustom.sex!=''">and sex = #{userCustom.sex}</if><!-- 根據(jù)id集合查詢用戶信息 --><!-- 最終拼接的效果:SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND id IN (16,22,25)collection:集合的屬性open:開始循環(huán)拼接的串close:結(jié)束循環(huán)拼接的串item:每次循環(huán)取到的對象separator:每兩次循環(huán)中間拼接的串--><foreach collection="ids" open=" AND id IN ( " close=")" item="id" separator=",">#{id}</foreach><!-- SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND (id = 16 OR id = 22 OR id = 25) <foreach collection="ids" open=" AND ( " close=")" item="id" separator="OR">id = #{id}</foreach>--><!-- 還有很的查詢條件 --></if></sql><!-- 定義resultMap,列名和屬性名映射配置id:mapper.xml中的唯一標識 type:最終要映射的pojo類型--><resultMap id="userListResultMap" type="user" ><!-- 列名id_,username_,birthday_id:要映射結(jié)果集的唯 一標識 ,稱為主鍵column:結(jié)果集的列名property:type指定的哪個屬性中--><id column="id_" property="id"/><!-- result就是普通列的映射配置 --><result column="username_" property="username"/><result column="birthday_" property="birthday"/></resultMap><!-- 根據(jù)id查詢用戶信息 --><!-- id:唯一標識 一個statement#{}:表示 一個占位符,如果#{}中傳入簡單類型的參數(shù),#{}中的名稱隨意parameterType:輸入 參數(shù)的類型,通過#{}接收parameterType輸入 的參數(shù)resultType:輸出結(jié)果 類型,不管返回是多條還是單條,指定單條記錄映射的pojo類型--><select id="findUserById" parameterType="int" resultType="user">SELECT * FROM USER WHERE id= #{id}</select><!-- 根據(jù)用戶名稱查詢用戶信息,可能返回多條${}:表示sql的拼接,通過${}接收參數(shù),將參數(shù)的內(nèi)容不加任何修飾拼接在sql中。--><select id="findUserByName" parameterType="java.lang.String" resultType="com.sihai.mybatis.po.User">select * from user where username like '%${value}%'</select><!-- 自定義查詢條件查詢用戶的信息parameterType:指定包裝類型%${userCustom.username}%:userCustom是userQueryVo中的屬性,通過OGNL獲取屬性的值--><select id="findUserList" parameterType="userQueryVo" resultType="user">select id,username,birthday from user<!-- where標簽相當(dāng) 于where關(guān)鍵字,可以自動去除第一個and --><where><!-- 引用sql片段,如果sql片段和引用處不在同一個mapper必須前邊加namespace --><include refid="query_user_where"></include><!-- 下邊還有很其它的條件 --><!-- <include refid="其它的sql片段"></include> --></where></select><!-- 使用resultMap作結(jié)果映射resultMap:如果引用resultMap的位置和resultMap的定義在同一個mapper.xml,直接使用resultMap的id,如果不在同一個mapper.xml要在resultMap的id前邊加namespace--><select id="findUserListResultMap" parameterType="userQueryVo" resultMap="userListResultMap">select id id_,username username_,birthday birthday_ from user where username like '%${userCustom.username}%'</select><!-- 輸出簡單類型功能:自定義查詢條件,返回查詢記錄個數(shù),通常用于實現(xiàn) 查詢分頁--><select id="findUserCount" parameterType="userQueryVo" resultType="int">select count(*) from user <!-- where標簽相當(dāng) 于where關(guān)鍵字,可以自動去除第一個and --><where><!-- 引用sql片段,如果sql片段和引用處不在同一個mapper必須前邊加namespace --><include refid="query_user_where"></include><!-- 下邊還有很其它的條件 --><!-- <include refid="其它的sql片段"></include> --></where></select><!-- 添加用戶parameterType:輸入 參數(shù)的類型,User對象 包括 username,birthday,sex,address#{}接收pojo數(shù)據(jù),可以使用OGNL解析出pojo的屬性值#{username}表示從parameterType中獲取pojo的屬性值selectKey:用于進行主鍵返回,定義了獲取主鍵值的sqlorder:設(shè)置selectKey中sql執(zhí)行的順序,相對于insert語句來說keyProperty:將主鍵值設(shè)置到哪個屬性resultType:select LAST_INSERT_ID()的結(jié)果 類型--><insert id="insertUser" parameterType="com.sihai.mybatis.po.User"><selectKey keyProperty="id" order="AFTER" resultType="int">select LAST_INSERT_ID()</selectKey>INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})</insert><!-- mysql的uuid生成主鍵 --><!-- <insert id="insertUser" parameterType="com.sihai.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="string">select uuid()</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- oracle在執(zhí)行insert之前執(zhí)行select 序列.nextval() from dual取出序列最大值,將值設(shè)置到user對象 的id屬性--><!-- <insert id="insertUser" parameterType="com.sihai.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="int">select 序列.nextval() from dual</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- 用戶刪除 --><delete id="deleteUser" parameterType="int">delete from user where id=#{id}</delete><!-- 用戶更新 要求:傳入的user對象中包括 id屬性值--><update id="updateUser" parameterType="com.sihai.mybatis.po.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update></mapper>

接下來,我們需要創(chuàng)建dao了,因為我們使用的是原始的方式,所以需要有dao和dao的實現(xiàn)類

1.3、創(chuàng)建userDao.java

package com.sihai.mybatis.dao;import java.util.List;import com.sihai.mybatis.po.User;/** * @author sihai*/ public interface UserDao {//根據(jù)id查詢用戶信息public User findUserById(int id) throws Exception;//根據(jù)用戶名稱模糊查詢用戶列表public List<User> findUserByUsername(String username) throws Exception;//插入用戶public void insertUser(User user) throws Exception;} com.sihai.mybatis.dao;import java.util.List;import com.sihai.mybatis.po.User;/** * @author sihai*/ public interface UserDao {//根據(jù)id查詢用戶信息public User findUserById(int id) throws Exception;//根據(jù)用戶名稱模糊查詢用戶列表public List<User> findUserByUsername(String username) throws Exception;//插入用戶public void insertUser(User user) throws Exception;}


1.4、創(chuàng)建userDaoImpl.java

package com.sihai.mybatis.dao;import java.util.List;import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory;import com.sihai.mybatis.po.User;public class UserDaoImpl implements UserDao {private SqlSessionFactory sqlSessionFactory;// 將SqlSessionFactory注入public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}@Overridepublic User findUserById(int id) throws Exception {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 根據(jù)id查詢用戶信息User user = sqlSession.selectOne("test.findUserById", id);sqlSession.close();return user;}@Overridepublic List<User> findUserByUsername(String username) throws Exception {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();List<User> list = sqlSession.selectList("test.findUserByName", username);sqlSession.close();return list;}@Overridepublic void insertUser(User user) throws Exception {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();sqlSession.insert("test.insertUser", user);sqlSession.commit();sqlSession.close();}} com.sihai.mybatis.dao;import java.util.List;import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory;import com.sihai.mybatis.po.User;public class UserDaoImpl implements UserDao {private SqlSessionFactory sqlSessionFactory;// 將SqlSessionFactory注入public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}@Overridepublic User findUserById(int id) throws Exception {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 根據(jù)id查詢用戶信息User user = sqlSession.selectOne("test.findUserById", id);sqlSession.close();return user;}@Overridepublic List<User> findUserByUsername(String username) throws Exception {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();List<User> list = sqlSession.selectList("test.findUserByName", username);sqlSession.close();return list;}@Overridepublic void insertUser(User user) throws Exception {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();sqlSession.insert("test.insertUser", user);sqlSession.commit();sqlSession.close();}}


至此,我們就已經(jīng)實現(xiàn)了原始的dao的開發(fā)的方式,看看是不是和hibernate十分的相似呢,都是需要一個配置文件來映射數(shù)據(jù)庫的。接下來,我將介紹一下

mapper代理方式來實現(xiàn)dao的編寫。

二、mapper代理方式

?? mapper代理方式這是在mybatis中特有的一種方式,就是只要符合他的編碼規(guī)范,這樣你就可以你需要按照他的編碼規(guī)范編寫dao接口就行,不需要編寫dao的實現(xiàn)類,這樣是不是很爽。

?? 說明一點,我們還是使用上面的user.java和userMapper.xml來講解。

?? 我們還是先把代碼亮出來把,然后再來介紹需要符合的編碼規(guī)范。

2.1、創(chuàng)建UserMapper.java

?? mapper類的命名一般是用 po類名+Mapper 命名。

package com.sihai.mybatis.mapper;import java.util.List;import com.sihai.mybatis.po.User; import com.sihai.mybatis.po.UserQueryVo;/*** @author sihai*/ public interface UserMapper {//根據(jù)用戶id查詢用戶信息public User findUserById(int id) throws Exception;//根據(jù)用戶名稱 查詢用戶信息public List<User> findUserByName(String username) throws Exception;//自定義查詢條件查詢用戶信息public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;//查詢用戶,使用resultMap進行映射public List<User> findUserListResultMap(UserQueryVo userQueryVo)throws Exception;//查詢用戶,返回記錄個數(shù)public int findUserCount(UserQueryVo userQueryVo) throws Exception;//插入用戶public void insertUser(User user)throws Exception;//刪除用戶public void deleteUser(int id) throws Exception;//修改用戶public void updateUser(User user) throws Exception;} com.sihai.mybatis.mapper;import java.util.List;import com.sihai.mybatis.po.User; import com.sihai.mybatis.po.UserQueryVo;/*** @author sihai*/ public interface UserMapper {//根據(jù)用戶id查詢用戶信息public User findUserById(int id) throws Exception;//根據(jù)用戶名稱 查詢用戶信息public List<User> findUserByName(String username) throws Exception;//自定義查詢條件查詢用戶信息public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;//查詢用戶,使用resultMap進行映射public List<User> findUserListResultMap(UserQueryVo userQueryVo)throws Exception;//查詢用戶,返回記錄個數(shù)public int findUserCount(UserQueryVo userQueryVo) throws Exception;//插入用戶public void insertUser(User user)throws Exception;//刪除用戶public void deleteUser(int id) throws Exception;//修改用戶public void updateUser(User user) throws Exception;}


對比上面的UserMapper.xml和UserMapper.java不難發(fā)現(xiàn),我們需要符合以下的一些規(guī)范。

2.2、mapper代理方式的編碼規(guī)范

1、dao中的方法的返回值和mapper配置文件中的resultType保持一致

2、dao中的方法的方法名和mapper配置文件中的id保持一致

3、dao中的方法的參數(shù)和mapper配置文件中的parameterType保持一致

4、mapper.xml中namespace是mapper接口的全限定名

總結(jié)

以上是生活随笔為你收集整理的mybatis教程--原始方式和mapper方式开发dao详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天燥日日燥 | 欧美第一页浮力影院 | 日韩视频一区二区三区 | 99re这里只有精品在线 | 9色在线 | 永久免费网站直接看 | 国产三级国产精品国产国在线观看 | 福利视频在线导航 | 日韩欧美第一页 | 成人一区av | 亚洲色图欧美视频 | 欧美一级看片 | 欧美在线一二 | 国产区一区二 | 国产高清一区二区三区四区 | 伊人av综合网 | 午夜成人在线视频 | 日本黄色免费观看 | 91精品国产欧美一区二区 | 日本美女黄网站 | 91精品国产综合久 | 国产又色又爽又黄 | 久久久久久久黄色片 | 成人免费看类便视频 | 中国美女囗交视频 | 素人一区二区 | 欧美激情校园春色 | 原创真实夫妻啪啪av | 天天射天天 | 免费观看亚洲视频 | 国产精品人人 | 欧美激情成人在线 | 亚洲av综合色区无码另类小说 | av影片在线| 绿色地狱在线观看 | 成人一级黄色片 | 222aaa| 51福利视频 | 免费成人深夜夜视频 | a级一级黄色片 | 日本无翼乌邪恶大全彩h | 猎艳山村丰满少妇 | 精品中文字幕视频 | 偷偷操不一样的久久 | 久久久久久久久免费看无码 | 欧美日韩国内 | 亚洲人人精品 | 久久123 | 美女极度色诱图片www视频 | 极品三级 | 成人深夜福利在线观看 | 中文字幕精品一区 | 亚洲石原莉奈一区二区在线观看 | 懂色av懂色av粉嫩av分享吧 | 日韩av手机在线 | 欧美日韩成人一区二区在线观看 | 天美乌鸦星空mv | 黄色一级大片免费版 | 色网站在线播放 | 欧美日韩国产电影 | 超碰997| 在线资源站 | 亚洲精品喷潮一区二区三区 | 天堂久久一区 | 少妇在军营h文高辣 | 青青草视频播放器 | 精彩视频一区二区 | 国产又粗又猛又爽69xx | 97视频在线免费 | 午夜免费看视频 | 99久久精品无码一区二区毛片 | jizzjizz亚洲| 色老板最新地址 | 日韩va亚洲va欧美va久久 | 国产成人精品一区二区三区四区 | 亚洲乱码国产乱码精品精软件 | 欧美人与禽zoz0性3d | 中文字幕精品在线观看 | 91大神福利视频 | 色婷婷av777 麻豆传媒网站 | 欧美一级片在线 | 伊人论坛| 自拍偷拍中文字幕 | 日日噜噜噜夜夜爽爽狠狠 | 91九色成人 | 亚洲精品久 | 中文字幕精品视频在线观看 | 午夜影视大全 | 国产精品h| 九一国产在线观看 | 美女三级黄色 | 国产传媒在线观看 | 国产一级特黄毛片 | 欧美日韩不卡视频 | 99精品乱码国产在线观看 | 国产精品无码一区二区无人区多人 | 欧美精品hd | 中国人与拘一级毛片 | 日本肉体xxxx裸体137大胆图 |