精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Mybatis 中xml和注解映射,so easy啦

開發 前端
MyBatis 的真正強大在于它的語句映射,這是它的魔力所在。由于它的異常強大,映射器的 XML 文件就顯得相對簡單。

[[356792]]

本文轉載自微信公眾號「Java后端技術全棧」,作者田維常。轉載本文請聯系Java后端技術全棧公眾號。  

MyBatis 提供了XML配置和注解配置兩種方式。今天就來搞搞這兩種方式是如何實現的。

MyBatis 的真正強大在于它的語句映射,這是它的魔力所在。由于它的異常強大,映射器的 XML 文件就顯得相對簡單。如果拿它跟具有相同功能的JDBC 代碼進行對比,你會立即發現省掉了將近 95% 的代碼。MyBatis 致力于減少使用成本,讓用戶能更專注于 SQL 代碼。

來自官網。

Mybatis映射九個頂級元素:

  • mapper:映射文件的根節點,只有一個屬性namespace(命名空間),作用如下:
    • 用于區分不同的mapper,全局唯一。
    • 綁定DAO接口,即面向接口編程,當綁定一個接口,就不用寫此接口的實現類,會通過接口的完全限定名找到對應的mapper配置來執行SQL語句,所以,namespace的命名必須要寫接口的完全限定名。
  • cache:配置給定命名空間的緩存。
  • cache-ref:從其他命名空間引用緩存配置。
  • resultMap:用來描述數據庫結果集和對象的對應關系。
  • sql:可以重用的SQL塊,也可以被其他語句引用。通常時存放一些公用性的SQL。
  • insert:映射插入語句。
  • update:更新映射語句。
  • delete:刪除映射語句。
  • select:映射查詢語句。

xml方式

九個頂級映射元素對應標簽:

  1. <mapper namespace="com.tian.mybatis.mapper.UserMapper"
  2.     <resultMap id="" type=""></resultMap> 
  3.     <sql id=""></sql> 
  4.     <cache blocking="" ></cache> 
  5.     <cache-ref namespace=""></cache-ref> 
  6.     <select id="selectUserById"></select
  7.     <insert id="insert" ></insert
  8.     <update id=""></update
  9.     <delete id=""></delete
  10. </mapper> 

select詳解

可以看得出,后面可選項還是蠻多的。下面是官網對每項的解釋。

select使用案例

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE mapper 
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper"
  6.     <select id="selectUserById"  resultType="com.tian.mybatis.entity.User" parameterType="int" > 
  7.         select * from m_user where id = #{id} 
  8.     </select
  9. </mapper> 
  • id必須在這個Mapper中是唯一的,可以被用來引用這條語句 ,這個id必須與只對應的是XxxMapper.java中的方法,必須是一一對應。
  • 返回類型:User類型,resultType:查詢語句返回結果類型的完全限定名或別名。別名使用方式和parameterType是一樣的。
  • 參數:整形,表示查詢語句傳入參數的類型和完全限定名或別名。支持基礎數據類型和復雜數據類型。

#{參數名}:告訴MyBatis生成的PreparedStatement參數,相對于JDBC中,改參數被標識為‘?’。

別名與參數映射類型如下:

返回類型中別名的使用,注意:

如果是我們的entity類,那么resultType是無法使用別名的,只能使用resultMap才可以使用別名。

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE mapper 
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper"
  6.     <resultMap id="User" type="com.tian.mybatis.entity.User"/> 
  7.     <select id="selectUserById"  resultMap="User" parameterType="int" > 
  8.         select * from m_user where id = #{id} 
  9.     </select
  10. </mapper> 

但是如果使用的上面映射表里,也可以直接使用別名。

數據庫里有兩條數據:

UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE mapper 
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper"
  6.     <select id="countUser" resultType="int"
  7.         select count(1) from m_user 
  8.     </select
  9. </mapper> 

UserMapper.java

  1. import com.tian.mybatis.entity.User
  2. public interface UserMapper { 
  3.     int countUser(); 

測試類:

  1. public class MybatisApplication { 
  2.     public static final String URL = "jdbc:mysql://localhost.com:3306/mblog?useUnicode=true"
  3.     public static final String USER = "root"
  4.     public static final String PASSWORD = "123456"
  5.     public static void main(String[] args) { 
  6.         String resource = "mybatis-config.xml"
  7.         InputStream inputStream = null
  8.         SqlSession sqlSession = null
  9.         try { 
  10.             inputStream = Resources.getResourceAsStream(resource); 
  11.             //工廠模式 
  12.             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
  13.             //獲取sql操作會話 
  14.             sqlSession = sqlSessionFactory.openSession(); 
  15.             //構造對象(這里比較特殊,這里構造對象的方式后面會專門分享) 
  16.             UserMapper userMapper =  sqlSession.getMapper(UserMapper.class); 
  17.             //查詢統計 
  18.             System.out.println(userMapper.countUser()); 
  19.         } catch (Exception e) { 
  20.             e.printStackTrace(); 
  21.         } finally { 
  22.             try { 
  23.                 inputStream.close(); 
  24.             } catch (IOException e) { 
  25.                 e.printStackTrace(); 
  26.             } 
  27.             sqlSession.close(); 
  28.         } 
  29.     } 

輸出:2

當數據庫表中的字段名和我們entity中的字段名不一致,怎么處理?

在實際開發中,這種常見是在所難免。我們可以使用下面的這種方式解決。

實體類User

  1. public class User { 
  2.     private Integer id; 
  3.     private String userName; 
  4.     private Integer age;  
  5.     //set get toString方法這里就不貼了 

UserMapper.xml文件內容:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE mapper 
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper"
  6.     <resultMap id="User" type="com.tian.mybatis.entity.User"
  7.         <id column="id" property="id"/> 
  8.         <result column="name" property="userName"/> 
  9.     </resultMap> 
  10.     <select id="selectUserById"  resultMap="User" parameterType="int" > 
  11.         select * from m_user where id = #{id} 
  12.     </select
  13. </mapper> 

  • type:對應的是我們的實體類,全路徑名。
  • id:可以理解為別名。

  • id:唯一標識,此id值用于select元素resultMap屬性的引用。
  • column:對應我們數據庫表中的字段名稱。
  • property:對應我們的實體類的屬性,比如:User中的屬性userName,要和數據庫表m_user中的name對應。
  • result:標識一些簡單屬性,其中column屬性代表數據庫的字段名,property代表查詢出來的字段名映射到實體類的某個屬性。

繼續使用我們前面的測試類進行測試:

  1. UserMapper userMapper =  sqlSession.getMapper(UserMapper.class); 
  2. System.out.println(userMapper.selectUserById(1)); 

輸出:User{id=1, userName='tian', age=22}

注意:實體類的get set 和toString()方法這里給省略, 希望大家在使用的使用,使用快捷鍵很簡單的就搞定了。

上面提到過resultType和resultMap,那么他們兩到底有什么區別呢?

resultType和resultMap 有什么區別?

  • resultType:直接表示返回類型, 包括基本數據類型和復雜數據類型。
  • resultMap:外部resultMap定義的引用,通過對應的外部resultMap的id,表示結果映射到哪個resultMap上,一般用于字段名和屬性名不一致的情況,或者需要做復雜的聯合查詢以便自由控制映射結果。

兩者的關聯

當進行查詢時,查詢出來的每個字段都會放在一個Map里,當查詢元素返回屬性是resultType的時候,會將鍵值對取出賦所指定的屬性。其實MyBatis的每個查詢映射的返回類型都是resultMap,只是當我們使用resultType的時候,會自動把對應的值賦給所指定的對象屬性,當使用resultMap時候,因為map不是很好的表示領域,我們就進一步的轉化為對應的實體對象。resultMap主要作用于復雜的聯合查詢上。

resultMap的自動映射級別:默認級別為PARTIAL,也可以在settings更改值。

注意:resultType和resultMap本質是一樣的,都是Map數據結構,但是二者不能同時存在。

增刪改案例

insert

從這里可以知道,關于增加insert是沒有返回值類型可以讓我們指定的。默認返回int類型。

  1. <insert id="insert" parameterType="com.tian.mybatis.entity.User"
  2.         INSERT INTO m_user(`name`,age) VALUES ( #{userName},#{age}) 
  3. </insert

對應Mapper中的方法

  1. int insert(User user); 

另外的update和delete類似,這里就沒有必要逐一演示了。

注解方式

九個頂級映射元素對應注解:

其他部分注解是配合九個注解進行使用的。

select注解

把本地的UserMapper.xml刪掉,然后改一下mybatis-config.xml,把其中的UserMapper.xml給注釋掉。添加

  1. <mapper class="com.tian.mybatis.mapper.UserMapper"/> 

UserMapper.java添加注解

  1. public interface UserMapper { 
  2.     @Select("select * from m_user where id = #{id}"
  3.     User selectUserById(Integer id); 

再次測試

  1. User user = sqlSession.selectOne("com.tian.mybatis.mapper.UserMapper.selectUserById", 1); 
  2. System.out.println(user); 

輸出:

  1. User{id=1, userName='null', age=22} 

從輸出內容看到,userName為null,這也是因為和數據庫表匯中的字段name不一致導致的,那么如何處理呢?

這么搞,再添加一個注解:

  1. public interface UserMapper { 
  2.    @Select("select * from m_user where id = #{id}"
  3.    @Results( @Result(column = "name",property = "userName")) 
  4.    User selectUserById(Integer id); 

輸出:

  1. User{id=1, userName='tian', age=22} 

這樣也就是在使用注解的時候,處理實體屬性名和數據庫表字段名不一樣的問題的辦法。

insert、update、delete同樣也可以使用注解來搞定了。

@Insert、@Update、@Delete配上相應的SQL語句。

注解和xml是否可以共存?

  1. <update id="updateAuthorIfNecessary"
  2.        update m_user 
  3.        <trim prefix="SET" suffixOverrides=","
  4.            <if test="userName != null and userName != ''"
  5.                `name` = #{userName}, 
  6.            </if> 
  7.            <if test="gender != null and gender != 0"
  8.                gender = #{gender}, 
  9.            </if> 
  10.            <if test="age != null and age != 0"
  11.                age = #{age}, 
  12.            </if> 
  13.        </trim> 
  14.        where id=#{id} 
  15.    </update

同時在UserMapper.java中的方法上添加注解

  1. @Update("update m_user set  `name` = #{userName},gender = #{gender},age = #{age} where id=#{id}"
  2. int updateAuthorIfNecessary(User user); 

再次中子星的時候回報異常的:

  1. nested exception is java.lang.IllegalArgumentException: 
  2. Mapped Statements collection already contains value for com.tian.mybatis.mapper.UserMapper.updateAuthorIfNecessary.  
  3. please check file [D:\workspace\my_code\mybatis\target\classes\mapper\UserMapper.xml] and com/tian/mybatis/mapper/UserMapper.java (best guess) 

大致意思就是說,已經存在了,即就是不能同時使用xml和注解。二者選其一。

xml可以喝注解結合使用,但是得保證同一個方法不能同時存在xml和注解。

建議

簡單的sql處理可以使用注解,復雜的sql使用xml。但是實際工作還得看你待的項目中有沒有對這個進行規范化。

在項目中無非就三種:

1.全部必須使用xml方式。

2.全部必須使用注解方式。

3.可以同時使用xml和注解。

高級映射

association

映射到JavaBean的某個復雜的”數據類型”屬性,僅處理一對一的關聯關系。

  1. <resultMap type="com.tian.mybatis.entity.User" id="userMapRole"
  2.         <id column="id" property="id" /> 
  3.         <result column="name" property="userName" /> 
  4.         <result column="age" property="age" /> 
  5.         <association property="role" javaType="UserRole"
  6.             <id column="id" property="id" /> 
  7.             <result column="roleName" property="roleName" /> 
  8.         </association> 
  9. </resultMap> 

association的屬性節點:

  • property:映射數據庫列的實體對象屬性名。
  • javaType:完整的java類名和限定名。propert所映射的屬性的類型。

子元素

  • id:一般為映射主鍵,可以提高性能。
  • result:
    • column:映射的數據庫的字段名。
    • property:映射的數據列對應的實體對象屬性。

collection

映射到JavaBean的某個復雜的”數據類型”屬性,這個屬性是一個集合列表,處理一對多的關聯關系。

  1. <resultMap type="com.tian.mybatis.entity.User" id="userMapAddress"
  2.         <id column="id" property="id"/> 
  3.         <result column="name" property="userName"/> 
  4.         <collection property="lists" ofType="UserAddress">        
  5.             <id column = "id" property = "id"
  6.             <result column="addressDesc" property="addressDesc"/> 
  7.         </collection> 
  8.     </resultMap> 

ofType:完整的Java類名和限定名。propert所映射的屬性的類型。

其余和association基本一致。

association和collection都具備延遲加載功能。

延遲加載:先從單表查詢,需要時再查關聯表,大大的提高了數據庫性能,因為相對來說單表查詢比多表查詢要快。

xml和注解的關系

上面我們已經講了兩種方式的實現,下面來對比一下,兩種方式的關系:

xml方式

必須有個一個XxxMapper.xml與之對應,方法名對應xml中的id,方法入參和方法出參都必須對應起來,很容易出問題。我們在開發的時候有的是可以使用代碼生成器生成,但是有的是必須自己手寫,有的公司也是要求必須手寫,所以這里需要注意。

注解方式

不需要XxxMapper.xml文件,只需要在對應XxxMapper.java中的方法上加上注解就搞定了,但是這里是有坑的。畢竟把sql放到了我們的Java代碼里了。

優缺點

xml方式: 增加了xml文件,修改麻煩,條件不確定(ifelse判斷),容易出錯,特殊轉義字符比如大于小于 。

注解方式:復雜sql不好用,搜集sql不方便,管理不方便,修改需重新編譯

總結

本文講述了Mybatis的兩種映射方式,以及一些注意點,一些關系和區別。

實體屬性名和數據庫表字段名不一樣的情況下,xml和注解分別是如何處理的。resultType和resultMap的區別。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2022-11-26 00:00:02

2012-09-07 09:41:15

Win 8關機

2012-05-18 14:24:57

fedora 17安裝卸載

2019-12-19 08:56:21

MybatisSQL執行器

2019-07-17 08:41:42

Java補碼反碼

2020-11-04 08:28:11

Mybatis

2023-04-03 15:04:00

RPCPHP語言

2018-09-05 21:07:06

數據管理

2019-03-26 11:36:28

網絡

2010-03-05 13:28:34

SpringObject XML

2019-12-23 10:51:40

Python車票搶票

2022-07-27 08:49:34

接口加密解密

2024-04-16 10:09:42

2021-04-23 10:38:52

Spring BootSpringMVC源碼

2022-05-06 10:42:09

JavaFlowable引擎

2014-09-18 10:27:53

U-Mail郵件系統郵件服務器

2020-04-13 14:00:07

量子計算圍棋AI

2020-08-12 18:11:02

戴爾

2009-06-16 13:27:59

Hibernate x

2022-07-07 08:30:50

類型注解原生JS
點贊
收藏

51CTO技術棧公眾號

成人h动漫免费观看网站| 囯产精品久久久久久| 欧美熟乱15p| 91精品在线麻豆| 国产在线播放观看| 北岛玲一区二区三区| 精品午夜久久福利影院| 性欧美视频videos6一9| 在线观看免费小视频| 欧美国产中文高清| 91国偷自产一区二区三区成为亚洲经典| 亚洲精品中文字幕在线| 男人的天堂a在线| 麻豆精品一区二区三区| 高清欧美性猛交| 情侣偷拍对白清晰饥渴难耐| 露出调教综合另类| 91精品国产综合久久久蜜臀粉嫩| 黄色免费视频大全| 最新黄网在线观看| 日韩电影不卡一区| 欧美精品一级二级三级| 成人性免费视频| 黄网站免费在线播放| 久久久久久9999| 国产精品露出视频| 国产日韩欧美中文字幕| 日韩电影在线观看一区| 国模精品视频一区二区| 国产97免费视频| 欧美xxav| 最好看的2019年中文视频| 久久人人爽人人人人片| 亚洲一区二区电影| 91精品国产色综合久久| 亚洲国产成人va在线观看麻豆| 波多野结衣视频一区二区| 亚洲视频在线一区| 亚洲精品在线观看免费| 国产午夜在线观看| 久久先锋影音av鲁色资源网| 国产精品亚洲综合| 国产 日韩 欧美 精品| 国产一区二区女| 91精品久久久久久久久久入口| 久久这里只有精品9| 首页亚洲欧美制服丝腿| 欧美亚洲国产日韩2020| 日韩男人的天堂| 神马久久影院| 亚洲国产成人爱av在线播放| 国内自拍偷拍视频| 一区二区三区国产好| 日韩精品中文字幕一区二区三区| 亚欧美一区二区三区| 国产一区一区| 欧美成人乱码一区二区三区| 亚洲AV无码久久精品国产一区| 亚洲日本免费电影| 欧美一级片免费看| 日本精品一二三区| 国产成人高清精品免费5388| 亚洲第一页自拍| 少妇激情一区二区三区视频| 欧美激情网址| 国产一区二区动漫| 蜜桃av.com| 午夜国产精品视频免费体验区| 欧美激情xxxx| 午夜精品三级久久久有码| 亚洲欧美日韩在线观看a三区| 欧美中文字幕第一页| 国产又粗又长又硬| 99精品电影| 久久国产精品网站| 日韩美女视频网站| 欧洲乱码伦视频免费| 亚洲天堂av电影| 婷婷国产成人精品视频| 午夜欧美精品| 欧美性视频精品| 国产男人搡女人免费视频| 老色鬼精品视频在线观看播放| 91久久久久久久久久| 好吊视频一区二区三区| 久久精品夜色噜噜亚洲a∨| 一区二区精品免费视频| 色资源在线观看| 久久精品夜色噜噜亚洲aⅴ| 99亚洲精品视频| 欧美亚洲日本精品| 亚洲欧洲综合另类在线| 国产69精品久久久久999小说| 在线亚洲人成| 欧美一卡二卡三卡四卡| 野花社区视频在线观看| 欧美电影一二区| 97久久精品人搡人人玩| 中文字幕在线播出| 成人教育av在线| 亚洲女人毛片| 在线中文字幕播放| 欧美一区二区播放| 九一在线免费观看| 亚洲精品在线二区| 成人在线视频网| 四虎国产精品永远| 不卡的av中国片| 一区二区三区四区视频在线观看 | 国产视频在线一区二区| 中文字幕美女视频| 久久精品一区二区国产| 懂色av一区二区三区在线播放| 大片免费播放在线视频| 午夜精品久久久久| 国产亚洲色婷婷久久| 激情综合网五月| 韩剧1988在线观看免费完整版| 国产精品国产三级国产普通话对白| 日本熟妇毛茸茸丰满| 精品一区在线| 欧美精品videossex性护士| 中文字幕在线观看高清| 久久久欧美精品sm网站| 免费在线观看视频a| 九九九九九九精品任你躁| 在线视频国产日韩| 国产精品一区二区三区四| 懂色av中文字幕一区二区三区| 一区二区三区四区国产| 国产成人免费精品| 亚洲男人天天操| 激情五月色婷婷| 成人视屏免费看| 男人草女人视频| 国产精品一区二区精品视频观看| 中文字幕av一区二区| 国产精品第5页| 91网站黄www| 免费在线激情视频| 清纯唯美亚洲经典中文字幕| 久久久久久成人精品| www.蜜臀av.com| 亚洲乱码精品一二三四区日韩在线| mm131国产精品| 欧美激情国产在线| 成人美女免费网站视频| 日本中文字幕在线视频| 欧美日韩国产电影| 成人免费黄色网| 欧美视频一区二| 国产亚洲色婷婷久久99精品91| 午夜精品免费| 1卡2卡3卡精品视频| 九色porny在线| 欧美一区日本一区韩国一区| www日韩在线| 欧美伦理影视网| 亚洲视频香蕉人妖| 性鲍视频在线观看| 综合久久99| 中文字幕亚洲图片| 羞羞色院91蜜桃| 国产精品热久久久久夜色精品三区| 咪咪色在线视频| 国产精品久久久久久久久久辛辛 | 一区二区三区视频在线观看视频| 欧美性色综合网| 欧美一区二区三区观看| 国产成人综合精品三级| 日本十八禁视频无遮挡| 欧美男gay| 成人日韩在线电影| 91吃瓜在线观看| 亚洲人成电影在线播放| 在线视频免费观看一区| 一区二区在线观看视频| 亚洲调教欧美在线| 免费人成精品欧美精品| 亚洲激情免费视频| 久久婷婷国产| 国产精品视频99| 日韩性xxxx| 日韩欧美国产一区二区| 性少妇xx生活| 国产成人精品免费网站| 日韩中文字幕三区| 99久久精品网| 九九九九精品| 日韩成人免费av| 午夜精品久久久久久久男人的天堂 | 三级黄色录像视频| 成人免费视频免费观看| 婷婷六月综合亚洲| 9久久婷婷国产综合精品性色| 亚洲高清影视| 久久综合九色欧美狠狠| 24小时成人在线视频| 2019中文字幕全在线观看| 日本最黄一级片免费在线| 欧美精品一区二区不卡| 一卡二卡三卡在线观看| 精品久久久久久久久久国产 | 一区二区国产视频| 中文字幕免费在线看线人动作大片| 国产一区二区免费视频| 在线视频日韩一区 | 亚洲精品一区二区口爆| 欧美三电影在线| 日本一区二区免费在线观看| 日韩一区有码在线| 欧美一区二区三区成人精品| 国产精品白丝jk黑袜喷水| 亚洲成人福利在线观看| 国产农村妇女精品一区二区| 日产精品久久久久久久蜜臀| jizzjizz欧美69巨大| 久久精品国产第一区二区三区最新章节 | 亚洲天堂最新地址| 91网页版在线| 四季av综合网站| 国产精品夜夜爽| 天堂av8在线| 青青草国产成人av片免费| 亚欧无线一线二线三线区别| 欧美伊人影院| 最新av在线免费观看| 大色综合视频网站在线播放| 玛丽玛丽电影原版免费观看1977| 大伊香蕉精品在线品播放| 5g影院天天爽成人免费下载| 四虎成人精品一区二区免费网站| 日韩女在线观看| 最新欧美色图| 欧美亚洲日本网站| 日韩电影免费看| 97视频在线观看视频免费视频| 五月花成人网| 欧美激情中文字幕在线| 在线观看小视频| 色中色综合影院手机版在线观看| 精产国品自在线www| 日韩性生活视频| 黄网址在线观看| 久久99久国产精品黄毛片入口| av官网在线播放| 欧美另类xxx| 俺来也官网欧美久久精品| 久久久久久久久久久免费| 啦啦啦中文在线观看日本| 欧美精品高清视频| 在线观看中文字幕码| 欧美影院一区二区三区| 中文字幕人妻精品一区| 欧美色视频一区| 91禁在线观看| 欧美一级理论片| 亚洲国产精品视频在线| 亚洲成人免费在线视频| 污污的视频网站在线观看| 日韩国产中文字幕| 欧美巨乳在线| 中文字幕亚洲自拍| 菠萝菠萝蜜在线观看| 日韩精品一二三四区| 色av男人的天堂免费在线| 亚洲欧美日韩精品久久奇米色影视| 国产在线视频资源| 日韩中文字幕免费视频| 亚洲卡一卡二| 欧美亚洲激情在线| 国产成人精品一区二区三区在线 | 亚洲人吸女人奶水| 欧美成人精品一区二区免费看片 | 亚洲天堂av线| 国产酒店精品激情| 中国特级黄色大片| 久久精品亚洲精品国产欧美| 丁香六月激情综合| 亚洲一区二区av在线| 久久久久日韩精品久久久男男| 四虎精品在永久在线观看| 亚洲欧美一区二区三区久久| 日本wwww色| 懂色中文一区二区在线播放| 成人免费av片| 中文字幕综合网| 91国产丝袜播放在线| 欧美丝袜丝交足nylons| 亚洲精品无码专区| 一区二区欧美日韩视频| 美足av综合网| 国产精品视频午夜| 福利在线一区| 伊人久久大香线蕉午夜av| 影音先锋中文字幕一区| av五月天在线| 本田岬高潮一区二区三区| 人人爽人人爽人人片| 亚洲乱码国产乱码精品精98午夜| 日本午夜视频在线观看| 欧美一区二区久久久| 成人性生交大片免费看午夜 | 午夜在线视频| 97在线视频免费| 豆花视频一区| 色99中文字幕| 国产午夜精品一区二区三区欧美| av中文字幕网址| 久久久亚洲国产美女国产盗摄| 欧美色图一区二区| 欧美日韩aaaaa| 九一在线视频| 98精品国产自产在线观看| 国产不卡精品| 亚洲国产一区二区三区在线播| 国产欧美精品久久| 国产a级片视频| 亚洲男女一区二区三区| 亚洲天堂视频网| 一本久久综合亚洲鲁鲁| 9i看片成人免费高清| 岛国视频一区| 欧美日韩一区二区高清| 亚洲精品免费一区亚洲精品免费精品一区| 亚洲澳门在线| the porn av| 国产偷国产偷精品高清尤物 | 亚洲精品国产一区黑色丝袜| 偷偷要91色婷婷| 日韩在线观看视频一区二区三区 | 欧美精品久久久久性色| 欧美精品成人一区二区三区四区| 成人午夜在线观看视频| 国产91精品在线播放| 乱亲女h秽乱长久久久| 久久黄色片视频| 99这里只有久久精品视频| 动漫精品一区一码二码三码四码| 日韩精品自拍偷拍| 天天色天天射天天综合网| 99porn视频在线| 国产精品色呦| 久艹在线免费观看| 成人免费观看视频| 日韩欧美大片在线观看| 亚洲黄色在线看| aaa在线免费观看| 欧美第一黄色网| 天堂精品久久久久| 8x8ⅹ国产精品一区二区二区| 国产一区久久久| 国模无码国产精品视频| 欧美成人精品福利| cao在线视频| 欧美午夜精品久久久久免费视| 久久中文字幕av| 热久久久久久久久| 一区二区三区日本| 深爱激情五月婷婷| 日韩在线视频网| 四虎国产精品免费久久| 超碰超碰超碰超碰超碰| 成人动漫精品一区二区| 久久黄色精品视频| 中文字幕av一区二区| 日韩一区二区三区精品视频第3页| 成人一级生活片| 26uuu国产在线精品一区二区| 亚洲精品国产欧美在线观看| www国产精品com| 豆花视频一区二区| 日日摸天天爽天天爽视频| 中文字幕一区二区三区不卡| 亚洲国产精品久久久久久久| 91成人精品网站| 日韩综合在线| 久久久久久久人妻无码中文字幕爆| 疯狂欧美牲乱大交777| 成人在线免费公开观看视频| 3d动漫啪啪精品一区二区免费 | 九九热免费精品视频| 亚洲品质自拍视频| 免费人成在线观看网站| 91精品久久久久久久久久另类| 亚洲精品专区| 日韩免费av一区| 亚洲精品aⅴ中文字幕乱码| 国产情侣一区二区三区| 人人干视频在线| 中文字幕一区二| 视频一区二区三区在线看免费看| 91精品久久久久久久久| 亚洲综合99| 538任你躁在线精品视频网站| 亚洲精品网站在线播放gif| 麻豆精品在线| av在线无限看| 香蕉影视欧美成人| 麻豆tv入口在线看|