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

虛擬化KVM常用命令匯總

開發
今天這篇文章,我把 MyBatis 從基礎到高級的 25 個實用配置和 SQL 映射案例一次性講透,每個案例都配上真實業務場景的代碼示例,看完讓你對 MyBatis 的使用豁然開朗,開發效率直接翻倍!

還在為 MyBatis 的復雜配置頭疼?SQL 映射總是寫得亂七八糟?分頁查詢、動態 SQL、關聯查詢這些場景總是搞不定?別慌!今天這篇文章,我把 MyBatis 從基礎到高級的 25 個實用配置和 SQL 映射案例一次性講透,每個案例都配上真實業務場景的代碼示例,看完讓你對 MyBatis 的使用豁然開朗,開發效率直接翻倍!

一、基礎配置:搭建 MyBatis 核心環境

1. 核心配置文件 mybatis-config.xml 基礎結構

MyBatis 的全局配置文件,包含數據源、別名、Mapper 注冊等核心配置:

<?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>

   <!-- 環境配置:可配置多個環境,默認使用development -->

   <environments default="development">

       <environment id="development">

           <!-- 事務管理器:JDBC 事務管理 -->

           <transactionManager type="JDBC"/>

           <!-- 數據源:POOLED 表示使用連接池 -->

           <dataSource type="POOLED">

               <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/>

               <property name="username" value="root"/>

               <property name="password" value="123456"/>

           </dataSource>

       </environment>

   </environments>

   <!-- 注冊 Mapper 文件 -->

   <mappers>

       <mapper resource="mapper/UserMapper.xml"/>

       <mapper class="com.example.mapper.OrderMapper"/> <!-- 接口映射 -->

   </mappers>

</configuration>

關鍵說明:POOLED 數據源會緩存數據庫連接,避免頻繁創建連接的性能損耗,生產環境必用。

2. 映射文件 Mapper.xml 基礎結構

定義 SQL 語句和結果映射的核心文件,與 Mapper 接口對應:

<?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 必須與 Mapper 接口全類名一致 -->


<mapper namespace="com.example.mapper.UserMapper">


   <!-- 根據 ID 查詢用戶 -->


   <select id="getUserById" parameterType="Long" resultType="com.example.pojo.User">


       SELECT id, username, age FROM user WHERE id = #{id}


   </select>


</mapper>

核心規則:namespace 必須與 Mapper 接口的全類名一致,id 必須與接口方法名一致,參數和返回值類型要匹配。

3. 接口綁定:無需實現類直接調用

MyBatis 最核心的特性之一,通過接口與 XML 映射文件綁定,直接調用接口方法執行 SQL:

// Mapper 接口

public interface UserMapper {


   User getUserById(Long id);


}


// 調用方式

SqlSession sqlSession = MyBatisUtils.getSqlSession();


UserMapper userMapper = sqlSession.getMapper(UserMapper.class);


User user = userMapper.getUserById(1L); // 直接調用接口方法

優勢:告別傳統的 DAO 實現類,代碼量減少 50%,專注于 SQL 編寫。

二、SQL 映射基礎:CRUD 操作實戰

4. 新增用戶并返回自增主鍵

插入數據后需要獲取自動生成的主鍵(如 ID),用 useGeneratedKeys 和 keyProperty 配置:

<!-- 新增用戶并返回自增 ID -->


<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">

   INSERT INTO user (username, age) VALUES (#{username}, #{age})


</insert>
// 調用后 user.getId() 即可獲取自增主鍵

User user = new User();


user.setUsername("張三");


user.setAge(25);


userMapper.insertUser(user);


System.out.println("新增用戶 ID:" + user.getId()); // 輸出插入后的 ID

5. 根據 ID 更新用戶信息

使用 set 標簽處理動態更新,自動忽略空值字段:

<!-- 更新用戶信息(只更新非空字段) -->


<update id="updateUser">

   UPDATE user


   <set>

       <if test="username != null">username = #{username},</if>

       <if test="age != null">age = #{age}</if>

   </set>

   WHERE id = #{id}


</update>

優勢:如果 username 為 null,會自動忽略該字段,避免將字段更新為 null。

6. 根據 ID 刪除用戶

簡單的刪除操作,注意參數傳遞方式:

<!-- 根據 ID 刪除用戶 -->


<delete id="deleteUserById" parameterType="Long">

   DELETE FROM user WHERE id = #{id}


</delete>
userMapper.deleteUserById(1L);


sqlSession.commit(); // 增刪改必須提交事務

7. 批量刪除用戶(傳入 ID 列表)

用 foreach 標簽處理批量刪除,遍歷集合生成 SQL:

<!-- 批量刪除用戶 -->


<delete id="batchDelete">

   DELETE FROM user WHERE id IN


   <foreach collection="list" item="id" open="(" separator="," close=")">

       #{id}


   </foreach>

</delete>
List<Long> ids = Arrays.asList(1L, 2L, 3L);


userMapper.batchDelete(ids); // 一次刪除多個用戶

foreach 參數說明:

  • collection:集合參數名稱(list、array 或自定義名稱)
  • item:遍歷的元素變量名
  • open/close:包裹整個集合的符號(如 ( 和 ))
  • separator:元素之間的分隔符(如 ,)

三、參數處理:多種參數傳遞方式

8. 單個參數傳遞

直接使用 #{參數名} 接收,參數名可任意(建議與方法參數名一致):

<!-- 單個參數:根據用戶名查詢 -->


<select id="getUserByUsername" resultType="User">

   SELECT id, username, age FROM user WHERE username = #{username}


</select>
User user = userMapper.getUserByUsername("張三");

9. 多個參數傳遞(@Param 注解)

方法有多個參數時,用 @Param 注解指定參數名稱,避免參數混淆:

// 接口方法(多個參數用 @Param 注解)

User getUserByUsernameAndAge(@Param("username") String username, @Param("age") Integer age);
<!-- 接收多個參數 -->


<select id="getUserByUsernameAndAge" resultType="User">

   SELECT id, username, age FROM user


   WHERE username = #{username} AND age = #{age}


</select>

10. 傳遞 JavaBean 參數

直接傳遞實體類對象,用 #{屬性名} 接收參數:

// 傳遞 User 對象作為參數

List<User> getUsersByCondition(User user);
<!-- 使用 JavaBean 屬性作為參數 -->


<select id="getUsersByCondition" resultType="User">

   SELECT id, username, age FROM user


   WHERE 1=1


   <if test="username != null">AND username LIKE CONCAT('%', #{username}, '%')</if>

   <if test="age != null">AND age = #{age}</if>

</select>

11. 傳遞 Map 參數

靈活傳遞多個零散參數,用 #{key} 接收 Map 中的鍵值對:

// 傳遞 Map 作為參數

List<User> getUsersByMap(Map<String, Object> params);
<!-- 使用 Map 的 key 作為參數 -->


<select id="getUsersByMap" resultType="User">

   SELECT id, username, age FROM user


   WHERE username = #{name} AND age > #{minAge}


</select>
// 調用方式

Map<String, Object> params = new HashMap<>();


params.put("name", "張三");


params.put("minAge", 18);


List<User> users = userMapper.getUsersByMap(params);

四、動態 SQL:靈活處理條件查詢

12. if + where 標簽:動態條件查詢

where 標簽會自動處理多余的 AND/OR,避免 SQL 語法錯誤:

<!-- 動態條件查詢(自動處理 AND) -->


<select id="getUserList" resultType="User">

   SELECT id, username, age FROM user


   <where>

       <if test="username != null">AND username LIKE #{username}</if>

       <if test="age != null">AND age = #{age}</if>

   </where>

</select>

對比傳統 SQL:無需手動拼接 WHERE 1=1,where 標簽會智能判斷是否添加 WHERE 關鍵字,多余的 AND 會自動刪除。

13. choose + when + otherwise:多條件分支判斷

類似 Java 中的 if-else,只執行第一個滿足條件的分支:

<!-- 多條件分支查詢 -->


<select id="getUserByCondition" resultType="User">

   SELECT id, username, age FROM user


   WHERE 1=1


   <choose>

       <when test="id != null">AND id = #{id}</when> <!-- 優先按 ID 查詢 -->

       <when test="username != null">AND username = #{username}</when> <!-- 其次按用戶名查詢 -->

       <otherwise>AND age > 18</otherwise> <!-- 都不滿足時的默認條件 -->

   </choose>

</select>

14. foreach 批量插入

一次性插入多條數據,比循環單條插入效率提升 10 倍:

<!-- 批量插入用戶 -->


<insert id="batchInsert">

   INSERT INTO user (username, age) VALUES


   <foreach collection="list" item="user" separator=",">

       (#{user.username}, #{user.age})


   </foreach>

</insert>
List<User> users = Arrays.asList(


   new User("張三", 20),


   new User("李四", 22)


);


userMapper.batchInsert(users); // 一次插入多條數據

五、結果映射:解決字段與屬性不一致問題

15. resultMap:自定義字段與屬性映射

當數據庫字段與 Java 實體類屬性名稱不一致時,用 resultMap 手動映射:

<!-- 自定義結果映射(解決字段與屬性名不一致) -->


<resultMap id="userResultMap" type="User">

   <id property="userId" column="id"/> <!-- 主鍵映射 -->

   <result property="userName" column="username"/> <!-- 普通字段映射 -->

   <result property="userAge" column="age"/>

</resultMap>

<select id="getUserById" resultMap="userResultMap">

   SELECT id, username, age FROM user WHERE id = #{id}


</select>
// 實體類屬性與數據庫字段不同

public class User {


   private Long userId; // 對應數據庫 id

   private String userName; // 對應數據庫 username

   private Integer userAge; // 對應數據庫 age

   // getter/setter

}

16. 一對一關聯查詢(如訂單關聯用戶)

查詢訂單時同時關聯查詢用戶信息,用 association 標簽配置:

<!-- 訂單關聯查詢用戶(一對一) -->


<resultMap id="orderResultMap" type="Order">

   <id property="id" column="order_id"/>

   <result property="orderNo" column="order_no"/>

   <!-- 關聯用戶信息 -->

   <association property="user" javaType="User">

       <id property="id" column="user_id"/>

       <result property="username" column="username"/>

   </association>

</resultMap>

<select id="getOrderById" resultMap="orderResultMap">

   SELECT o.id AS order_id, o.order_no, u.id AS user_id, u.username


   FROM order o


   LEFT JOIN user u ON o.user_id = u.id


   WHERE o.id = #{id}


</select>
// 訂單實體類包含用戶對象

public class Order {


   private Long id;


   private String orderNo;


   private User user; // 關聯的用戶信息

   // getter/setter

}

17. 一對多關聯查詢(如用戶關聯訂單列表)

查詢用戶時同時查詢其所有訂單,用 collection 標簽配置:

<!-- 用戶關聯查詢訂單列表(一對多) -->


<resultMap id="userOrderResultMap" type="User">

   <id property="id" column="user_id"/>

   <result property="username" column="username"/>

   <!-- 關聯訂單列表 -->

   <collection property="orders" ofType="Order">

       <id property="id" column="order_id"/>

       <result property="orderNo" column="order_no"/>

   </collection>

</resultMap>

<select id="getUserWithOrders" resultMap="userOrderResultMap">

   SELECT u.id AS user_id, u.username, o.id AS order_id, o.order_no


   FROM user u


   LEFT JOIN order o ON u.id = o.user_id


   WHERE u.id = #{id}


</select>
// 用戶實體類包含訂單列表

public class User {


   private Long id;


   private String username;


   private List<Order> orders; // 關聯的訂單列表

   // getter/setter

}

六、高級配置:提升性能與靈活性

18. 別名配置:簡化類名書寫

在全局配置文件中定義別名,XML 映射文件中直接使用短名稱,避免寫全類名:

<!-- mybatis-config.xml 中配置別名 -->


<typeAliases>

   <typeAlias type="com.example.pojo.User" alias="User"/> <!-- 單個類別名 -->

   <package name="com.example.pojo"/> <!-- 包下所有類自動取首字母小寫別名 -->

</typeAliases>
<!-- 直接使用別名 -->


<select id="getUserById" resultType="User"> <!-- 無需寫全類名 -->

   SELECT id, username FROM user WHERE id = #{id}


</select>

19. 分頁查詢:使用 PageHelper 插件

MyBatis 本身不支持物理分頁,集成 PageHelper 插件實現高效分頁:

<!-- pom.xml 引入依賴 -->


<dependency>

   <groupId>com.github.pagehelper</groupId>

   <artifactId>pagehelper-spring-boot-starter</artifactId>

   <version>1.4.6</version>

</dependency>
// 分頁查詢(PageHelper 自動攔截 SQL 添加分頁條件)

PageHelper.startPage(1, 10); // 第 1 頁,每頁 10 條

List<User> userList = userMapper.getUserList();


Page<User> page = (Page<User>) userList;


System.out.println("總條數:" + page.getTotal());


System.out.println("總頁數:" + page.getPages());

20. 緩存配置:一級緩存與二級緩存

MyBatis 自帶緩存機制,減少數據庫查詢次數:

  • 一級緩存:默認開啟,SqlSession 級別的緩存,同一 SqlSession 內查詢相同數據會命中緩存。
  • 二級緩存:Mapper 級別的緩存,多個 SqlSession 共享,需手動開啟。
<!-- 在 Mapper.xml 中開啟二級緩存 -->


<cache eviction="LRU" flushInterval="60000" size="1024" readOnly="true"/>

<!-- 禁用某個方法的緩存 -->


<select id="getUserById" useCache="false">

   SELECT id, username FROM user WHERE id = #{id}


</select>

注意:二級緩存適合查詢頻繁、修改較少的數據,且實體類需實現 Serializable 接口。

21. 類型轉換器:處理特殊類型

自定義類型轉換器,解決數據庫類型與 Java 類型不匹配問題(如數據庫 VARCHAR 存儲 JSON 字符串,轉換為 Java 對象):

// 自定義類型轉換器

public class JsonTypeHandler<T> extends BaseTypeHandler<T> {


   private Class<T> type;


   // 實現 getResult、setParameter 等方法,完成 JSON 與對象的轉換

}
<!-- 配置類型轉換器 -->


<typeHandlers>

   <typeHandler handler="com.example.handler.JsonTypeHandler" javaType="com.example.pojo.Info"/>

</typeHandlers>

<!-- 在 SQL 映射中使用 -->


<resultMap id="userResultMap" type="User">

   <result property="info" column="info" typeHandler="com.example.handler.JsonTypeHandler"/>

</resultMap>

七、實戰技巧:避坑與性能優化

22. #{} 與 ${} 的區別:防止 SQL 注入

#{} 會預編譯 SQL(參數用?占位),${} 直接拼接 SQL(有注入風險):

<!-- 安全:#{} 預編譯,參數作為值傳入 -->


SELECT * FROM user WHERE username = #{username}


<!-- 危險:${} 直接拼接,可能導致 SQL 注入 -->


SELECT * FROM user WHERE username = '${username}'


<!-- 如果 username 為 '張三' OR '1'='1,會查詢所有用戶 -->

使用原則:優先用 #{},只有在動態拼接表名、排序字段時才用 ${},且必須嚴格校驗參數。

23. 批量更新:減少 SQL 執行次數

通過 foreach 拼接批量更新語句,比循環單條更新效率提升 10 倍:

<!-- 批量更新(MySQL 支持,需開啟 allowMultiQueries=true) -->


<update id="batchUpdate">

   <foreach collection="list" item="user" separator=";">

       UPDATE user SET username = #{user.username} WHERE id = #{user.id}


   </foreach>

</update>

注意:MySQL 需在連接 URL 中添加 allowMultiQueries=true 才能支持批量更新。

24. 懶加載:按需加載關聯數據

關聯查詢時默認不加載關聯數據,用到時才查詢,減少不必要的 SQL 執行:

<!-- 全局配置開啟懶加載 -->


<settings>

   <setting name="lazyLoadingEnabled" value="true"/>

   <setting name="aggressiveLazyLoading" value="false"/>

</settings>

<!-- 一對一懶加載 -->


<association property="user" javaType="User" select="getUserById" column="user_id"/>
// 調用時只查詢訂單,訪問 user 屬性時才查詢用戶

Order order = orderMapper.getOrderById(1L); // 只執行訂單查詢 SQL

User user = order.getUser(); // 此時才執行用戶查詢 SQL

25. SQL 片段:復用重復 SQL

將重復的 SQL 片段抽取為 <sql> 標簽,用 <include> 引用,減少代碼冗余:

<!-- 定義 SQL 片段 -->


<sql id="userColumns">id, username, age</sql>

<!-- 引用 SQL 片段 -->


<select id="getUserById" resultType="User">

   SELECT <include refid="userColumns"/> FROM user WHERE id = #{id}


</select>

<select id="getUserList" resultType="User">

   SELECT <include refid="userColumns"/> FROM user


</select>

為什么掌握這些能讓你少加班?

MyBatis 是 Java 后端開發的必備技能,但 80% 的開發者都在重復踩坑:SQL 注入、關聯查詢混亂、動態 SQL 拼接錯誤、性能低下…… 這 25 個案例覆蓋了 90% 的實際開發場景,從基礎配置到高級優化,讓你:

  • 寫出更安全的 SQL(避免注入)
  • 減少 50% 的代碼量(接口綁定 + 動態 SQL)
  • 提升查詢性能(緩存 + 批量操作 + 懶加載)
責任編輯:趙寧寧 來源: 編程江湖
相關推薦

2025-07-17 12:26:46

LinuxKVM虛擬化

2010-05-28 18:28:51

MySQL常用命令

2010-05-25 11:40:12

MySQL 常用命令

2010-05-27 13:12:10

MySQL 常用命令

2025-04-14 08:00:00

Docker命令運維

2025-05-06 07:50:00

Ansible命令運維

2014-07-25 10:55:36

Linux命令

2011-03-16 10:07:00

2025-09-11 08:00:00

MySQL運維數據庫

2014-01-02 09:57:56

PostgreSQL命令

2011-01-19 17:00:09

Postfix常用命令

2020-09-28 15:14:31

Linux常用命令實用命令

2010-03-29 10:16:39

CentOS常用命令

2009-12-22 14:47:24

Linux常用命令

2010-04-01 18:10:32

CentOS常用命令

2011-03-15 09:59:57

2015-07-28 10:21:23

git命令

2015-07-22 17:32:22

mysql常用命令

2010-04-07 11:21:28

Oracle常用命令
點贊
收藏

51CTO技術棧公眾號

91免费观看| 超薄丝袜一区二区| 中文字幕永久视频| 自拍视频在线| 国内精品伊人久久久久av一坑| 久久精品国产欧美亚洲人人爽| 中文字幕在线播放一区二区| 亚洲精品日产| 中文字幕一区视频| 国产视频在线观看一区| 国产午夜无码视频在线观看| 欧美在线看片| 日韩高清av在线| 最新天堂中文在线| 超碰在线视屏| 国产精品久久久久aaaa| 99在线热播| 欧美brazzers| 影音先锋久久精品| 亚洲色图第三页| 久久人妻少妇嫩草av蜜桃| 日日夜夜天天综合| 亚洲va韩国va欧美va精品| 日韩欧美精品一区二区三区经典 | 天堂av在线资源| 毛片av一区二区三区| 97视频免费在线观看| frxxee中国xxx麻豆hd| 婷婷成人综合| 欧美成人aa大片| 91视频这里只有精品| 性孕妇free特大另类| 一区二区三区不卡视频在线观看| 欧美动漫一区二区| 蜜臀久久久久久999| 美女任你摸久久| 欧美一区第一页| 日本少妇性生活| 欧美va天堂在线| 久久精品国产欧美激情| 99久久99久久精品免费看小说.| 琪琪久久久久日韩精品| 欧美α欧美αv大片| 日本高清一区二区视频| 成人黄色免费网站| 91福利国产精品| 欧美成人精品欧美一级乱| h片精品在线观看| 一区二区三区中文在线观看| 国产又黄又爽免费视频| 日本高清在线观看wwwww色| 国产亚洲精品精华液| 久久亚洲免费| 飘雪影视在线观看免费观看 | 亚洲第一黄色网址| av日韩精品| 91精品国产综合久久久久| 亚洲天堂2018av| 草莓视频成人appios| 在线视频欧美区| 日本久久精品一区二区| 三上悠亚一区二区| 色吊一区二区三区| 黄色国产小视频| 成人自拍视频网| 欧美主播一区二区三区| 丁香婷婷激情网| 影音成人av| 在线不卡一区二区| 国产性生活一级片| 日韩免费精品| 精品国产免费一区二区三区香蕉| 国产精品嫩草69影院| 澳门精品久久国产| 亚洲精品少妇网址| 久久av无码精品人妻系列试探| 精品视频免费| 久久精品国产亚洲精品| 欧美人妻一区二区| 99热这里只有成人精品国产| 日本欧美黄网站| 真实新婚偷拍xxxxx| 精久久久久久久久久久| av一区二区三区在线观看| 五月天婷婷视频| 国产欧美日韩麻豆91| 一卡二卡3卡四卡高清精品视频| 快射视频在线观看| 亚洲国产视频在线| 少妇性饥渴无码a区免费| 97成人超碰| 欧美大片拔萝卜| 蜜桃传媒一区二区亚洲av| 精品一级毛片| 欧美激情乱人伦| 天天操天天摸天天干| 免费看黄色91| 国产高清在线一区| 国产福利片在线| 一区二区三区91| 久久久久久久片| 在线播放一区二区精品视频| 亚洲男人第一av网站| 黄视频网站免费看| 久久久久久久高潮| 97视频中文字幕| 好男人免费精品视频| 一区二区三区不卡在线观看| 我看黄色一级片| 国产精品毛片av| 日韩在线免费高清视频| 奇米影视第四色777| 激情综合色综合久久| 久久久久久久久一区二区| 男人和女人做事情在线视频网站免费观看| 亚洲综合色视频| 欧美一级特黄a| 美女一区二区在线观看| 久久久精品在线| 亚洲成人第一网站| 成人福利视频在线看| 国产精品无码乱伦| 免费高清视频在线一区| 日韩电影视频免费| 久久久久久av无码免费网站| 免费日本视频一区| 欧美一区观看| 国产夫妻在线播放| 日韩欧美美女一区二区三区| 欧美亚洲色综久久精品国产| 免费视频一区二区三区在线观看| av观看久久| 黄网址在线观看| 欧美色电影在线| 欧美偷拍一区二区三区| 99国产一区| 成人3d动漫一区二区三区91| 成人黄色网址| 911国产精品| 国产主播av在线| 日韩电影免费在线看| 久久九九视频| 深夜成人在线| 日韩精品免费视频| 日韩欧美中文字幕一区二区| 国产成人av一区二区三区在线| 自拍偷拍99| 日韩成人综合网| www.久久久久久.com| 在线视频精品免费| 国产欧美日韩久久| 在线免费视频一区| 欧美国产一级| 国产一区二区丝袜| 日韩美女网站| 91精品一区二区三区在线观看| 激情无码人妻又粗又大| 久久国产人妖系列| 中文精品一区二区三区 | 欧美在线观看你懂的| 一区二区伦理片| 日韩电影在线免费看| 亚洲在线播放电影| 色狠狠一区二区三区| 色一情一乱一区二区| 国产精品久久久久久久久毛片 | 精品国精品国产尤物美女| 青娱乐91视频| 99精品久久久久久| 国产一区亚洲二区三区| 成人影视亚洲图片在线| 成人春色激情网| a视频在线播放| 欧美不卡一区二区三区四区| 国产午夜精品无码| 久久亚洲一级片| 中文字幕av不卡在线| 亚洲九九视频| 国产精品视频免费一区| 波多视频一区| 色婷婷av一区二区三区在线观看| 国产日产亚洲系列最新| 亚洲高清视频中文字幕| 熟女少妇一区二区三区| 久久www免费人成看片高清| 国内自拍中文字幕| 亚洲精品一级二级三级| 国产精品免费看久久久香蕉| 2024最新电影免费在线观看| 亚洲第一区中文99精品| 成人一二三四区| 亚洲欧洲精品成人久久奇米网| 一本色道久久hezyo无码| 久久最新视频| 国产又粗又长又爽视频| 亚洲影院天堂中文av色| 91精品在线播放| 亚洲美女尤物影院| 久久夜色精品国产亚洲aⅴ| 视频一区二区免费| 欧美日韩国产一区| 久久露脸国语精品国产91| 中文字幕乱码亚洲精品一区| 日本美女视频网站| 久久精品国产精品亚洲红杏| 国产主播自拍av| 四虎8848精品成人免费网站| 国产亚洲精品久久飘花| 91成人小视频| 国产91色在线| 欧美黑人xx片| 日韩在线中文字幕| 日色在线视频| 日韩精品一区二区在线| 中文字幕制服诱惑| 偷窥国产亚洲免费视频| 欧美xxxx黑人xyx性爽| 国产嫩草影院久久久久| 久久久久国产精品无码免费看| 精品制服美女久久| 99视频精品免费| 亚洲日本欧美| www国产免费| 四季av一区二区三区免费观看| 蜜桃欧美视频| 麻豆精品久久| 成人激情av在线| 最新欧美电影| 日韩免费在线免费观看| 国产三级电影在线播放| 欧美成人午夜激情| 日本综合在线| 综合国产在线观看| 国产一级网站视频在线| 日韩精品视频免费专区在线播放| 成人久久精品人妻一区二区三区| 91精品一区二区三区久久久久久| 这里只有精品免费视频| 91久久精品一区二区二区| 日韩伦人妻无码| 亚洲一卡二卡三卡四卡五卡| 亚洲精品卡一卡二| 亚洲欧洲性图库| 久久久精品少妇| 亚洲国产精品t66y| 懂色av粉嫩av浪潮av| 日本一区二区高清| 成年人在线免费看片| 国产日韩欧美精品一区| 精品人妻一区二区三区四区| 久久九九久久九九| 精品国产av无码| 国产香蕉久久精品综合网| 91精彩刺激对白露脸偷拍| 久久久久99精品一区| 自拍偷拍中文字幕| 国产亚洲va综合人人澡精品| 日本美女xxx| 中文字幕五月欧美| 男人操女人的视频网站| 亚洲三级免费观看| 欧美精品videos极品| 亚洲曰韩产成在线| 一区二区三区视频免费看| 狠狠躁夜夜躁人人躁婷婷91 | 免费高清完整在线观看| zzjj国产精品一区二区| 中文字幕有码在线视频| 欧美精品第一页在线播放| 黄色激情在线播放| 国产精品va在线播放| 日本国产一区| 91文字幕巨乱亚洲香蕉| 高清日韩中文字幕| 久久综合婷婷综合| 日韩欧美午夜| www插插插无码免费视频网站| 亚洲激情午夜| 男人插女人下面免费视频| 精品一区精品二区高清| 一本色道久久hezyo无码| 久久精品夜夜夜夜久久| 久久久久久久久久97| 亚洲最快最全在线视频| 800av免费在线观看| 欧美日韩视频在线一区二区| a天堂在线视频| 亚洲精品色婷婷福利天堂| 免费黄色在线观看| 97精品国产91久久久久久| 日韩一区二区三区免费视频| 97神马电影| 成人激情免费视频| www.日本在线视频| 日本美女一区二区三区视频| 国产探花一区二区三区| 91一区二区在线| 动漫性做爰视频| 黑人巨大精品欧美一区二区| 国产精品女同一区二区| 亚洲精品第一页| 欧美成年黄网站色视频| 91国内产香蕉| 爱情电影网av一区二区| 麻豆成人在线播放| 欧美日本一区| jizz18女人| www成人在线观看| 免费看一级一片| 欧美日韩国产在线播放网站| 欧美一区二区少妇| 欧美高清视频在线观看| 欧美成人福利| 久久日韩精品| 亚洲一级网站| 污污视频网站在线| 日本一区二区三区高清不卡 | 成人福利在线| 97超级碰碰碰| 日韩精品一区国产| 精品久久免费观看| 视频在线观看91| 99久久免费看精品国产一区| 亚洲青青青在线视频| 日韩xxx视频| 日韩精品黄色网| 不卡av免费观看| 99re资源| 久久久久亚洲| 欧美美女性视频| 国产午夜精品久久久久久免费视| 日本学生初尝黑人巨免费视频| 91精品中文字幕一区二区三区| 中文字幕日本在线观看| 日本亚洲欧美成人| 美女亚洲一区| 黄色免费观看视频网站| 99久久久精品免费观看国产蜜| 久草网在线观看| 日韩精品资源二区在线| 黄色在线观看网站| 91视频国产精品| 91精品啪在线观看国产81旧版| 日日干夜夜操s8| 中文在线免费一区三区高中清不卡 | 中文字幕中文字幕精品| 国产精品无码一区二区在线| 成人在线视频首页| 国产午夜激情视频| 亚洲精品99久久久久中文字幕| 成年网站在线视频网站| 国产99视频精品免费视频36| 亚洲无线视频| 欧美日韩人妻精品一区在线| 亚洲一区二区三区三| www.综合色| 久久久久国色av免费观看性色| 亚洲无线观看| 欧美精品久久久久久久久久久| 国产成人精品免费网站| 国产主播在线观看| 亚洲国产成人精品一区二区 | 日韩av在线中文字幕| 日本超碰在线观看| 《视频一区视频二区| 国产视频一区二区三| 欧美精品videossex性护士| 成人偷拍自拍| 免费观看日韩毛片| 国产欧美精品一区二区三区四区| 中文字幕欧美人妻精品一区蜜臀| 色偷偷av一区二区三区| 久久天堂久久| 91专区在线观看| 国产日韩欧美亚洲| 99久久久国产精品无码免费 | 日韩在线影院| 一区二区精品在线观看| 国产激情视频一区二区在线观看 | 一区二区三区午夜探花| 佐佐木明希电影| 色综合久久中文字幕| 九七久久人人| 国产精品久久九九| 久久国产精品毛片| 少妇视频一区二区| 亚洲国产精彩中文乱码av| 欧美人与性动交xxⅹxx| 色爽爽爽爽爽爽爽爽| 97久久久精品综合88久久| 真实新婚偷拍xxxxx| 久久久亚洲网站| 国产精品一国产精品| 国产精品探花在线播放| 欧美日韩久久久久| 高清全集视频免费在线| 久久综合中文色婷婷| 国产一区欧美一区| 亚洲av无码精品一区二区| 欧美大片在线看|