日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 实体类 临时注解_JPA:Java持久层API--配置流程

發布時間:2023/12/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 实体类 临时注解_JPA:Java持久层API--配置流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、JPA概述

1.1 JPA是什么

JPA (Java Persistence API) Java持久化API。是一套Sun公司 Java官方制定的ORM 方案,是規范,是標準 ,sun公司自己并沒有實現 關注點: ORM ,標準 概念 (關鍵字)

1.1.1 ORM是什么

ORM(Object Relational Mapping) 對象關系映射。

問:ORM有什么用? 在操作數據庫之前,先把數據表與實體類關聯起來。 然后通過實體類的對象操作(增刪改查)數據庫表,這個就是ORM的行為! 所以:ORM是一個實現使用對象操作數據庫的設計思想!!! 通過這句話,我們知道JPA的作用就是通過對象操作數據庫的,不用編寫sql語句。

1.2 JPA的實現者

既然我們說JPA是一套標準,意味著,它只是一套實現ORM理論的接口。沒有實現的代碼。 那么我們必須要有具體的實現者才可以完成ORM操作功能的實現! 市場上的主流的JPA框架 (實現者)有: Hibernate (JBoos)、EclipseTop(Eclipse社區)、OpenJPA (Apache基金會)。 其中Hibernate是眾多實現者之中,性能最好的。所以,我們本次教學也是選用Hibernate框架作為JPA的主講框架。 提醒: 學習一個JPA框架,其他的框架都是一樣使用

1.3 JPA的作用是什么(問題)

JPA是ORM的一套標準,既然JPA為ORM而生,那么JPA的作用就是實現使用對象操作數據庫,不用寫SQL!!!. 問題:數據庫是用sql操作的,那用對象操作,由誰來產生SQL? 答:JPA實現框架

二、 入門示例

任何框架的學習,都建議從配置流程圖開始。所以我們來一起理解JPA的配置流程圖。

2.1 配置流程圖

1. 我們需要一個總配置文件persistence.xml存儲框架需要的信息 (注意,文件名不要寫錯,而且必須放在classpath/META-INF文件夾里面) 2. 我們需要一個Persistence持久類對象來讀取總配置文件,創建實體管理工廠對象 3. 我們需要實體管理工廠獲得數據庫的操作對象實體管理對象EntityManager。 4. 我們通過EntityManager操作數據庫之前,必須要先配置表與實體類的映射關系,從而實現使用對象操作數據庫!!!

2.2 配置步驟說明

第一步:導入包 (不管什么框架,首先要做的事情) 第二步:創建一個總配置文件 第三步:創建一個JPAUtils獲得操作對象EntityManager 第四步:創建一個實體類,并且配置好映射注解 第五步:在總配置文件加載實體類 第六步:測試代碼(需求:插入數據到用戶表)

2.3 配置步驟

需求:編寫一個JPA的項目,插入一條數據到學生信息表。

2.3.1 第一步:創建Maven項目

說明:我們這里是基于hibernate實現的,所以要導入Hibernate的JPA規范包

--使用maven構建的配置--

<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>cn.zj</groupId><artifactId>jpa-demo01-start</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!-- hibernate框架 實現 JPA 依賴 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.6.Final</version></dependency><!--jdbc驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency></dependencies> </project>

2.3.2 第二步:創建一個總配置文件

注意:文件必須放在classpath:/META-INF/persistence.xml

說明:Eclipse已經支持了JPA框架,所有不需要配置xsd文件,直接使用

配置信息如下:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="Java Persistence API: XML Schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd "><persistence-unit name="mysql-jpa"><!-- 四要素 org.hibernate.cfg.Environment--> <properties> <!-- 如果使用Hibernate實現的JPA,使用的就是Hibernate的環境參數 --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <!--可選配置--> <!--控制臺打印sql語句--> <property name="hibernate.show_sql" value="true" /> <!-- 格式化輸出SQL --> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit> </persistence>

2.3.3 第三步:封裝JPAUtils工具類

創建一個工具類JPAUtils,獲得操作對象(EntityManager)

package cn.zj.jpa.util; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence;public class JPAUtils {//同一個應用中,應該保證只有一個實例工廠。public static EntityManagerFactory emf = createEntityManagerFactory(); //1.獲得實體管理工廠 private static EntityManagerFactory createEntityManagerFactory(){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("mysql-jpa"); return emf; } //2.獲得實體管理類對象 public static EntityManager getEntityManger(){ EntityManager entityManager = emf.createEntityManager(); return entityManager; } }

2.3.4 第四步:創建映射實體類

創建一個映射的實體類,將JPA的映射注解寫在實體類里面。

package cn.zj.jpa.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;//1.指定實體類與表名的關系 //@Entity注解,指定該實體類是一個基于JPA規范的實體類 @Entity //@Table注解,指定當前實體類關聯的表 @Table(name="tb_student") public class Student { //@Id注解:聲明屬性為一個OID屬性 @Id //@GeneratedValue注解,指定主鍵生成策略 @GeneratedValue(strategy=GenerationType.IDENTITY) //@Column注解,設置屬性與數據庫字段的關系,如果屬性名和表的字段名相同,可以不設置 @Column(name="stu_id") private Long stuId;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '學生編號', @Column(name="stu_name") private String stuName;//VARCHAR(50) NULL DEFAULT NULL COMMENT '學生名字', @Column(name="stu_age") private Integer stuAge;//INT(11) NULL DEFAULT NULL COMMENT '學生年齡', @Column(name="stu_password") private String stuPassword;//VARCHAR(50) NULL DEFAULT NULL COMMENT '登錄密碼', public Student() {super();} //補全get、set方法 }

2.3.5 第五步:在總配置文件中加載映射實體類

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="Java Persistence API: XML Schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="Java Persistence API: XML Schemas http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd "><persistence-unit name="mysql-jpa"><!-- 加載實體類 基于hibernate框架的JPA已經實現了自動載入映射實體類 ,所以不配置也是可以的。建議還是加上配置。如果不寫容易忽略加載的實體類有哪些 --> <class>cn.zj.jpa.entity.Student</class><!-- 四要素 org.hibernate.cfg.Environment--> <properties> <!-- 如果使用Hibernate實現的JPA,使用的就是Hibernate的環境參數 --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="zj" /> <!--可選配置--> <!--控制臺打印sql語句--> <property name="hibernate.show_sql" value="true" /> <!-- 格式化輸出SQL --> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit> </persistence>

2.3.6 第六步:操作實體類保存數據

創建一個StudentDAOTest類,測試保存一個學生。

package cn.zj.jpa; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import org.junit.Test; import cn.zj.jpa.entity.Student; import cn.zj.jpa.util.JPAUtils;public class StudentDAOTest {@Testpublic void persist(){ //1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); //2、獲取事物管理器EntityTransaction transaction = manager.getTransaction(); transaction.begin(); //3、創建實體對象Student s=new Student(); s.setStuName("張三"); s.setStuAge(18);s.setStuPassword("zj");//4、保存到數據庫manager.persist(s); //5、提交事物transaction.commit(); //6、關閉資源manager.close(); } }

測試結果

通過操作實體對象保存數據成功!!!

2.4 使用JPA的好處

使用JPA,可以直接使用對象操作數據庫,由框架根據映射的關系生成SQL。不用開發人員編寫。這樣做,開發人員就不用編寫SQL語句了。 問題:這樣有什么好處呢? 答:不同的數據庫的SQL語法是有差異,如果不需要編寫SQL語句。就屏蔽各種數據庫SQL的差異。那么,編寫的代碼就可以一套代碼兼容多種數據庫!!!!

三、JPA實現CRUD

修改StudentDAOTest類,測試crud操作

//通過OID刪除@Testpublic void remove(){//1.獲得實體管理類對象EntityManager entityManager = JPAUtils.getEntityManger();//2.打開事務EntityTransaction transaction = entityManager.getTransaction();//3.啟動事務transaction.begin();//4.創建數據,刪除數據必須使用持久化對象Student s=entityManager.find(Student.class, 2L);//5.插入entityManager.remove(s);;//6。提交transaction.commit();//7.關閉entityManager.close();}//更新@Testpublic void merge(){//1.獲得實體管理類對象EntityManager entityManager = JPAUtils.getEntityManger();//2.打開事務EntityTransaction transaction = entityManager.getTransaction();//3.啟動事務transaction.begin();//4.創建數據Student s=new Student();s.setStuName("李四");//更新必須要有一個OIDs.setStuId(3L);//5.更新entityManager.merge(s);//6。提交transaction.commit();//7.關閉entityManager.close();}//通過OID獲得數據@Testpublic void find(){//1.獲得實體管理類對象EntityManager entityManager = JPAUtils.getEntityManger();//通過OID查詢數據Student student = entityManager.find(Student.class, 1L);System.out.println(student.getStuName());entityManager.close();}//通過OID獲得數據@Testpublic void getReference(){//1.獲得實體管理類對象EntityManager entityManager = JPAUtils.getEntityManger();/*** getReference()和find()方法的區別:* getReference基于懶加載機制,即需要使用對象的時候,才執行查詢。*/Student student = entityManager.getReference(Student.class, 1L);System.out.println(student.getStuName());entityManager.close();}

四、JPA常用 API說明

4.1 映射注解說明

注解 說明 @Entity 聲明該實體類是一個JPA標準的實體類 @Table 指定實體類關聯的表,注意如果不寫表名,默認使用類名對應表名。 @Column 指定實體類屬性對應的表字段,如果屬性和字段一致,可以不寫 @Id 聲明屬性是一個OID,對應的一定是數據庫的主鍵字段 @GenerateValue 聲明屬性(Object ID)的主鍵生成策略 @SequenceGenerate 使用SEQUENCE策略時,用于設置策略的參數 @TableGenerate 使用TABLE主鍵策略時,用于設置策略的參數 @JoinTable 關聯查詢時,表與表是多對多的關系時,指定多對多關聯表中間表的參數。 @JoinColumn 關聯查詢時,表與表是一對一、一對多、多對一以及多對多的關系時,聲明表關聯的外鍵字段作為連接表的條件。必須配合關聯表的注解一起使用 <key> @OneToMany 關聯表注解,表示對應的實體和本類是一對多的關系 @ManyToOne 關聯表注解,表示對應的實體和本類是多對一的關系 @ManyToMany 關聯表注解,表示對應的實體和本類是多對多的關系 @OneToOne 關聯表注解,表示對應的實體和本類是一對一的關系

4.2 JPA常用API說明

API 說明 Persistence 用于讀取配置文件,獲得實體管理工廠 EntityManagerFactory 用于管理數據庫的連接,獲得操作對象實體管理類 EntityManager 實體管理類,用于操作數據庫表,操作對象 EntityTransaction 用于管理事務。開始,提交,回滾 TypeQuery 用于操作JPQL的查詢的 Query 用于操作JPQL的查詢接口,執行沒有返回數據的JPQL(增刪改) CriteriaBuilder 用戶使用標準查詢接口 Criteria查詢接口

五、JPA多表關聯查詢

多個關聯查詢作用(導航查詢):就是實現使用一個實體類對象查詢多個表的數據。 配置多表聯系查詢必須有兩個步驟; (1)、在實體類里面建立表與表之間的關系。 (2)、在實體類配置關聯關系,JPA使用注解配置

多表關聯的E-R圖如下:

根據ER圖,創建數據庫表!!!

5.1 一對多實現 (單向)

需求:通過ID查詢一條學生表的記錄,同時查詢該學生的對應的成績的信息!

5.1.1 說明

如圖所示:一個學生可以有多條成績的記錄,一條成績的記錄只屬于一個學生,所以學生表與成績表的關系是一對多的關系。

所以,通過JPA配置一對多的關系,可以通過學生表對應的實體類對象同時獲得兩個表的數據。

5.1.2 配置步驟

5.1.2.1 第一步:創建項目

說明:復制入門示例的項目即可。

5.1.2.2 第二步:創建單表實體類

(1)創建Student類

@Entity @Table(name="tb_student") public class Student { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="stu_id") private Long stuId;@Column(name="stu_name") private String stuName;@Column(name="stu_age") private Integer stuAge; @Column(name="stu_password") private String stuPassword;public Student() {super();} //補全get、set方法 }

(2)創建Score類

@Entity @Table(name="tb_score") public class Score{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="sco_id")private Long scoId; @Column(name="sco_subject")private String scoSubject;@Column(name="sco_score")private Float scoScore;@Column(name="stu_id")private Long stuId;public Score() {super();} // 補全get、set方法 }

5.1.2.3 第三步:配置一對多關聯關系

說明:通過@OneToMany注解配置。

修改Student類,配置一對多關系。

/*** 單向一對對,應該有學生來維護關系* * 一個學生對應多個成績,一對多關系* 多個成績我們使用list封裝起來* * JPA 使用 @OneToMany 映射一對多* fetch : 抓取策略* FetchType.LAZY 懶加載,默認 (只有關聯對象在用到的時候才會去發送新的sql,默認關聯對象不會查詢)* 會多生成sql語句 :N+1* FetchType.EAGER 迫切查詢 (多表連接查詢,只會發送一條sql語句)* @JoinColumn 設置兩張表之間外鍵列*/@OneToMany(fetch=FetchType.EAGER)@JoinColumn(name="stu_id")private List<Score> scores;public void setScores(List<Score> scores) {this.scores = scores;}

5.1.2.4 第四步:測試一對多查詢

@Test public void testOne2Many(){//1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); Student student = manager.find(Student.class, 1L);System.out.println("學生id:"+student.getStuId()+",學生姓名:"+student.getStuName());List<Score> scores = student.getScores();for (Score score : scores) {System.out.println("科目:"+score.getScoSubject()+",分數:"+score.getScoScore());}//6、關閉資源manager.close(); }

查詢結果:

一對多關聯查詢成功!!!

5.2 多對一實現 (單向)

5.2.1 說明

需求:通過ID查詢一條成績表的記錄,同時查詢該成績的對應的學生的信息!

如圖所示:成績表里面,每一條記錄只能對應一個學生,但是學生編號不是唯一的。所以成績表里面的多條數據可以對應一個學生,所以我們稱多對一的關系。

5.2.2 配置步驟

5.2.2.1 第一步:創建項目

復制一對多示例項目即可。

5.2.2.2 第二步:創建單表實體類

修改Student類,去掉一對多配置即可。

5.2.2.3 第三步:配置多對一關聯關系

修改Score類,配置多對一關系

@Entity @Table(name="tb_score") public class Score{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="sco_id")private Long scoId; @Column(name="sco_subject")private String scoSubject;@Column(name="sco_score")private Float scoScore;/*** jpa的多對一,關聯關系中指定的外鍵 和 關聯表的屬性有沖突 * 解決的方案:去掉關聯表中外鍵對應的屬性/*@Column(name="stu_id")private Long stuId;public Long getStuId() {return stuId;}public void setStuId(Long stuId) {this.stuId = stuId;}*//*** 1、分數和學生信息是多對一的關系* 2、只需要一個學生的實體來引用學生的信息*/@ManyToOne@JoinColumn(name="stu_id")private Student student;public Student getStudent() {return student;}public void setStudent(Student student) {this.student = student;}//補全get、set方法 }

5.2.2.4 第四步:測試

@Testpublic void testMany2One(){//1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); Score score = manager.find(Score.class, 1L);System.out.println("科目:"+score.getScoSubject()+",分數:"+score.getScoScore());Student student = score.getStudent();System.out.println("學生id:"+student.getStuId()+",學生姓名:"+student.getStuName());//6、關閉資源manager.close(); }

查詢結果:

多對一配置成功!!!

5.3 雙向一對多|多對一(了解)

5.3.1 說明

(1)查詢學生信息,同時查詢成績信息。 (2)查詢成績信息,同時也可以查詢學生信息。

5.3.2 配置步驟

在同一個項目中,在Student類和Score類中,同時配置關聯關系。

(1)在Student類中配置一對多

@OneToMany //聲明是一對多的關系@JoinColumn(name="stu_id") //指定關聯表中 外鍵的字段private List<Score> scores;public List<Score> getScores() {return scores;}public void setScores(List<Score> scores) {this.scores = scores;}

(2)在Score類中配置多對一

/*** jpa的多對一,關聯關系中指定的外鍵 和 關聯表的屬性有沖突 * 解決的方案:去掉關聯表中外鍵對應的屬性@Column(name="stu_id")private Long stuId;public Long getStuId() {return stuId;}public void setStuId(Long stuId) {this.stuId = stuId;}*//*** 1、分數和學生信息是多對一的關系* 2、只需要一個學生的實體來引用學生的信息*/@ManyToOne@JoinColumn(name="stu_id")private Student student;public Student getStudent() {return student;}public void setStudent(Student student) {this.student = student;}

5.4 一對一實現

5.4.1 說明

需求:通過ID查詢學生的信息,通過也獲得學生對應的學生身份信息。

5.4.2 配置步驟

5.4.2.1 第一步:創建項目

復制一對多的示例項目即可。

5.4.2.2 第二步:創建單表實體類

(1)創建Student類

(2)創建Identity類

package cn.zj.jpa.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name="tb_identity") public class Identity {@Id /*由于一對一,外鍵表的主鍵字段值來自于主鍵表,所以只能手工輸入 手工輸入ID值,可以不指定主鍵生成策略 */ // @GeneratedValue @Column(name="stu_id")private Long stuId;@Column(name="stu_identity")private String stuIdentity;@Column(name="stu_no")private String stuNo;public Identity() {super();}// 補全get、set方法 }

5.4.2.3 第三步:配置一對一關聯關系

說明:一對一關聯關系,也是支持雙向配置的。

可以在Student類、Identity類中同時配置關聯關系。

(1)修改Student類,配置一對一關系。

//學生表與學生身份表是一對一的關系,意味著,一個學生只能對應一條學生身份信息 //所以使用引用 //1.聲明關系,一對一 @OneToOne //2.必須要指定關聯的外鍵 @JoinColumn(name="stu_id") private Identity identity; public Identity getIdentity() { return identity; } public void setiIdentity(Identity identity) { this.identity = identity; }

(2)修改Score類

//1.聲明關系,一對一 @OneToOne //2.指定關聯的外鍵 @JoinColumn(name="stu_id") private Student student; public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; }

5.4.2.4 第四步:測試

說明:可以分別測試方向一對一關系。

@Testpublic void testOne2One1(){//1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); Student student = manager.find(Student.class, 1L);System.out.println("學生id:"+student.getStuId()+",學生姓名:"+student.getStuName());Identity identity = student.getIdentity();System.out.println("學生學號:"+identity.getStuNo()+",身份證號:"+identity.getStuIdentity());//6、關閉資源manager.close(); }@Testpublic void testOne2One2(){//1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); Identity identity = manager.find(Identity.class, 1L);System.out.println("學生學號:"+identity.getStuNo()+",身份證號:"+identity.getStuIdentity());Student student = identity.getStudent();System.out.println("學生id:"+student.getStuId()+",學生姓名:"+student.getStuName());//6、關閉資源manager.close(); }

(1)測試學生關聯身份信息

測試結果:

(2)測試身份信息關聯學生。

一對一配置成功!!!

5.5 配置多對多

5.5.1 說明

需求:

(1)通過ID查詢學生的信息,通過該學生信息也獲得對應的教師信息。

(2)通過ID查詢教師的信息,通過教師信息也獲得該對應的學生信息。

如圖所示:一個學生可以有多個教師,一個教師也可以有多個學生,所以學生和教師的關系是多對多的關系。

如上圖所示:

如果要從學生表的信息獲得教師表的信息。必須需要三個條件 1. 必須需要有一個中間表 2. 必須需要中間表對應本表的外鍵 3. 必須需要中間表對應關聯表的外鍵

5.5.2 配置步驟

5.5.2.1 第一步:創建項目

復制一個示例項目即可。

5.5.2.2 第二步:創建單表實體類

學生實體類Student

//1.指定實體類與表名的關系 //@Entity注解,指定該實體類是一個基于JPA規范的實體類 @Entity //@Table注解,指定當前實體類關聯的表 @Table(name="tb_student") public class Student { //@Id注解:聲明屬性為一個OID屬性 @Id //@GeneratedValue注解,指定主鍵生成策略 @GeneratedValue(strategy=GenerationType.IDENTITY) //@Column注解,設置屬性與數據庫字段的關系,如果屬性名和表的字段名相同,可以不設置 @Column(name="stu_id") private Long stuId;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '學生編號', @Column(name="stu_name") private String stuName;//VARCHAR(50) NULL DEFAULT NULL COMMENT '學生名字', @Column(name="stu_age") private Integer stuAge;//INT(11) NULL DEFAULT NULL COMMENT '學生年齡', @Column(name="stu_password") private String stuPassword;//VARCHAR(50) NULL DEFAULT NULL COMMENT '登錄密碼', public Student() {super();} //補全get、set方法 }

教師實體類Teacher

@Entity @Table(name="tb_teacher") public class Teacher {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="tea_id")private Long teaId;@Column(name="tea_name")private String teaName;@Column(name="tea_password")private String teaPassword;public Teacher() {super();}//補全get、set方法 }

5.5.2.3 第三步:配置多對多關系

(1)學生關聯教師,修改Student類

// 學生表和教師表是多對多的關系 // 所以,一個學生可以有多個教師,所以需要使用集合來存儲教師信息 //1.聲明關系,多對多 @ManyToMany //2.設置關聯的條件 //JoinTable用于對應中間表的設置 joinColumns設置中間表與本表關聯的外鍵 inverseJoinColumns設置中間表與關聯表對應的外鍵 @JoinTable(name="tb_stu_tea" ,joinColumns=@JoinColumn(name="stu_id"),inverseJoinColumns=@JoinColumn(name="tea_id")) private List<Teacher> teachers; public List<Teacher> getTeachers() { return teachers; } public void setTeachers(List<Teacher> teachers) { this.teachers = teachers; }

(2)教師關聯學生,修改Teacher類

//因為教師與學生是多對多的關系,所以一個教師也可以有多個學生,需要使用集合來存儲學生的數據 //1.聲明教師和學生的關系,多對多 @ManyToMany //2.設置關聯的條件 @JoinTable(name="tb_stu_tea" ,joinColumns=@JoinColumn(name="tea_id"),inverseJoinColumns=@JoinColumn(name="stu_id")) private List<Student> students; public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; }

5.5.2.4 測試

5.5.2.4.1 Step1:測試學生關聯教師

測試代碼

@Testpublic void testMany2Many1(){//1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); Student student = manager.find(Student.class, 1L);System.out.println("學生id:"+student.getStuId()+",學生姓名:"+student.getStuName());List<Teacher> teachers = student.getTeachers();for (Teacher teacher : teachers) {System.out.println("教師id:"+teacher.getTeaId()+",教師姓名:"+teacher.getTeaName());}//2、關閉資源manager.close(); }

測試結果:

5.5.2.4.2 Step2:測試教師關聯學生

測試代碼

@Testpublic void testMany2Many2(){//1.獲得實體管理類 EntityManager manager = JPAUtils.getEntityManger(); Teacher teacher = manager.find(Teacher.class, 1L);System.out.println("教師id:"+teacher.getTeaId()+",教師姓名:"+teacher.getTeaName());List<Student> students = teacher.getStudents();for (Student student : students) {System.out.println("學生id:"+student.getStuId()+",學生姓名:"+student.getStuName());}//2、關閉資源manager.close(); }

測試結果:

多對多配置成功!!!

六、JPA逆向工程

6.1 說明

所謂的逆向工程就是通過數據庫的結構生成代碼。

目的:提高開發的效率

6.2 步驟

6.2.1 第一步:創建JPA項目

(1)創建項目

(2)指定項目名、JPA版本

(3)完成創建

6.2.2 第二步:生成JPA代碼

右擊項目的src文件夾,選擇new --> Other.. -->JPA的JPA Entities from Tables

6.2.2.1 Step1:創建新的數據庫連接

(1)選擇新建數據庫連接

(2)指定數據庫類型

(3)新建數據庫驅動

(4)配置驅動信息

驅動版本號

加載驅動jar包

配置jdbc四要素

6.2.2.2 Step2:配置表與表直接的關聯關系

(1)配置表關聯關系

選擇表,全選即可。

配置Student、Score一對多

依次配置其它的關聯關系即可。

6.2.2.3 Step3:指定生成實體類的名稱及結構

(1)修改關聯對象的屬性名

指定實體類的生成屬性

指定實體類的類名

依次修改其它類的屬性即可。

6.2.2.4 Step4:生成代碼

6.2.3 第三步:導入所需jar依賴

說明:Maven項目是可以導入jar包到本地的。 方法:打開DOS窗口,進入項目的pom文件所在目錄,執行命令: mvn dependency:copy-dependencies 前提:已經配置了Maven環境變量。

6.2.4 第四步:更新項目

七、JPQL語言

7.1 說明

JPQL : Java Persistence Query Language : java持久化查詢語言。 它的作用是通過類似SQL的語法去操作實體類的對象。 語法和SQL一樣的,SQL操作的數據表,JPQL操作的對象 作用:實現個性化的查詢需求

7.2 示例代碼

package cn.zj.jpa; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.Query; import javax.persistence.TypedQuery;import org.junit.Test;import cn.zj.jpa.entity.Student; import cn.zj.jpa.util.JPAUtils;public class StudentDAOTest {//1.查詢所有學生的信息 @Test public void findAll(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); //2.獲得JPQL查詢對象 //標準的JPQL是必須要使用select //select語法: select 別名 from 類名 別名 TypedQuery<Student> query = manager.createQuery("select s from Student s", Student.class); //返回多條查詢的數據,getResultList //TypedQuery解決了HIbernate返回有警告的問題 List<Student> students = query.getResultList(); for (Student student : students) { System.out.println("學生名:"+student.getStuName()); } manager.close(); } //2.條件查詢 //需求:查詢名字有張字的學生 //注意:JPQL的語法,使用?設置參數,必須要在?后面設置下標值,下標值不能為負數 @Test public void findByCondition(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); //2.獲得JPQL查詢對象 //標準的JPQL是必須要使用select TypedQuery<Student> query = manager.createQuery("select s from Student s where s.stuName like ?1", Student.class); //3.設置條件 query.setParameter(1, "%張%"); List<Student> students = query.getResultList(); for (Student student : students) { System.out.println("學生名:"+student.getStuName()); } manager.close(); } @Test public void findByCondition1(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); //2.獲得JPQL查詢對象 //標準的JPQL是必須要使用select TypedQuery<Student> query = manager.createQuery("select s from Student s where s.stuName like :stuName", Student.class); //3.設置條件 query.setParameter("stuName", "%張%"); List<Student> students = query.getResultList(); for (Student student : students) { System.out.println("學生名:"+student.getStuName()); } manager.close(); } //需求:返回學生表的記錄數 @Test public void count(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); //2.獲得JPQL查詢對象 //標準的JPQL是必須要使用select //JPQL中的count操作返回值是Long值,所以用Long類型接收 TypedQuery<Long> query = manager.createQuery("select count(s) from Student s", Long.class); //如果返回的是一個值的查詢,使用getSingleResult Long count = query.getSingleResult(); System.out.println(count); manager.close(); } //需求:第二頁,每頁三條@Test public void findByPage(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); //2.獲得JPQL查詢對象 //標準的JPQL是必須要使用select TypedQuery<Student> query = manager.createQuery("select s from Student s", Student.class); //設置分頁條件 //1.設置開始位置,下標從0開始,第四條數據的下標為3 query.setFirstResult(3); //2.設置每頁的記錄 query.setMaxResults(3); List<Student> students = query.getResultList(); for (Student student : students) { System.out.println("學生名:"+student.getStuName()); } manager.close(); } /** 命名查詢語句的調用 * * 所謂的命名查詢,就是在實體類對象使用一個名字聲明一條JPQL語句 * 這樣可以通過name值獲得Query的語句 * * 命名查詢,在類名上做如下聲明:@NamedQuery(name="Student.findAll", query="SELECT s FROM Student s") public class Student { */@Test public void findAllByNamedQuery(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); //2.獲得一個查詢命名查詢語句的對象 //可以通過該對象調用實體類聲明的命名查詢語句 TypedQuery<Student> query = manager.createNamedQuery("Student.findAll", Student.class); List<Student> students = query.getResultList(); for (Student student : students) { System.out.println(student.getStuName()); } manager.close(); } //需求:通過JQOL刪除有張字的學生 @Test public void removeByCondition(){ //1獲得操作對象 EntityManager manager = JPAUtils.getEntityManager(); EntityTransaction transaction = manager.getTransaction(); transaction.begin(); try { //2.獲得JPQL查詢對象 //注意,調用操作的JPQL是不需要指定返回的類型 Query query = manager.createQuery("delete from Student s where s.stuName like ?1"); //參數對應?設置的下標值 query.setParameter(1, "%張%"); int count = query.executeUpdate(); System.out.println(count); transaction.commit(); manager.close(); } catch (Exception e) { transaction.rollback(); e.printStackTrace(); } } }

7.3 JPQL補充:N+1問題

在一對多或者多對多查詢過程中,首先查詢1這一方的數據,然后根據1這一份的數據,查詢多的一方的數據。 當學生有N個的時候,總共查詢次數N+1次。 這個就稱之為N+1問題 當我們數據庫的量不大的時候,N+1問題基本沒有什么影響。如果當數據量很大的時候,查詢數據庫的次數,就很大了,這個就會影響數據庫的性能。

如何解決這個問題?

可以通過JPQL來解決。

@Testpublic void one2manybyOne(){//1、獲取實體操作對象EntityManager manager = JPAUtils.getEntityManager();//JPQL是通過fetch這個關鍵詞,在查詢學生的信息的時候,一起將分數也查詢出來//最終執行的sql就只有一條TypedQuery<Student> query = manager.createQuery("select distinct s from Student s inner join fetch s.scores", Student.class);List<Student> students = query.getResultList();for (Student student : students) {System.out.println("學生姓名:"+student.getStuName()+",學生id:"+student.getStuId());List<Score> scores = student.getScores();for (Score score : scores) {System.out.println("科目:"+score.getScoSubject()+",分數:"+score.getScoScore());}System.out.println("---------------------------------");}}

執行結果:

執行過程中,確實一條sql語句!!!

解決了頻繁查詢數據庫,帶來的數據庫性能損耗。

總結

以上是生活随笔為你收集整理的java 实体类 临时注解_JPA:Java持久层API--配置流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久99电影 | 久久久亚洲精华液 | 亚洲精品91天天久久人人 | 狠狠色综合网站久久久久久久 | 96视频免费在线观看 | 在线看黄色av | 国产裸体无遮挡 | 毛片精品免费在线观看 | 国产精品99爱 | 日韩二区三区在线观看 | 欧美日韩国产在线精品 | 精品福利网 | 在线观看免费国产小视频 | 久久久久久久久久久久影院 | 亚洲人视频在线 | 91成人欧美 | 首页av在线 | 国产精品 日韩 | 中文字幕国产精品一区二区 | 日日碰夜夜爽 | 国产精品 亚洲精品 | 天天干天天射天天插 | 美女av在线免费 | 国产99久久久精品 | 在线看小早川怜子av | 中文字幕一区二 | 精品美女在线观看 | 国产成人精品一区二区三区免费 | 亚洲综合在线播放 | a亚洲视频 | 97视频网站| 日韩欧美精品在线视频 | 深爱五月激情五月 | 国产精品96久久久久久吹潮 | 亚洲天堂网视频在线观看 | 久草免费新视频 | 水蜜桃亚洲一二三四在线 | 超碰在线人| 在线视频欧美精品 | 91在线中字| 日韩精品一区二区三区免费观看 | 天天插天天 | 久久国产精品影片 | 欧美精品久久人人躁人人爽 | 最近中文字幕免费av | 久久丁香网 | 日韩91av| 日本免费一二三区 | av在线进入 | 欧美日韩国产精品久久 | 波多野结衣在线播放一区 | 日韩高清av在线 | 日本中文在线 | 日韩免费视频播放 | 天天射天天| 这里只有精品视频在线 | 96av麻豆蜜桃一区二区 | 亚洲激情 | 日本黄色免费大片 | 91自拍视频在线 | 日韩高清成人 | 激情视频在线观看网址 | 久久久网 | 国产人成看黄久久久久久久久 | 韩国av免费观看 | 夜夜躁日日躁狠狠躁 | av高清网站在线观看 | 97成人精品区在线播放 | 色综合五月天 | 亚洲伦理电影在线 | 丁香资源影视免费观看 | 久久久综合香蕉尹人综合网 | 国产一区二区高清视频 | 久久久天堂 | 四虎影视精品 | 91av电影网| 少妇做爰k8经典 | 人人爽人人澡人人添人人人人 | 色www. | 又黄又刺激的视频 | 国产一区二区在线观看视频 | 免费福利在线 | 免费色视频网址 | 丁香国产视频 | 精品国产伦一区二区三区观看体验 | 久久久免费看片 | 免费特级黄色片 | 国产美女网 | 久草免费福利在线观看 | 中文字幕在线观看一区二区 | 黄网在线免费观看 | 日韩欧美精品在线视频 | 亚洲一区日韩精品 | 久久色视频 | 日韩视频在线一区 | 中文字幕乱码一区二区 | 久操视频在线 | 999成人精品| 五月婷婷综合激情 | www.色五月.com | 国产精品久久久久久爽爽爽 | 国产又粗又猛又色又黄网站 | 美女网站久久 | 亚洲精品www久久久久久 | 波多野结衣精品视频 | 成人精品一区二区三区中文字幕 | 国产在线观看99 | 日韩理论片 | 国产第一页精品 | 97免费中文视频在线观看 | 在线你懂的视频 | 国产看片免费 | 91爱在线 | 日本二区三区在线 | 欧美日韩国产精品一区二区三区 | 日韩中文字幕免费视频 | 97视频在线 | 福利视频导航网址 | 国产视频一二区 | 在线精品一区二区 | 中文日韩在线视频 | 国产小视频在线免费观看视频 | 色偷偷av男人天堂 | 天天干天天操天天搞 | 国产一级片毛片 | 欧美国产精品一区二区 | 国产一区二区三区高清播放 | 500部大龄熟乱视频使用方法 | 91精品视频在线观看免费 | 日韩免费视频网站 | 天天干 夜夜操 | 亚洲国产最新 | 国产精品一区二区吃奶在线观看 | 欧美另类交在线观看 | 亚洲免费在线观看视频 | 精品国产精品一区二区夜夜嗨 | 亚洲成色777777在线观看影院 | 成人午夜精品 | 国产精品午夜免费福利视频 | 激情五月看片 | 91少妇精拍在线播放 | 午夜丁香视频在线观看 | 99精品国产免费久久久久久下载 | 免费福利在线播放 | 在线视频 亚洲 | 成人免费视频网址 | 久久黄色网 | 亚洲精品日韩一区二区电影 | 久久五月天综合 | 麻豆传媒视频在线免费观看 | 久久色视频 | 亚洲日本在线视频观看 | 婷婷亚洲五月 | 免费观看午夜视频 | 91综合色 | 日韩欧美高清视频在线观看 | 亚洲天天综合网 | 亚洲天堂网视频在线观看 | 日韩精品1区2区 | 久久免费视频在线观看30 | 午夜三级在线 | 激情婷婷在线观看 | 色视频在线观看 | av丝袜在线 | 国产亚洲精品久久19p | 亚洲黄色免费观看 | 超碰97免费在线 | 午夜精品一二三区 | 久久人人97超碰com | www夜夜操com| 在线成人av | 丁香综合 | 久久精品官网 | 激情丁香久久 | 日韩激情免费视频 | 麻豆影视在线观看 | 日韩免费一区二区 | 九九九九精品九九九九 | 免费能看的黄色片 | 日韩区欧美久久久无人区 | 中文字幕第一 | 国产 精品 资源 | 99热都是精品 | 在线观看国产成人av片 | 国产一级视频在线观看 | 日韩av影视在线观看 | 久久在线一区 | 亚洲国产网站 | 天天操天天爱天天爽 | 精品国产乱码久久 | 超碰97人人干 | a久久免费视频 | 免费国产在线观看 | 久久亚洲欧美日韩精品专区 | 91精品导航 | 亚洲一级黄色片 | 久久精品一二三区白丝高潮 | 91热精品 | 日韩乱理| 蜜臀av性久久久久蜜臀aⅴ流畅 | 中文字幕一区二区三区久久 | 中文字幕在线观看不卡 | 97视频亚洲 | 久操视频在线播放 | 国产热re99久久6国产精品 | 美女黄频网站 | www国产精品com| 九九免费观看视频 | 色激情在线 | 一级黄色片网站 | 久久国产热视频 | 国产精品18毛片一区二区 | 在线免费精品视频 | 久久天天躁狠狠躁亚洲综合公司 | 处女av在线 | 日韩超碰 | 国产精彩在线视频 | 国产精品久久久亚洲 | 日日干天天爽 | 国产一区在线不卡 | 日韩精品无码一区二区三区 | 黄色国产精品 | 亚洲一区二区三区精品在线观看 | 欧美视频在线二区 | 天天天干天天射天天天操 | 欧美精品成人在线 | av黄色国产 | 精品国内自产拍在线观看视频 | 久久不射网站 | 国产91小视频 | 色中色亚洲 | 国模精品一区二区三区 | 伊人伊成久久人综合网站 | 99精品免费网 | 日本中文字幕网站 | 国产精品视频999 | 热久精品 | 日韩中文字幕亚洲一区二区va在线 | 中文字幕欧美日韩va免费视频 | 久久久96| 亚洲精品一区二区在线观看 | 亚洲精品中文字幕视频 | 日韩电影精品一区 | 日日夜操 | 久久九九网站 | 男女免费视频观看 | 国产福利专区 | 国语精品免费视频 | 免费在线日韩 | 又黄又爽又刺激视频 | 91毛片在线观看 | av理论电影 | 亚洲成人黄色在线观看 | 婷婷网站天天婷婷网站 | 亚洲成人免费 | 久久久久国产精品免费免费搜索 | 性色av香蕉一区二区 | 中文在线字幕免费观 | 国产永久免费观看 | 精品视频成人 | 欧美日韩在线观看视频 | 少妇精品久久久一区二区免费 | 91色欧美 | 在线视频日韩精品 | 日韩精品一区二区三区第95 | 欧美色图亚洲图片 | 丁香资源影视免费观看 | 97免费在线观看视频 | 免费视频久久久久 | 国产欧美日韩视频 | 免费视频久久久久 | 香蕉在线观看 | 日韩二区在线 | 久久久久9999亚洲精品 | 成人网页在线免费观看 | 国产在线2020 | 亚洲国产免费网站 | 91秒拍国产福利一区 | 九九在线视频 | 国产91精品看黄网站 | www.成人久久 | 超碰成人网 | 婷婷国产视频 | 91精品在线免费观看 | 亚洲片在线 | 免费成人黄色 | 日韩av视屏在线观看 | 中文字幕在线视频一区二区三区 | 日韩一级精品 | 色婷婷视频在线 | 中文字幕国产精品一区二区 | 麻豆传媒视频在线免费观看 | 国内精品久久久久影院一蜜桃 | 手机av电影在线 | 中文字幕一区二区三区四区 | 久久成人18免费网站 | 六月天色婷婷 | 婷婷色六月天 | 国产 亚洲 欧美 在线 | 久青草视频 | av久久久久久 | 婷婷国产一区二区三区 | 亚洲国产精品500在线观看 | 99精品国产免费久久 | 国产精品理论片 | 成人av片免费观看app下载 | 日日操操操 | 青青网视频 | 国产成人在线网站 | 日韩欧美亚州 | 国产成人精品av在线观 | 蜜桃麻豆www久久囤产精品 | 亚洲国产精品成人综合 | 丁香婷五月| 久久久久久在线观看 | 青青草视频精品 | 欧美日韩色婷婷 | 久久8精品| 国产精品门事件 | 伊人五月在线 | av色综合| 最近中文字幕免费视频 | 99久久这里有精品 | 国产一区免费在线观看 | 91在线在线观看 | 麻豆成人在线观看 | 国产精品自产拍在线观看蜜 | 麻豆91视频 | 亚洲成人精品av | av手机在线播放 | 天天操天天操天天操天天操天天操天天操 | 色噜噜在线观看视频 | 国产中文字幕网 | 999超碰| 欧美国产日韩激情 | 精品高清美女精品国产区 | 亚洲黄色软件 | 精品亚洲二区 | 麻豆激情电影 | 国产高清在线a视频大全 | 国产午夜av | 免费成人在线观看 | 国产精品99久久久精品 | 亚洲免费永久精品国产 | 国产高清不卡av | 亚洲日本欧美在线 | 三级视频日韩 | 国产亚洲精品美女久久 | 中文在线a√在线 | 国产自在线 | 亚洲精品免费在线播放 | 精品久久福利 | 国产黄色一级片 | 亚洲黄色片一级 | 在线观看国产区 | 日韩一级黄色片 | 亚洲激情在线 | 欧美精品久久久久久久久久 | 亚洲精品男人天堂 | 午夜视频导航 | 亚洲免费av在线播放 | 超碰在线网 | 国产精品99久久久精品免费观看 | 999久久久久久久久 69av视频在线观看 | 国内精品久久久久影院男同志 | 中文字幕在线免费播放 | av大全在线免费观看 | 91精品国产九九九久久久亚洲 | 久久在线观看视频 | 91入口在线观看 | 国产91欧美 | 久久久www成人免费毛片麻豆 | 精品国产福利在线 | 欧美精品在线观看免费 | 中文字幕国产一区 | 免费观看v片在线观看 | 久久在线免费视频 | 99视频在线免费观看 | 国内久久久 | 91麻豆精品国产91久久久无限制版 | 久久久精品久久 | jizz欧美性9 国产一区高清在线观看 | 又黄又网站 | 亚洲精品视频免费观看 | 四虎影视欧美 | 久久的色 | 午夜视频在线观看一区二区三区 | 日本黄色免费在线观看 | 中文字幕在线免费 | 久久99精品视频 | 九九热在线精品 | 日韩在线三区 | 久99久精品| 探花视频免费观看高清视频 | 精品久久久久一区二区国产 | 欧美a√在线 | 美女性爽视频国产免费app | 三三级黄色片之日韩 | 久久综合电影 | 国产精品久久久久久久久免费看 | 亚洲黄色片 | 日韩精品电影在线播放 | 偷拍区另类综合在线 | 亚洲成人家庭影院 | 香蕉视频一级 | 久久爱综合 | 91污视频在线 | 国产乱对白刺激视频不卡 | 日韩午夜电影 | 日韩在线视频网址 | 麻花天美星空视频 | 欧美另类sm图片 | 天天干天天玩天天操 | 欧美精品一区二区三区四区在线 | 色五丁香 | 麻豆免费视频 | 久热精品国产 | www天天操 | 亚洲日本在线视频观看 | 中文字幕中文字幕 | 嫩模bbw搡bbbb搡bbbb | 久久无码精品一区二区三区 | 一级国产视频 | 三级黄色免费 | 精品国产一区二区三区久久久 | 91大神在线观看视频 | 99人久久精品视频最新地址 | 国产一级在线观看视频 | 亚洲综合视频在线播放 | 成片免费 | 玖玖精品在线 | 久久在线播放 | 日本一区二区高清不卡 | 国产精品中文字幕在线播放 | 亚洲影院天堂 | 国产亚洲精品久久网站 | 色综合夜色一区 | 狠狠的干 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产真实在线 | 黄色特级毛片 | 欧美日韩视频一区二区三区 | 四虎影视精品永久在线观看 | 一区二区伦理电影 | 国产免费观看高清完整版 | 亚洲精品综合一二三区在线观看 | 99久久久国产精品免费99 | 99热这里只有精品免费 | 人人爽人人爽人人 | 97视频在线看 | 在线观看激情av | 色偷偷88欧美精品久久久 | 久久久91精品国产 | 最近中文字幕第一页 | 国产精品手机在线 | 国产精品免费av | 成人午夜电影久久影院 | 日韩在线观看高清 | 一区免费视频 | 最近日本韩国中文字幕 | 黄色91免费观看 | 91久久国产自产拍夜夜嗨 | 国产亚洲视频在线 | 日韩精品一区二区三区视频播放 | 久久视频在线观看中文字幕 | 国产美女免费观看 | h视频日本 | 亚洲国产精品日韩 | 丁香激情五月 | av噜噜噜在线播放 | 国产免费观看久久 | 国产免费xvideos视频入口 | 伊人影院在线观看 | 免费av的网站 | 天天天天天天天操 | 伊人色播 | 男女激情片在线观看 | 91在线免费播放视频 | 日韩精品视频免费在线观看 | 免费网站看av片 | 国产精品久久久99 | 国产婷婷精品 | 亚洲一区二区三区四区精品 | 色婷婷综合久久久中文字幕 | 国内精品免费久久影院 | 在线观看国产一区 | 五月天六月色 | 中文字幕日本电影 | 毛片99| 天天天色综合a | 91精品免费视频 | 最新真实国产在线视频 | 免费色av | 国产精品一区二区免费看 | 九九久久久久久久久激情 | 在线观看免费av网站 | 麻豆视屏 | 亚洲午夜精品久久久 | 国产精品久久久亚洲 | 免费看黄的 | 六月婷婷久香在线视频 | 一区在线观看视频 | 园产精品久久久久久久7电影 | 欧美日韩一区二区三区视频 | 国产亚洲视频中文字幕视频 | 中文在线中文a | 麻豆91在线播放 | 91精品婷婷国产综合久久蝌蚪 | 国产专区一 | 人人爽人人爱 | 综合激情网... | 亚洲精选视频在线 | 日韩在线一区二区免费 | 天天草av | 人人爱爱人人 | 国产精品一区二区白浆 | 久久久国产精品一区二区三区 | 亚洲成av片人久久久 | 亚洲视频2 | 91视频电影 | 丝袜美腿亚洲 | 亚洲精品视频在线观看免费视频 | 欧美日韩高清 | 国产免费作爱视频 | 91av视频观看 | 日韩激情免费视频 | 国产精品女同一区二区三区久久夜 | 在线观看亚洲成人 | 奇米影视777影音先锋 | 国产高清视频免费最新在线 | 国内免费久久久久久久久久久 | 久久国产精品一国产精品 | 97天天干 | 成人午夜剧场在线观看 | 国产乱码精品一区二区三区介绍 | 国产原创中文在线 | 日韩免费一区 | 中文字幕丝袜 | 在线观看中文字幕视频 | 国产婷婷视频在线 | 天天爱天天色 | 麻豆传媒视频观看 | 中文字幕国产精品 | 欧美一二三区播放 | 色开心 | 国产99久久九九精品 | 国产精品久久综合 | 国产成人在线综合 | 欧美韩日在线 | 九九九九精品九九九九 | 丰满少妇对白在线偷拍 | 亚洲一级电影视频 | 欧美成亚洲 | 国产蜜臀av | av大全在线播放 | 亚洲精品国产综合久久 | 91网址在线 | 国产.精品.日韩.另类.中文.在线.播放 | av在线免费在线 | 亚洲涩综合 | 中文字幕有码在线观看 | 91视频xxxx| 精品国产一区二区三区久久久久久 | 亚洲精品国产区 | 久久人人爽人人爽人人片av软件 | 涩涩色亚洲一区 | 欧美人zozo| 国产又黄又爽无遮挡 | 丰满少妇在线观看网站 | 欧美激情va永久在线播放 | 99精品视频播放 | 手机av在线网站 | 国产视频一区在线播放 | 成人一级黄色片 | 国产成人精品一区二区三区 | 亚洲精品乱码久久久久v最新版 | 中文字幕在线观看视频一区二区三区 | 国产三级香港三韩国三级 | www.国产在线视频 | 色天天久久| 国产精品6999成人免费视频 | 久久久精品欧美 | 成人av地址| 欧美成人手机版 | 婷婷av网站 | 91欧美国产| 一区二区三区四区久久 | 亚洲,播放 | 国产色 在线 | 日韩在线视频观看 | 91看片在线看片 | 国产日产精品一区二区三区四区 | 亚洲一级二级 | 狠狠狠狠狠狠操 | 亚洲天天综合 | 狠狠色丁香婷婷综合基地 | 精品国产午夜 | 日本爱爱片 | 久久欧美在线电影 | 麻豆视频免费 | 久久精品xxx| 公与妇乱理三级xxx 在线观看视频在线观看 | 免费看黄色小说的网站 | 激情导航 | 久久成电影 | 99国产精品视频免费观看一公开 | 激情www| 久久草网站 | 国内精品久久久久影院男同志 | 日韩免费大片 | 毛片区 | 中文字幕三区 | 欧美一级日韩三级 | 日韩欧美在线视频一区二区 | 国产精品一区专区欧美日韩 | 天天搞天天 | 超碰在线cao | 国产精品99久久久久久久久久久久 | 亚洲自拍偷拍色图 | 在线激情小视频 | 九九九九九九精品任你躁 | 在线97 | 超碰97.com| 成人午夜剧场在线观看 | 人人看看人人 | 精品视频久久久久久 | 日韩中文在线字幕 | 欧美日韩99 | 韩国一区二区三区在线观看 | 99色精品视频 | 天天色天天干天天色 | 日韩美女黄色片 | www视频在线播放 | 亚洲视频一区二区三区在线观看 | 成人欧美在线 | www.色午夜,com | 成人av资源在线 | av中文天堂在线 | 97视频在线观看网址 | 天堂av在线网站 | 精品久久在线 | www.天天干| 懂色av一区二区在线播放 | 一色屋精品视频在线观看 | av超碰在线观看 | 国产精品高清在线观看 | 久久夜夜操 | 麻豆国产电影 | 在线视频欧美精品 | 欧美污网站 | www久| 国产传媒中文字幕 | 久久视频精品在线 | 日韩首页 | 国内久久视频 | 91精品国产乱码在线观看 | av成人在线网站 | 免费人成网 | 中文字幕中文字幕在线中文字幕三区 | 精品国产免费av | 日本黄色免费观看 | 叶爱av在线 | 91高清在线看 | 亚洲成熟女人毛片在线 | 一区二区三区中文字幕在线观看 | 国产成人精品久久久久蜜臀 | av中文字幕在线免费观看 | 西西44人体做爰大胆视频 | 91九色在线视频 | 久久视频免费观看 | 欧美午夜精品久久久久久孕妇 | 在线中文字幕播放 | 特级毛片网站 | 在线观看免费高清视频大全追剧 | 一区二区三区视频在线 | 国产一级精品在线观看 | 91香蕉视频污在线 | 国产精品久久久久久久久久久久午 | 天堂av观看 | 精品日韩中文字幕 | 亚洲一级在线观看 | 国产精品国产三级国产aⅴ无密码 | 国产免费人人看 | 激情婷婷亚洲 | 中文字幕a∨在线乱码免费看 | 日韩在线视频免费播放 | 欧美五月婷婷 | 中文字幕乱码亚洲精品一区 | 亚洲激情 在线 | 不卡的av在线播放 | 亚洲精品美女久久久久网站 | 97av视频| 99精品视频99| 99久热在线精品 | 在线视频 91 | 国产伦理一区二区三区 | 精品国产aⅴ麻豆 | 亚洲视频aaa | 二区三区精品 | 波多野结衣视频一区 | 成人h在线| 免费一级片视频 | 国产在线高清 | 免费av 在线 | 国产精品99久久久久久久久 | www..com黄色片 | 日韩电影精品 | 久久久久国产精品一区二区 | 久久成人国产精品入口 | 波多野结衣久久资源 | 精品国产一二三 | 日日夜夜天天久久 | 激情欧美xxxx | 麻豆免费在线播放 | 欧美aa一级片 | 免费日韩av片| 免费a级黄色毛片 | 国产精品视频不卡 | 国产中文字幕国产 | 欧美一级视频在线观看 | 精品成人网 | 国产一级二级三级在线观看 | 国产高清av | 久久久蜜桃一区二区 | 久久免费看毛片 | 2019精品手机国产品在线 | 黄色天堂在线观看 | 天天爱天天舔 | 一区二区三区在线观看中文字幕 | 国产小视频在线观看免费 | 91久久黄色| 九色91av| 综合网五月天 | 国产中的精品av小宝探花 | 国产精品成人aaaaa网站 | 亚洲免费在线播放视频 | 日韩免费一二三区 | 欧美日韩在线观看不卡 | 久久久穴 | 中文字幕在线观看视频免费 | 少妇bbw搡bbbb搡bbbb | 成人在线播放视频 | 久草在线视频网站 | 国产精品18videosex性欧美 | 天天干天天操天天拍 | 麻豆精品视频在线 | 精品9999| 国产在线美女 | 亚洲理论片 | a级国产毛片 | 不卡视频一区二区三区 | 久久精品久久久精品美女 | 夜夜爽88888免费视频4848 | 97精品在线 | 久久久国产高清 | 精品一二三四视频 | 欧美一级免费高清 | 国产精品亚州 | 超碰在97 | 中文字幕日本在线 | 成人黄色小说视频 | 久久综合久色欧美综合狠狠 | 久久艹人人 | 国产成人久久 | 国产精品高清一区二区三区 | 天天操夜夜操夜夜操 | 久久精品99视频 | 一区二区网 | 亚洲国产精品500在线观看 | 99热.com| 国产精品剧情在线亚洲 | 久久伊人八月婷婷综合激情 | 91人人干| 国产网站在线免费观看 | 在线观看av网 | 久久久久久久电影 | 亚洲高清不卡av | 日韩欧美视频在线观看免费 | 天天天在线综合网 | 密桃av在线 | 欧美日韩在线观看一区二区三区 | 在线看成人 | 久久午夜电影院 | 国产黄色精品视频 | www免费视频com━ | 九九热在线观看 | 亚洲视频一区二区三区在线观看 | 天天干天天看 | 色综合久久综合中文综合网 | 毛片1000部免费看 | 久久综合狠狠狠色97 | www.久久久.com| 亚洲成人频道 | 中文字幕在线观看亚洲 | 国产精品久久久久久久久久白浆 | 中文字幕av在线免费 | 亚洲欧美国产日韩在线观看 | 在线观看视频黄色 | 国产精品一区二区精品视频免费看 | 99re国产视频 | 久久国产手机看片 | 欧美高清视频不卡网 | 成人国产精品免费观看 | av中文字幕不卡 | 91精品国产综合久久福利不卡 | 日韩动漫免费观看高清完整版在线观看 | 国产成人精品综合久久久 | 在线观看日韩国产 | 免费看在线看www777 | 最近乱久中文字幕 | 久久精品国产亚洲aⅴ | 久久久五月天 | 亚洲va综合va国产va中文 | 久久一线 | 综合国产在线观看 | 中文字幕av一区二区三区四区 | 色婷婷啪啪免费在线电影观看 | 99久久99视频只有精品 | 天天做天天看 | 中文字幕在线观看网址 | 久久公开免费视频 | 免费视频资源 | 午夜视频免费播放 | 亚洲精品字幕在线观看 | 国产精品一区二区久久精品爱微奶 | 欧美日韩免费一区 | 欧美日韩免费一区 | 亚洲欧洲精品视频 | 波多野结衣电影一区二区 | 麻豆视频免费网站 | 欧美精品在线观看免费 | 成人午夜网址 | 丁香综合激情 | 黄色av在| 欧美二区视频 | 久久草网站| 四虎在线视频 | 91精品久久久久久久久久入口 | 久久涩视频 | 黄色官网在线观看 | 天天干.com | 97看片 | 狠狠躁夜夜躁人人爽超碰91 | 国产涩涩在线观看 | 色在线视频网 | 在线有码中文 | 丁香花在线视频观看免费 | 国产一区观看 | 免费三级黄 | 在线免费视频你懂的 | 国产黄免费在线观看 | 在线观看中文字幕 | 99久久国产免费,99久久国产免费大片 | 天天天天色射综合 | 日韩欧美视频一区二区 | 玖玖在线资源 | 中文字幕在线观看视频一区 | www.五月天激情 | www夜夜操 | 正在播放国产一区 | 日韩黄色在线电影 | 久草视频免费在线播放 | 国产精品三级视频 | 国产精品久久久久影视 | av一区二区在线观看中文字幕 | 探花视频在线观看+在线播放 | 天堂在线v | 伊人五月天.com | 免费视频xnxx com | 免费在线观看av电影 | 97超在线 | 99视频这里只有 | www.亚洲视频.com | 欧美日比视频 | 国产精品久久久区三区天天噜 | 国产美女永久免费 | 国产人成看黄久久久久久久久 | www.国产毛片 | 国产69精品久久久久久久久久 | 亚洲成年人av | 免费在线一区二区 | 精品一区二区在线看 | 首页av在线 | 欧美另类xxxxx | 热久久在线视频 | 在线黄色av电影 | 97免费在线视频 | 在线免费av网 | 最近中文字幕国语免费高清6 | 超碰97人人爱 | 久久久资源 | 久久久国产精华液 | 黄色大全免费网站 | 日韩免费不卡av | 色播五月激情综合网 | 在线国产片 | 日韩欧美精品在线视频 | 黄免费在线观看 | 日本黄色大片儿 | 国产亚洲一区二区在线观看 | 亚洲 欧美 综合 在线 精品 | 成人a免费看 | 欧美日韩在线电影 | 日本中文在线播放 | 国产精品免费看 | 中文字幕在线观看完整 | 天天操天天色天天射 | 欧美日韩久久不卡 | 欧美老人xxxx18 | 不卡中文字幕在线 | 精品在线免费观看 | www.久久成人 | 成人亚洲精品久久久久 | 欧美激情视频三区 | 亚洲有 在线 | 色综合久久精品 | 奇米影视777影音先锋 | 亚洲精品视频在线观看免费视频 | 欧美综合在线观看 | 国产美女精彩久久 | 日本中文字幕免费观看 | 一二区精品 | 嫩模bbw搡bbbb搡bbbb | 最新国产精品拍自在线播放 | 国产亚洲精品中文字幕 | 婷婷夜夜 | 久久久久久国产精品久久 | av中文字幕不卡 | 色欧美88888久久久久久影院 | 麻豆视频国产精品 | 午夜久久| 欧美日韩大片在线观看 | 美女黄视频免费 | 成人黄色视 | 91刺激视频 | 中文字幕在线第一页 | 欧美性生活久久 | 精品久久久久久电影 | 天堂视频中文在线 | 国产一区电影在线观看 | 9草在线 | 国产精品亚洲片夜色在线 | 日韩久久精品一区二区三区 | 国产1级视频 | 97视频入口免费观看 | 91亚洲精| 黄色软件视频网站 | 欧美最猛性xxxx | 一区二区三区久久精品 | 四虎在线免费视频 | 狠狠地日 | 亚洲第一香蕉视频 | 日韩中文字幕免费在线播放 | 99欧美视频 | 天天曰视频| 在线成人高清电影 | 亚洲精品久久激情国产片 | 国产一级黄色片免费看 | 国产精品久久久 | 成人免费在线电影 | 在线免费观看国产黄色 | 狠狠色丁香婷婷综合橹88 | v片在线播放 | 国产亚洲va综合人人澡精品 | 国产在线播放一区二区三区 | 中文字幕av一区二区三区四区 | 国产一区二区影院 | 99这里有精品 | www.com黄 | 中文字幕麻豆 | 在线免费精品视频 | 中文字幕乱码一区二区 | 最新国产福利 | 超碰com | 色婷婷视频在线 | 狠狠色丁香婷婷综合基地 | 91香蕉视频在线 | 51久久夜色精品国产麻豆 | 久久免费视频这里只有精品 | 免费日韩一区二区 | 欧美一级在线 | 精品一区在线 | 一级黄色免费 | 狠狠躁天天躁综合网 | 97人人澡人人添人人爽超碰 | 国产裸体无遮挡 | 黄色小说视频网站 | 久久免费精品视频 | 久久欧洲视频 | 在线观看视频一区二区三区 | 激情av在线资源 | 天天色综合1 | 青青草视频精品 | 日本黄色免费网站 | 欧美人体xx | 亚洲午夜小视频 | 色在线视频网 | 一区二区三区观看 |