一、JPA概述:
JPA的全稱是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的規(guī)范,內(nèi)部是由一系列的接口和抽象類構(gòu)成。JPA通過JDK 5.0注解描述對象-關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中。
JPA的優(yōu)勢:標(biāo)準(zhǔn)化、容器級特性的支持、簡單方便、查詢能力、高級特性
二、JPA與Hibernate的關(guān)系:
JPA規(guī)范本質(zhì)上就是一種ORM規(guī)范,注意不是ORM框架——因為JPA并未提供ORM實現(xiàn),它只是制訂了一些規(guī)范,提供了一些編程的API接口,但具體實現(xiàn)則由服務(wù)廠商來提供實現(xiàn)。JPA和Hibernate的關(guān)系就像JDBC和JDBC驅(qū)動的關(guān)系,JPA是規(guī)范,Hibernate除了作為ORM框架之外,它也是一種JPA實現(xiàn)。
三、JPA環(huán)境搭建:
1、創(chuàng)建一個maven工程,在pom.xml中導(dǎo)入對應(yīng)的坐標(biāo)
1 <properties>
2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3 <project.hibernate.version>5.0.7.Final</project.hibernate.version>
4 </properties>
5
6 <dependencies>
7 <!-- junit -->
8 <dependency>
9 <groupId>junit</groupId>
10 <artifactId>junit</artifactId>
11 <version>4.12</version>
12 <scope>test</scope>
13 </dependency>
14
15 <!-- hibernate對jpa的支持包 -->
16 <dependency>
17 <groupId>org.hibernate</groupId>
18 <artifactId>hibernate-entitymanager</artifactId>
19 <version>${project.hibernate.version}</version>
20 </dependency>
21
22 <!-- c3p0 -->
23 <dependency>
24 <groupId>org.hibernate</groupId>
25 <artifactId>hibernate-c3p0</artifactId>
26 <version>${project.hibernate.version}</version>
27 </dependency>
28
29 <!-- log日志 -->
30 <dependency>
31 <groupId>log4j</groupId>
32 <artifactId>log4j</artifactId>
33 <version>1.2.17</version>
34 </dependency>
35
36 <!-- Mysql and MariaDB -->
37 <dependency>
38 <groupId>mysql</groupId>
39 <artifactId>mysql-connector-java</artifactId>
40 <version>5.1.6</version>
41 </dependency>
42 </dependencies>
2、編寫實體類和數(shù)據(jù)表的映射配置,創(chuàng)建實體類以后,使用對應(yīng)的注釋配置映射關(guān)系
@Entity
作用:指定當(dāng)前類是實體類。
@Table
作用:指定實體類和表之間的對應(yīng)關(guān)系。
屬性:
name:指定數(shù)據(jù)庫表的名稱
@Id
作用:指定當(dāng)前字段是主鍵。
@GeneratedValue
作用:指定主鍵的生成方式。。
屬性:
strategy :指定主鍵生成策略。
@Column
作用:指定實體類屬性和數(shù)據(jù)庫表之間的對應(yīng)關(guān)系
屬性:
name:指定數(shù)據(jù)庫表的列名稱。
unique:是否唯一
nullable:是否可以為空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定義建表時創(chuàng)建此列的DDL
secondaryTable: 從表名。如果此列不建在主表上(默認(rèn)建在主表),該屬性定義該列所在從表的名字搭建開發(fā)環(huán)境[重點]
|