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

SpringBoot 整合 JPA 輕松搞定數據表增刪改查!

數據庫 其他數據庫
為了解決重復的編寫數據操作語句,開發社區誕生了許多優秀的 ORM 框架,比如 Hibernate、OpenJPA、TopLink 等,其中 Hibernate 相對較為知名,在 Hibernate 框架的幫助下,開發者可以輕松的以操作 Java 實體的方式來完成對數據表的“增刪改查”操作,能極大的簡化代碼編寫的工作量。

01、背景介紹

在之前的文章中,我們介紹了通過JdbcTemplate來實現數據庫的訪問和讀寫操作。當有一定的開發經驗之后,你會發現所有涉及到數據庫操作的代碼,除了表名和字段不同外,操作的語句基本都類似,功能上可以統一歸納為“增、刪、改、查”,編寫大量這種類似的代碼,對于開發者來說,其實非常枯燥。

為了解決重復的編寫數據操作語句,開發社區誕生了許多優秀的 ORM 框架,比如 Hibernate、OpenJPA、TopLink 等,其中 Hibernate 相對較為知名,在 Hibernate 框架的幫助下,開發者可以輕松的以操作 Java 實體的方式來完成對數據表的“增刪改查”操作,能極大的簡化代碼編寫的工作量。

國內外有不少的項目基于 Spring Boot JPA 來完成對數據庫的操作訪問,那么 Spring Boot JPA 和 ORM 框架之間有著怎樣的關系呢?

簡單的說,Spring Boot JPA 是 Spring 在 ORM 框架的基礎上封裝的一套 JPA 應用框架,具體的數據訪問和操作實現還是依賴于 ORM 框架來完成,Spring Boot JPA 只是完成了接口操作的標準封裝,包括增刪改查等在內的常用功能,可以幫助開發者降低學習成本,同時極大的提升開發效率。

值得一提的是:JPA (Java Persistence API) 是 Sun 官方提出的一套 Java 數據持久化操作的規范,不是一套產品,像上文說的 Hibernate,OpenJPA,TopLink 等,可以理解成 JPA 的具體產品實現。

以 Spring Boot 的2.0版本為例,Spring Boot JPA 的底層依賴于 Hibernate 框架來完成數據庫的訪問和操作,如果你熟悉 Hibernate 的框架使用,那么可以輕松的上手并使用它。

下面我們一起來看看 Spring Boot JPA 的具體使用姿勢。

02、應用實踐

2.1、工程配置

首先在pom.xml文件中添加相關的依賴包。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

然后在application.properties文件中配置相關的數據源訪問地址,以及相關hibernate屬性配置。

# 數據源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# hibernate信息配置
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

其中spring.jpa.properties.hibernate.hbm2ddl.auto參數是hibernate的一個配置屬性,主要作用有:自動創建、更新、驗證數據庫表結構。

相關的可選參數如下:

  • create:每次加載 hibernate 相關實體表時會刪除上一次生成的表,然后按照最新的 model 類生成新表,會造成數據庫表數據丟失;
  • create-drop:每次加載 hibernate 時會根據 model 類生成新表,當服務關閉時,表自動刪除,通常用于測試;
  • update:常用屬性,第一次加載 hibernate 時會根據 model 類自動建表,以后加載 hibernate 時根據 model 類自動更新表結構,但是不會刪除表中的數據;
  • validate:每次加載 hibernate 時會驗證數據庫表的結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值;

其次,spring.jpa.properties.hibernate.dialect參數主要用于指定生成表名時的存儲引擎為 InnoDBD,如果不配置,默認是MylSAM;spring.jpa.show-sql參數用于打印出自動生成的 SQL,方便調試。

2.2、基本增刪改查操作

下面我們一起來體驗一下 JPA 中常用的增刪改查操作。

2.2.1、創建實體

創建一個Student實體,包含三個屬性,表名為tb_student,當加載 hibernate 的時候會自動創建到數據庫中,代碼如下:

@Entity
@Table(name = "tb_student")
public class Student {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false, unique = true)
    private String name;

    @Column(nullable = false)
    private Integer age;

    // set、get方法等...
}
  • @Entity注解用于標識Student類是一個持久化的實體類;
  • @Table注解用于標識Student類映射到數據庫中的表名稱;
  • @Id注解用于標識Student映射到數據庫的主鍵字段
  • @GeneratedValue注解用于標識Student映射到數據庫的主鍵為自增類型
  • @Column注解用于標識Student映射到數據庫的字段相關信息

2.2.2、創建數據訪問接口

針對Student實體類,創建一個對應的JpaRepository接口,用于實現對實體的數據訪問和操作,代碼如下:

public interface StudentRepository extends JpaRepository<Student,Long> {

}

其中JpaRepository接口已經封裝好了常用的增刪改查方法邏輯,使用者只需要調用相關的方法接口實現對數據庫表的操作。

JpaRepository接口封裝的部分方法,源碼如下圖!

圖片圖片

2.2.3、單元測試

完成以上的實體創建和數據訪問接口的編寫之后,下面我們編寫對應的單元測試類來驗證一下編寫的內容是否正確,代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentJPATest {

    @Autowired
    private StudentRepository studentRepository;

    @Test
    public void test(){
        // 插入3條數據
        studentRepository.save(new Student("張三", 20));
        studentRepository.save(new Student("李四", 21));
        studentRepository.save(new Student("王五", 22));

        // 查詢全部數據
        List<Student> dbList = studentRepository.findAll();
        System.out.println("第一次全量查詢結果:" + dbList.toString());

        System.out.println("------------------------");

        // 修改數據
        studentRepository.save(new Student(dbList.get(0).getId(),"趙六", 20));

        // 查詢指定數據
        Optional<Student> findResult = studentRepository.findById(dbList.get(0).getId());
        System.out.println("查詢第一條數據結果:" + findResult.toString());

        System.out.println("-----------------");

        // 刪除數據
        studentRepository.deleteById(dbList.get(0).getId());

        // 查詢全部數據
        List<Student> result = studentRepository.findAll();
        System.out.println("第二次全量查詢結果:" + result.toString());
    }
}

運行單元測試,輸出結果如下!

第一次全量查詢結果:[Student{id=1, name='張三', age=20}, Student{id=2, name='李四', age=21}, Student{id=3, name='王五', age=22}]
------------------------
查詢第一條數據結果:Optional[Student{id=1, name='趙六', age=20}]
------------------------
第二次全量查詢結果:[Student{id=2, name='李四', age=21}, Student{id=3, name='王五', age=22}]

2.3、自定義簡單查詢操作

Spring Boot JPA 不僅為開發者封裝了常用的模板方法,還支持根據方法名來動態生成 SQL 語句,比如findByXX,countByXX,getByXX后面跟屬性名稱,當調用方法的時候會自動生成響應的 SQL 語句,具體示例如下:

public interface StudentRepository extends JpaRepository<Student,Long> {

    /**
     * 自定義簡單查詢,通過姓名進行搜索
     * @param name
     * @return
     */
    Student findByName(String name);

    /**
     * 自定義簡單查詢,通過姓名和年齡進行統計
     * @param name
     * @return
     */
    Integer countByNameAndAge(String name, Integer age);
}

編寫單元測試驗證內容的正確性。

@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentJPATest {

    @Autowired
    private StudentRepository studentRepository;

    @Test
    public void simpleTest(){
        Student result1 = studentRepository.findByName("李四");
        System.out.println("第一次查詢結果:" + result1.toString());

        System.out.println("-----------------");

        Integer result2 = studentRepository.countByNameAndAge("王五", 22);
        System.out.println("第二次查詢結果:" + result2);
    }
}

輸出結果如下!

第一次查詢結果:Student{id=2, name='李四', age=21}
-----------------
第二次查詢結果:1

方法上支持 SQL 語句中的關鍵字,比如And、Or、Like、OrderBy等。

具體關鍵字上的使用和生成的 SQL 對應的關系如下:

圖片圖片

更多的關鍵字使用可以參閱官方文檔。

2.4、復雜查詢操作

在實際的開發過程中,由于業務的需要,我們經常需要編寫復雜的 SQL 語句,比如鏈表查詢,分頁查詢等,這個時候就需要用到自定義 SQL 語句的操作了。

2.4.1、自定義 SQL 查詢

其實大部分的 SQL 語句都可以通過方法來動態生成,如果想自定義 SQL 查詢,Spring Boot JPA 也是支持的,操作上很簡單。

在接口方法上,添加@Query注解,即可實現自定義 SQL 語句;如果涉及到新增、修改和刪除操作,需要再加上@Modifying注解,同時也需要添加@Transactional注解事務支持。

具體示例如下:

public interface StudentRepository extends JpaRepository<Student,Long> {

    /**
     * 自定義SQL語句,單條查詢
     * @param studentName
     * @return
     */
    @Query(value = "select s from Student s where s.name = ?1")
    Student findByStudentName(String studentName);

    /**
     * 自定義SQL語句,修改數據
     * @param name
     * @param age
     * @return
     */
    @Transactional
    @Modifying
    @Query(value = "update Student s set s.age = ?2 where s.name = ?1")
    int updateAgeByName(String name, Integer age);

    /**
     * 自定義SQL語句,刪除數據
     * @param name
     */
    @Transactional
    @Modifying
    @Query(value = "delete from Student s where s.name = ?1")
    int deleteByName(String name);
}

編寫單元測試驗證內容的正確性。

@Test
public void sqlTest(){

    // 新增
    studentRepository.save(new Student("王五", 22));

    // 查詢
    Student result1 = studentRepository.findByStudentName("王五");
    System.out.println("第一次查詢結果:" + result1.toString());

    System.out.println("-----------------");

    // 修改
    studentRepository.updateAgeByName("王五", 30);

    Student result2 = studentRepository.findByStudentName("王五");
    System.out.println("第二次查詢結果:" + result2.toString());

    System.out.println("-----------------");

    // 刪除
    studentRepository.deleteByName("王五");

    Student result3 = studentRepository.findByStudentName("王五");
    System.out.println("第三次查詢結果:" + result3);
}

輸出結果如下!

第一次查詢結果:Student{id=4, name='王五', age=22}
-----------------
第二次查詢結果:Student{id=4, name='王五', age=30}
-----------------
第三次查詢結果:null

值得注意的是:這里自定義的 SQL 語句并非數據庫中的 SQL 語句,而是 hibernate 所支持 SQL 語句,簡稱 hsql,例如表名要采用 Java 實體而非數據庫中真實的表名,否則可能會報錯。

2.4.2、分頁查詢

分頁查詢,在實際的業務開發中非常常見,其實 Spring Boot JPA 已經幫助開發者封裝了分頁查詢的方法邏輯,在查詢的時候傳入Pageable參數即可。

示例如下:

@Test
public void pageTest(){
    // 構建分頁參數
    int page=0,size=10;
    Sort sort = new Sort(Sort.Direction.DESC, "id");
    Pageable pageable = PageRequest.of(page, size, sort);

    // 構建單條件查詢參數
    Student param = new Student();
    param.setAge(21);
    Example<Student> example = Example.of(param);

    // 發起分頁查詢
    Page<Student> result = studentRepository.findAll(example, pageable);
    System.out.println("查詢結果,總行數:" + result.getTotalElements());
    System.out.println("查詢結果,明細:" + result.getContent());
}

輸出結果如下:

查詢結果,總行數:1
查詢結果,明細:[Student{id=2, name='李四', age=21}]

當然我們也可以根據自定義簡單查詢來實現分頁查詢,在 JPA 的幫助下動態生成 SQL 語句,示例如下:

public interface StudentRepository extends JpaRepository<Student,Long> {

    /**
     * 自定義簡單查詢,通過年齡進行分頁搜索
     * @param age
     * @param pageable
     * @return
     */
    Page<Student> findByAge(Integer age, Pageable pageable);
}

值得注意的是:自定義的方法不會自動進行count語句匯總查詢,推薦采用模板方法來進行分頁查詢。

2.4.3、多表查詢

多表查詢,也是實際開發中經常會碰到的場景,Spring Boot JPA 提供了兩種實現方式,第一種是利用 Hibernate 的級聯查詢來實現,第二種是自定義 SQL 語句來實現。

第一種就不多說了,主要通過@OneToOne、@OneToMany、@ManyToOne、@ManyToMany和@JoinTable注解來完成多表的級聯查詢,不過這種方式需要在數據庫層面建立外鍵關聯,通過外鍵來完成級聯查詢,不推薦采用。

下面我們來介紹一下自定義 SQL 語句來實現,實現起來也很簡單,示例如下:

public interface TeacherRepository extends JpaRepository<Teacher,Long> {

    /**
     * 自定義鏈表查詢
     * @return
     */
    @Query(value = "select s.id, s.name, t.teacher_id as teacherId, t.teacher_name as teacherName from tb_student s left join tb_teacher t on s.teacher_id = t.teacher_id ", nativeQuery = true)
    List<Map<String,Object>> findCustomer();
}

編寫單元測試,驗證代碼的正確性。

@RunWith(SpringRunner.class)
@SpringBootTest
public class TeacherJPATest {

    @Autowired
    private TeacherRepository teacherRepository;

    @Test
    public void test2(){
        // 查詢全部數據
        List<Map<String,Object>> dbList = teacherRepository.findCustomer();
        System.out.println("查詢結果:" + JSONObject.toJSONString(dbList));
    }
}

輸出結果如下:

查詢結果:[{"id":9,"teacherId":1,"name":"李1","teacherName":"張老師"},{"name":"李2","id":10,"teacherId":1,"teacherName":"張老師"},{"id":11,"name":"李3","teacherId":1,"teacherName":"張老師"}]

直接編寫 sql 語句,非常簡單靈活。

2.5、屬性映射屏蔽操作

如果某個實體類中的屬性,不想被映射到數據庫,可以添加@Transient注解來實現,示例如下。

@Transient
private String  name;


03、參考

1、http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html

責任編輯:武曉燕 來源: 潘志的研發筆記
相關推薦

2024-09-02 09:26:28

2024-07-17 08:29:20

2023-11-13 08:16:08

MySQL數據數據庫

2019-07-09 08:23:07

數據安全旅游網絡安全

2024-12-27 08:39:10

2024-09-09 16:50:21

2021-10-20 09:04:21

Spring Beanscope數據庫

2019-11-07 15:39:36

數據庫MySQL文章

2021-07-05 09:24:06

MySQL SQL 語句數據庫

2016-04-29 10:02:39

2024-11-14 10:38:43

2023-02-27 07:37:56

Curl操作SQL

2024-06-20 08:26:01

JPA公共字段

2012-04-19 10:06:16

ibmdw

2016-09-09 01:07:06

數據中心容量規劃數據中心

2024-11-18 00:22:34

2012-04-12 09:23:15

達夢數據庫

2025-06-09 07:35:00

NumPy數據分析數組

2009-11-13 15:54:26

ADO.NET數據庫操

2023-06-08 08:13:43

點贊
收藏

51CTO技術棧公眾號

一区二区成人在线视频| 国产亚洲毛片| 欧美一区二区黄色| 成人午夜免费在线| 精品欧美不卡一区二区在线观看 | 午夜婷婷在线观看| 久久在线电影| 亚洲精品美女在线观看| 手机看片一级片| av资源在线看片| 久久精品一区二区三区不卡| 亚洲永久在线观看| 欧美a视频在线观看| 欧美国产免费| gogo人体一区| 亚洲色图一区二区| 欧美一区二区高清在线观看| 精品久久久免费视频| 久久综合中文| 久久久免费在线观看| 亚洲综合图片一区| 校花撩起jk露出白色内裤国产精品 | 亚洲精品二三区| 日本不卡一区二区在线观看| 水蜜桃在线视频| 亚洲精品久久7777| 亚洲一区在线直播| 暖暖视频在线免费观看| 成人av网站在线| 91亚洲永久免费精品| 无码人妻精品一区二区50| 欧美日韩国产欧| 日韩亚洲一区二区| 国内精品卡一卡二卡三| 女人抽搐喷水高潮国产精品| 日韩一区二区不卡| 思思久久精品视频| 素人啪啪色综合| 日韩欧中文字幕| 免费无码不卡视频在线观看| 欧美一卡二卡| 夜夜嗨av一区二区三区四季av | 超碰在线网址| 国产精品色噜噜| 日韩电影天堂视频一区二区| 色网站在线免费观看| www.成人网.com| 国产91视觉| 男人天堂av网| 成人免费看黄yyy456| 999热视频在线观看| 国产乱码精品一区二区三区精东| 激情五月激情综合网| 国产精品永久在线| 中文字幕+乱码+中文字幕明步| 视频在线观看一区| 国产成人精品电影久久久| 亚洲欧美偷拍一区| 三级在线观看一区二区| 国产精品久久77777| 91青青草视频| 免费观看成人av| 成人欧美在线观看| 国产99对白在线播放| 国产成人综合视频| 国产亚洲精品久久飘花| 性xxxx视频播放免费| 久久色在线观看| 日韩欧美在线观看强乱免费| 免费理论片在线观看播放老| 国产欧美一区二区三区在线老狼| 午夜精品福利一区二区| 婷婷视频在线| 一区二区三区四区亚洲| 欧美精品久久久久久久自慰| 深夜av在线| 在线观看一区二区视频| 天天色天天综合网| 99国产精品免费网站| 日韩精品免费综合视频在线播放 | 曰本一区二区三区视频| 亚洲视屏在线播放| 日韩在线一卡二卡| 亚洲小说欧美另类婷婷| 欧美在线亚洲一区| 亚洲图片视频小说| 国产成人av电影| 久久亚裔精品欧美| 天堂а√在线官网| 亚洲国产另类精品专区| 国产av无码专区亚洲精品| 国产在视频一区二区三区吞精| 日韩三级视频在线看| 91av在线免费| 婷婷色综合网| 2019日本中文字幕| 91高潮大合集爽到抽搐| 成人免费视频视频| 亚洲一区精品视频| 国产不卡人人| 欧美一区二区三区视频在线观看| 成人免费毛片日本片视频| 色天天久久综合婷婷女18| 久久久噜噜噜久久中文字免| 免费av中文字幕| 成人综合婷婷国产精品久久免费| 欧美日韩在线观看一区| 手机av免费在线| 欧美在线免费观看亚洲| 免费看黄色片的网站| 日韩啪啪电影网| 91大神在线播放精品| 99riav国产| 欧美国产精品一区二区三区| www精品久久| 57pao成人永久免费| 精品亚洲国产视频| 私库av在线播放| 日本成人在线电影网| 好看的日韩精品视频在线| 黄网址在线观看| 欧美性感一类影片在线播放| 特大黑人巨人吊xxxx| 中文字幕日韩一区二区不卡| 国产精品免费小视频| 欧洲成人av| 黄色成人在线免费| 中文在线字幕观看| 自拍偷拍欧美| 成人免费福利在线| 777电影在线观看| 91黄色免费看| 日韩av在线看免费观看| 99视频一区| 精品视频在线观看| 国产精品—色呦呦| 日韩欧美国产三级| a在线视频播放观看免费观看| 老司机免费视频一区二区 | 欧美欧美欧美| 精品国产乱码久久久久酒店 | 成人直播在线观看| 欧美成人午夜免费视在线看片| 伊人久久国产精品| 中国色在线观看另类| 日韩精品一区二区三区色欲av| 神马香蕉久久| 欧美在线视频导航| 青青九九免费视频在线| 欧美性20hd另类| 手机av免费看| 久久午夜电影| 欧美国产视频在线观看| 亚洲天堂电影| 亚洲天堂一区二区三区| 无码人妻精品一区二| 久久精品人人爽人人爽| 亚洲综合色在线观看| 日本午夜一区| 成人黄色在线观看| av网站大全在线| 欧美不卡一二三| 日本一区二区三区免费视频| 91论坛在线播放| 激情综合网婷婷| 北条麻妃国产九九九精品小说| 国产人妖伪娘一区91| 国产激情在线| 精品99一区二区三区| 日韩网红少妇无码视频香港| 久久久综合视频| 日日躁夜夜躁aaaabbbb| 66久久国产| 国产精品久久久久久免费观看| 久热在线观看视频| 亚洲视频在线观看视频| 国产一区二区在线播放视频| 亚洲国产婷婷综合在线精品| 久久精品老司机| 美国一区二区三区在线播放 | 免费在线国产视频| 亚洲精品久久在线| 中文资源在线播放| 一区二区三区丝袜| 天天躁日日躁aaaa视频| 激情综合网av| 精品少妇一区二区三区在线| 欧美在线免费看视频| 豆国产97在线| 一区二区视频免费完整版观看| 久久久91精品国产| 青梅竹马是消防员在线| 在线综合亚洲欧美在线视频| www.天天色| 国产精品毛片大码女人| 国产 xxxx| 久久精品999| 久久精品视频16| 99精品综合| 裸模一区二区三区免费| 秋霞影院一区| 国产精品久久久久久久电影 | 四虎在线观看| 91精品婷婷国产综合久久性色| 五月天激情国产综合婷婷婷| 亚洲色图.com| 亚洲v国产v欧美v久久久久久| 国产sm精品调教视频网站| 国产精品拍拍拍| 在线视频精品| 男人的天堂avav| 色综合狠狠操| 欧美中日韩免费视频| 97一区二区国产好的精华液| 国产日韩在线看片| 日韩大尺度黄色| 97精品一区二区三区| 操你啦在线视频| 在线视频欧美日韩| 天堂а在线中文在线无限看推荐| 欧美成人aa大片| 国产女人爽到高潮a毛片| 欧美写真视频网站| 日本熟女毛茸茸| 午夜伊人狠狠久久| 久久久全国免费视频| 亚洲欧美在线视频观看| 国产破处视频在线观看| 国产网红主播福利一区二区| 无遮挡aaaaa大片免费看| 粉嫩一区二区三区性色av| 图片区乱熟图片区亚洲| 久久精品av麻豆的观看方式| 国产日韩成人内射视频| 久久国产精品久久w女人spa| 免费欧美一级视频| 中文在线一区| 日韩欧美亚洲天堂| 亚洲综合不卡| 国产性xxxx18免费观看视频| 夜夜精品视频| 男人日女人下面视频| 99日韩精品| 欧美日韩激情视频在线观看 | 8x海外华人永久免费日韩内陆视频 | 国产精品秘入口18禁麻豆免会员| 樱桃成人精品视频在线播放| bt天堂新版中文在线地址| 国产精品国码视频| 阿v天堂2018| 一本色道久久综合亚洲精品不| 国产免费黄色小视频| av成人激情| 国产a视频免费观看| 日韩电影一区二区三区四区| 国产福利影院在线观看| 蜜桃视频在线观看一区| 加勒比av中文字幕| 国产一区二区三区在线观看免费| 中文字幕第10页| 成人动漫精品一区二区| 精品夜夜澡人妻无码av| 久久久综合精品| 国产精品酒店视频| 亚洲女人小视频在线观看| 国产亚洲欧美久久久久| 精品人伦一区二区三区蜜桃网站| 色一情一乱一伦| 欧美日韩国产综合一区二区| 6—12呦国产精品| 日韩精品一区二区三区在线| 日批视频在线播放| 亚洲日韩欧美视频一区| 欧美激情办公室videoshd| 欧美激情视频一区| 在线能看的av网址| 国产在线观看一区二区三区| 91精品啪在线观看国产爱臀| 久久久久资源| 99久久夜色精品国产亚洲96 | 日日摸夜夜添夜夜添精品视频| 九九热免费精品视频| 国产精品影视在线| 久久久久国产精品区片区无码| 国产精品美女久久久久久久网站| 久久久久久激情| 欧洲一区二区av| 国产chinasex对白videos麻豆| 日韩国产高清污视频在线观看| 成年女人的天堂在线| 欧美高清videos高潮hd| 中文日产幕无线码一区二区| 成人国产精品色哟哟| 欧美理伦片在线播放| 一区二区三区四区国产| 亚洲九九精品| 伊人国产精品视频| 久久午夜电影网| 欧美日韩偷拍视频| 欧美亚洲一区二区三区四区| 免费成人在线看| 中文字幕在线成人| 麻豆免费版在线观看| 亚洲一区二区免费| 欧美丝袜激情| av免费观看国产| 国产乱理伦片在线观看夜一区| 久久精品国产亚洲av麻豆| 亚洲人一二三区| 亚洲大尺度在线观看| 亚洲级视频在线观看免费1级| 免费观看在线午夜影视| 日韩免费精品视频| 精品日产乱码久久久久久仙踪林| 国产精品av免费| 奇米影视一区二区三区小说| 大尺度做爰床戏呻吟舒畅| 亚洲视频在线一区观看| 青青草视频在线观看免费| 亚洲精品久久在线| 青青青国内视频在线观看软件| 国产精品香蕉av| 精品日韩毛片| aa免费在线观看| av一区二区久久| 久久黄色免费视频| 91精品久久久久久久99蜜桃 | 欧美福利小视频| 国色天香久久精品国产一区| 性刺激综合网| 老鸭窝亚洲一区二区三区| 中文字幕在线视频播放| 亚洲一区av在线| 性网爆门事件集合av| 麻豆成人在线看| 国产精久久久| 国产av不卡一区二区| 激情综合五月天| 久久高清内射无套| 欧美久久一二区| 免费不卡视频| 91在线免费观看网站| 小说区亚洲自拍另类图片专区| 亚洲欧洲日本精品| 国产精品久久久久精k8| 最近中文字幕在线观看| 中文字幕在线视频日韩| 91视频成人| 国产日韩欧美大片| 国产不卡免费视频| 久久精品无码人妻| 日韩精品久久久久久久玫瑰园| 韩日成人影院| 日韩中文一区| 精品中文av资源站在线观看| 在线观看黄网址| 欧美一区在线视频| 美洲精品一卡2卡三卡4卡四卡| 风间由美久久久| 国产欧美二区| 日本精品久久久久中文| 欧美喷水一区二区| 污污网站在线观看| 精品久久sese| 日韩影院免费视频| 少妇视频一区二区| 日韩欧美国产麻豆| 日韩伦理在线一区| 色噜噜色狠狠狠狠狠综合色一| 久久99国产精品久久99| 青娱乐国产在线视频| 亚洲国产精品国自产拍av秋霞| 一区二区电影免费观看| 一区二区三区在线观看www| 国产主播一区二区| 五月天婷婷网站| 夜夜嗨av一区二区三区四区| 亚洲综合资源| 婷婷无套内射影院| 国产欧美一区二区精品性色超碰 | 日韩av在线播放资源| 成人日韩在线| 男女激烈动态图| 91丨porny丨首页| 一级日韩一级欧美| 久久久久国产精品免费网站| 久久av综合| 又黄又爽又色的视频| 欧美日韩视频在线| 免费黄色网址在线观看| 精品欧美国产| 激情综合色播五月| 国产剧情在线视频| 免费成人高清视频| 国产一区二区电影在线观看| 久久精品国产99久久99久久久| 精品久久久久久久久久久久久久 | 欧美综合视频在线| 国产欧美日韩高清| 日韩亚洲国产精品|