JPA顧名思義就是Java Persistence API的意思,是JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。java
1.jpa具備什麼優點?mysql
(1)、標準化spring
JPA 是 JCP 組織發佈的 Java EE 標準之一,所以任何聲稱符合 JPA 標準的框架都遵循一樣的架構,提供相同的訪問API,這保證了基於JPA開發的企業應用可以通過少許的修改就可以在不一樣的JPA框架下運行。sql
(2)、容器級特性的支持數據庫
JPA框架中支持大數據集、事務、併發等容器級事務,這使得 JPA 超越了簡單持久化框架的侷限,在企業應用發揮更大的做用。編程
(3)、簡單方便設計模式
JPA的主要目標之一就是提供更加簡單的編程模型:在JPA框架下建立實體和建立Java 類同樣簡單,沒有任何的約束和限制,只須要使用 javax.persistence.Entity進行註釋,JPA的框架和接口也都很是簡單,沒有太多特別的規則和設計模式的要求,開發者能夠很容易的掌握。JPA基於非侵入式原則設計,所以能夠很容易的和其它框架或者容器集成。springboot
(4)、查詢能力架構
JPA的查詢語言是面向對象而非面向數據庫的,它以面向對象的天然語法構造查詢語句,能夠當作是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴展,它是針對實體的一種查詢語言,操做對象是實體,而不是關係數據庫的表,並且可以支持批量更新和修改、JOIN、GROUP BY、HAVING 等一般只有 SQL 纔可以提供的高級查詢特性,甚至還可以支持子查詢。併發
(5)、高級特性
JPA 中可以支持面向對象的高級特性,如類之間的繼承、多態和類之間的複雜關係,這樣的支持可以讓開發者最大限度的使用面向對象的模型設計企業應用,而不須要自行處理這些特性在關係數據庫的持久化。
註解 |
做用 |
@Entity |
聲明類爲實體或表 |
@Table |
聲明表名 |
@Basic |
指定非約束明確的各個字段 |
@Embedded |
指定類或它的值是一個可嵌入的類的實例的實體的屬性 |
@Id |
指定的類的屬性,用於識別(一個表中的主鍵) |
@GeneratedValue |
指定如何標識屬性能夠被初始化,例如自動、手動、或從序列表中得到的值 |
@Transient |
指定的屬性,它是不持久的,即:該值永遠不會存儲在數據庫中 |
@Column |
指定持久屬性欄屬性 |
@SequenceGenerator |
指定在@GeneratedValue註解中指定的屬性的值。它建立了一個序列 |
@TableGenerator |
指定在@GeneratedValue批註指定屬性的值發生器。它創造了的值生成的表 |
@AccessType |
這種類型的註釋用於設置訪問類型。若是設置@AccessType(FIELD),則能夠直接訪問變量而且不須要getter和setter,但必須爲public。若是設置@AccessType(PROPERTY),經過getter和setter方法訪問Entity的變量 |
@JoinColumn |
指定一個實體組織或實體的集合。這是用在多對一和一對多關聯 |
@UniqueConstraint |
指定的字段和用於主要或輔助表的惟一約束 |
@ColumnResult |
參考使用select子句的SQL查詢中的列名 |
@ManyToMany |
定義了鏈接表之間的多對多一對多的關係 |
@ManyToOne |
定義了鏈接表之間的多對一的關係 |
@OneToMany |
定義了鏈接表之間存在一個一對多的關係 |
@OneToOne |
定義了鏈接表之間有一個一對一的關係 |
@NamedQueries |
指定命名查詢的列表 |
@NamedQuery |
指定使用靜態名稱的查詢 |
1.依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version>
</dependency>
2.配置文件
application.properties #DB Configation spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=2119 # JPAConfiguration spring.jpa.database=mysql spring.jpa.show-sql=true spring.jpa.generate-ddl=true
application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 2119
jpa:
database: mysql
show-sql: true
generate-ddl: true
freemarker:
suffix: .ftl
3.實體類:
@Entity @Table(name="user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String username; private String password; private String name; }
4.數據訪問接口:
public interface UserDao extends JpaRepository<User,Integer>{ }