一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Spring Boot+Mybatis+Pagehelper分頁實現

Spring Boot+Mybatis+Pagehelper分頁實現

2021-08-01 12:00xiaolyuh123 Java教程

本篇文章主要講述的是Spring Boot+Mybatis+Pagehelper分頁實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Spring Boot 集成MyBatis和Pagehelper分頁插件

mybatis-spring-boot-starter依賴樹如下:

Spring Boot+Mybatis+Pagehelper分頁實現

pom配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xiaolyuh</groupId>
  <artifactId>spring-boot-student-mybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>spring-boot-student-mybatis</name>
 
  <!-- 添加Spring Boot的父類依賴,這樣當前項目就是Spring Boot項目了。 spring-boot-starter-parent是一個特殊的starter,他用來
    提供相關的maven默認依賴, 使用它之后,常用的依賴可以省去version標簽 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
 
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.0</version>
    </dependency>
    <!--pagehelper -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.1.1</version>
    </dependency>
 
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.31</version>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
 
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
 
</project>

application.properties配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server.port=80
# 數據源配置
spring.datasource.url=jdbc:mysql://localhost:3306/ssb_test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
#連接池配置
#spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
 
#mybatis
#entity掃描的包名
mybatis.type-aliases-package=com.xiaolyuh.domain.model
#Mapper.xml所在的位置
mybatis.mapper-locations=classpath*:/mybaits/*Mapper.xml
 
#pagehelper分頁插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
 
#日志配置
logging.level.com.xiaolyuh=debug
logging.level.org.springframework.web=debug
logging.level.org.springframework.transaction=debug
logging.level.org.mybatis=debug
 
debug=false

除了上面常見的兩項配置,還有:

?
1
2
3
4
mybatis.config-location=mybatis-config.xml配置文件的路徑
mybatis.type-handlers-package=掃描typeHandlers的包
mybatis.check-config-location=檢查配置文件是否存在
mybatis.executor-type=設置執行模式(SIMPLE, REUSE, BATCH),默認為SIMPLE

Mapping XML文件

在resources文件夾下創建mybaits/PersonMapper.xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?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.xiaolyuh.domain.mapper.PersonMapper" >
 <resultMap id="BaseResultMap" type="com.xiaolyuh.domain.model.Person" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  <id column="id" property="id" jdbcType="BIGINT" />
  <result column="name" property="name" jdbcType="VARCHAR" />
  <result column="age" property="age" jdbcType="INTEGER" />
  <result column="address" property="address" jdbcType="VARCHAR" />
 </resultMap>
 <sql id="Base_Column_List" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  id, name, age, address
 </sql>
 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  select
  <include refid="Base_Column_List" />
  from person
  where id = #{id,jdbcType=BIGINT}
 </select>
 <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  delete from person
  where id = #{id,jdbcType=BIGINT}
 </delete>
 <insert id="insert" parameterType="com.xiaolyuh.domain.model.Person" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
   SELECT LAST_INSERT_ID()
  </selectKey>
  insert into person (name, age, address
   )
  values (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, #{address,jdbcType=VARCHAR}
   )
 </insert>
 <insert id="insertSelective" parameterType="com.xiaolyuh.domain.model.Person" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
   SELECT LAST_INSERT_ID()
  </selectKey>
  insert into person
  <trim prefix="(" suffix=")" suffixOverrides="," >
   <if test="name != null" >
    name,
   </if>
   <if test="age != null" >
    age,
   </if>
   <if test="address != null" >
    address,
   </if>
  </trim>
  <trim prefix="values (" suffix=")" suffixOverrides="," >
   <if test="name != null" >
    #{name,jdbcType=VARCHAR},
   </if>
   <if test="age != null" >
    #{age,jdbcType=INTEGER},
   </if>
   <if test="address != null" >
    #{address,jdbcType=VARCHAR},
   </if>
  </trim>
 </insert>
 <update id="updateByPrimaryKeySelective" parameterType="com.xiaolyuh.domain.model.Person" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  update person
  <set >
   <if test="name != null" >
    name = #{name,jdbcType=VARCHAR},
   </if>
   <if test="age != null" >
    age = #{age,jdbcType=INTEGER},
   </if>
   <if test="address != null" >
    address = #{address,jdbcType=VARCHAR},
   </if>
  </set>
  where id = #{id,jdbcType=BIGINT}
 </update>
 <update id="updateByPrimaryKey" parameterType="com.xiaolyuh.domain.model.Person" >
  <!--
   WARNING - @mbggenerated
   This element is automatically generated by MyBatis Generator, do not modify.
  -->
  update person
  set name = #{name,jdbcType=VARCHAR},
   age = #{age,jdbcType=INTEGER},
   address = #{address,jdbcType=VARCHAR}
  where id = #{id,jdbcType=BIGINT}
 </update>
 
 <select id="findAll" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List" />
  from person
 </select>
 
 <select id="findByPage" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List" />
  from person
 </select>
</mapper>

DAO層Mapper類

在Mapper接口上需要加上@Mapper注解,@Mapper注解聲明成mybatis Dao層的Bean。也可以在配置類上使用@MapperScan("com.xiaolyuh.domain.mapper")注解聲明。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.xiaolyuh.domain.mapper;
 
import com.github.pagehelper.Page;
import com.xiaolyuh.domain.model.Person;
import org.apache.ibatis.annotations.Mapper;
 
import java.util.List;
 
@Mapper//聲明成mybatis Dao層的Bean,也可以在配置類上使用@MapperScan("com.xiaolyuh.domain.mapper")注解聲明
public interface PersonMapper {
 
  int deleteByPrimaryKey(Long id);
 
  int insert(Person record);
 
  int insertSelective(Person record);
 
  Person selectByPrimaryKey(Long id);
 
  int updateByPrimaryKeySelective(Person record);
 
  int updateByPrimaryKey(Person record);
 
  /**
   * 獲取所有數據
   * @return
   */
  List<Person> findAll();
 
  /**
   * 分頁查詢數據
   * @return
   */
  Page<Person> findByPage();
}

實體類

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.xiaolyuh.domain.model;
 
public class Person {
 
  private Long id;
 
  /**
   * 名稱
   */
  private String name;
 
  /**
   * 年齡
   */
  private Integer age;
 
  /**
   * 地址
   */
  private String address;
 
  public Long getId() {
    return id;
  }
 
  public void setId(Long id) {
    this.id = id;
  }
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  public Integer getAge() {
    return age;
  }
 
  public void setAge(Integer age) {
    this.age = age;
  }
 
  public String getAddress() {
    return address;
  }
 
  public void setAddress(String address) {
    this.address = address;
  }
}

Service層

接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.xiaolyuh.service;
 
import com.github.pagehelper.Page;
import com.xiaolyuh.domain.model.Person;
 
import java.util.List;
 
/**
 * Created by yuhao.wang on 2017/6/19.
 */
public interface PersonService {
 
  List<Person> findAll();
 
  /**
   * 分頁查詢
   * @param pageNo 頁號
   * @param pageSize 每頁顯示記錄數
   * @return
   */
  Page<Person> findByPage(int pageNo, int pageSize);
 
  void insert(Person person);
}

實現類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.xiaolyuh.service.impl;
 
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.xiaolyuh.domain.mapper.PersonMapper;
import com.xiaolyuh.domain.model.Person;
import com.xiaolyuh.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.List;
 
/**
 * Created by yuhao.wang on 2017/6/19.
 */
@Service
@Transactional(readOnly = true)
public class PersonServiceImpl implements PersonService {
 
  @Autowired
  private PersonMapper personMapper;
 
  @Override
  public List<Person> findAll() {
    return personMapper.findAll();
  }
 
  @Override
  public Page<Person> findByPage(int pageNo, int pageSize) {
    PageHelper.startPage(pageNo, pageSize);
    return personMapper.findByPage();
  }
 
  @Override
  @Transactional
  public void insert(Person person) {
    personMapper.insert(person);
  }
 
}

分頁的包裝類PageInfo

需要把Page包裝成PageInfo對象才能序列化。該插件也默認實現了一個PageInfo

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.xiaolyuh.page;
 
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
 
import com.github.pagehelper.Page;
 
/**
 * 對Page<E>結果進行包裝
 * <p/>
 * 新增分頁的多項屬性,主要參考:http://bbs.csdn.net/topics/360010907
 *
 * @author liuzh/abel533/isea533
 * @version 3.3.0
 * @since 3.2.2
 * 項目地址 : http://git.oschina.net/free/Mybatis_PageHelper
 */
@SuppressWarnings({"rawtypes", "unchecked"})
public class PageInfo<T> implements Serializable {
  private static final long serialVersionUID = 1L;
  //當前頁
  private int pageNum;
  //每頁的數量
  private int pageSize;
  //總記錄數
  private long total;
  //總頁數
  private int pages;
  //結果集
  private List<T> list;
  //是否為第一頁
  private boolean isFirstPage = false;
  //是否為最后一頁
  private boolean isLastPage = false;
 
 
  public PageInfo() {
  }
 
  /**
   * 包裝Page對象
   *
   * @param list
   */
  public PageInfo(List<T> list) {
    if (list instanceof Page) {
      Page page = (Page) list;
      this.pageNum = page.getPageNum();
      this.pageSize = page.getPageSize();
 
      this.pages = page.getPages();
      this.list = page;
      this.total = page.getTotal();
    } else if (list instanceof Collection) {
      this.pageNum = 1;
      this.pageSize = list.size();
 
      this.pages = 1;
      this.list = list;
      this.total = list.size();
    }
    if (list instanceof Collection) {
      //判斷頁面邊界
      judgePageBoudary();
    }
  }
 
  /**
   * 判定頁面邊界
   */
  private void judgePageBoudary() {
    isFirstPage = pageNum == 1;
    isLastPage = pageNum == pages;
  }
 
  public int getPageNum() {
    return pageNum;
  }
 
  public void setPageNum(int pageNum) {
    this.pageNum = pageNum;
  }
 
  public int getPageSize() {
    return pageSize;
  }
 
  public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
  }
 
  public long getTotal() {
    return total;
  }
 
  public void setTotal(long total) {
    this.total = total;
  }
 
  public int getPages() {
    return pages;
  }
 
  public void setPages(int pages) {
    this.pages = pages;
  }
 
  public List<T> getList() {
    return list;
  }
 
  public void setList(List<T> list) {
    this.list = list;
  }
 
  public boolean isIsFirstPage() {
    return isFirstPage;
  }
 
  public void setIsFirstPage(boolean isFirstPage) {
    this.isFirstPage = isFirstPage;
  }
 
  public boolean isIsLastPage() {
    return isLastPage;
  }
 
  public void setIsLastPage(boolean isLastPage) {
    this.isLastPage = isLastPage;
  }
 
  @Override
  public String toString() {
    final StringBuffer sb = new StringBuffer("PageInfo{");
    sb.append("pageNum=").append(pageNum);
    sb.append(", pageSize=").append(pageSize);
    sb.append(", total=").append(total);
    sb.append(", pages=").append(pages);
    sb.append(", list=").append(list);
    sb.append(", isFirstPage=").append(isFirstPage);
    sb.append(", isLastPage=").append(isLastPage);
    sb.append(", navigatepageNums=");
    sb.append('}');
    return sb.toString();
  }
}

測試類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.xiaolyuh;
 
import com.github.pagehelper.Page;
import com.xiaolyuh.domain.model.Person;
import com.xiaolyuh.page.PageInfo;
import com.xiaolyuh.service.PersonService;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import java.util.List;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonMapperTests {
 
 private Logger logger = LoggerFactory.getLogger(PersonMapperTests.class);
 
 @Autowired
 private PersonService personService;
 
 @Before
 public void testInsert() {
 Person person = new Person();
 person.setName("測試");
 person.setAddress("address");
 person.setAge(10);
 personService.insert(person);
 
 Assert.assertNotNull(person.getId());
 logger.debug(JSON.toJSONString(person));
 }
 
 @Test
 public void testFindAll() {
 List<Person> persons = personService.findAll();
 
 Assert.assertNotNull(persons);
 logger.debug(JSON.toJSONString(persons));
 }
 
 @Test
 public void testFindByPage() {
 Page<Person> persons = personService.findByPage(1, 2);
 // 需要把Page包裝成PageInfo對象才能序列化。該插件也默認實現了一個PageInfo
 PageInfo<Person> pageInfo = new PageInfo<>(persons);
 Assert.assertNotNull(persons);
 logger.debug(pageInfo.toString());
 logger.debug(JSON.toJSONString(pageInfo));
 }
 
 @Test
 public void testCacheByPage() {
 long begin = System.currentTimeMillis();
 List<Person> persons = personService.findAll();
 long ing = System.currentTimeMillis();
 personService.findAll();
 long end = System.currentTimeMillis();
 logger.debug("第一次請求時間:" + (ing - begin) + "ms");
 logger.debug("第二次請求時間:" + (end - ing) + "ms");
 
 Assert.assertNotNull(persons);
 logger.debug(persons.toString());
 logger.debug(JSON.toJSONString(persons));
 }
 
}

源碼

https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases

到此這篇關于Spring Boot+Mybatis+Pagehelper分頁實現的文章就介紹到這了,更多相關Spring Boot+Mybatis+Pagehelper分頁內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/xiaolyuh123/article/details/73506189

延伸 · 閱讀

精彩推薦
  • Java教程shiro編碼和加密代碼詳解

    shiro編碼和加密代碼詳解

    Shiro提供了base64和16進制字符串編碼/解碼的API支持,方便一些編碼解碼操作。下面通過實例代碼給大家詳解shiro編碼和加密知識,感興趣的朋友一起看看吧...

    動力節點4012021-01-06
  • Java教程詳解Java注解教程及自定義注解

    詳解Java注解教程及自定義注解

    這篇文章主要為大家詳細介紹了Java注解教程及自定義注解,幫助大家更好地學習Java注解,感興趣的小伙伴們可以參考一下 ...

    lijiao2752020-03-24
  • Java教程爬蟲技術詳解

    爬蟲技術詳解

    本文全面的介紹了爬蟲的原理、技術現狀、以及目前仍面臨的問題。具有很好的參考價值。下面跟著小編一起來看下吧...

    落葉的博客1632020-08-27
  • Java教程jdbc實現連接和增刪改查功能

    jdbc實現連接和增刪改查功能

    這篇文章主要為大家詳細介紹了jdbc實現連接和基本的增刪改查功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    lxh54318182021-07-16
  • Java教程教你輕松制作java音樂播放器

    教你輕松制作java音樂播放器

    這篇文章主要介紹了如何編寫屬于自己的java音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Java開發網5772020-06-28
  • Java教程Maven鏡像地址配置示例大全

    Maven鏡像地址配置示例大全

    這篇文章主要介紹了Maven鏡像地址配置示例大全,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    csdn-華仔4742020-07-01
  • Java教程Spring高階用法之自定義業務對象組件化

    Spring高階用法之自定義業務對象組件化

    這篇文章主要介紹了Spring高階用法之自定義業務對象組件化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    seeing10692021-07-24
  • Java教程java線程間通信的通俗解釋及代碼示例

    java線程間通信的通俗解釋及代碼示例

    這篇文章主要介紹了java線程間通信的通俗解釋,介紹了線程通信中的幾個相關概念,然后分享了線程通信的實現方式及代碼示例,具有一定參考價值 ,需...

    愛折騰的貓9292021-02-07
主站蜘蛛池模板: 色啪久久婷婷综合激情 | 日本欧美强乱视频在线 | 99国产精品热久久久久久夜夜嗨 | 日韩亚洲一区中文字幕在线 | 大奶老太 | 欧美a级在线观看 | 狠狠色狠狠色综合曰曰 | 2018亚洲男人天堂 | 91搞搞 | 国产精品亚洲va在线观看 | 欧美 国产 日韩 第一页 | 精品国产成人a区在线观看 精品国产91久久久久久久 | 99久久精品免费看国产 | 国产香蕉久久 | 性做久久久久久久久老女人 | youzljzljzljzlj96| 日韩免费视频播播 | 国产卡一卡二卡三卡四 | 日本人成动漫网站在线观看 | 高h舔穴| 99热这里只精品99re66 | tube日本高清老少配 | 亚洲精品一二区 | 午夜伦伦电影理论片大片 | 忘忧草研究院一二三 | 久久久久久久久人体 | 边摸边操 | 国产精品午夜国产小视频 | 国产精品拍拍拍福利在线观看 | 国内在线播放 | 免费一级片在线 | 日本九九热 | 亚洲欧洲日产国码无码av | 国产成人免费在线视频 | 日韩免费 | 亚洲第一区二区快射影院 | 亚洲妇熟xxxxx妇色黄 | 青青草原在线免费 | 国产伊人久久 | 国产精品久久久久久久久齐齐 | 麻豆小视频在线观看 |