JPA入门简介与搭建HelloWorld(附代码下载)
場景
在學習JPA之前先來了解下JDBC與各大數據庫的關系。
很久之前出現了很多數據庫比如Mysql、Oracle、SqlServer、DB2等。這就導致了應用程序要連哪個數據庫就要使用哪個數據庫的API。
所以JDBC出現了,定義了一組規范,由應用程序調用JDBC,進而調用所需數據庫。
?
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
什么是JPA
Java Persistence API:用于對象持久化的API
Java EE5.0平臺標準的ORM規范,使得應用程序以統一的方式訪問持久層。
?
JPA與Hibernate的關系
1.JPA是hibernate的一個抽象,類比于JDBC與JDBC驅動的關系。
2.JPA是規范,JPA本質上就是一種ORM規范,而不是一種ORM框架。因為JPA并未提供ORM實現,它只是制訂了一些規范,提供了一些編程的 API 接口,但具體實現則由 ORM 廠商提供實現。
3.Hibernate 是實現:Hibernate 除了作為 ORM 框架之外,它也是一種 JPA 實現
JPA的優勢
標準化:? 提供相同的 API,這保證了基于JPA 開發的企業應用能夠經過少量的修改就能夠在不同的 JPA 框架下運行。
簡單易用,集成方便:? JPA 的主要目標之一就是提供更加簡單的編程模型,在 JPA 框架下創建實體和創建 Java? 類一樣簡單,只需要使用 javax.persistence.Entity 進行注釋;JPA 的框架和接口也都非常簡單,
可媲美JDBC的查詢能力:? JPA的查詢語言是面向對象的,JPA定義了獨特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
支持面向對象的高級特性: JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的復雜關系,最大限度的使用面向對象的模型
JPA包括3方面的技術
ORM? 映射元數據:JPA 支持 XML 和? JDK 5.0 注解兩種元數據的形式,元數據描述對象和表之間的映射關系,框架據此將實體對象持久化到數據庫表中。?
JPA 的 API:用來操作實體對象,執行CRUD操作,框架在后臺完成所有的事情,開發者從繁瑣的 JDBC和 SQL代碼中解脫出來。?
查詢語言(JPQL):這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序和具體的? SQL 緊密耦合。
搭建HelloWorld
打開Eclipse-File-New JPA Project
?
點擊Next
?
這里要選擇Target runtime 為自己的jdk,以及JPA Version ,這里是2.0,然后點擊next后再點擊next
?
第一次來到此頁面不會有EclipseLink,點擊右邊的下載按鈕
?
選擇指定版本點擊next進行下載,這里選擇的是EclipseLink2.5.2
下載完成點擊Finish后項目結構如下
?
會自動生成一個persistence.xml
加入依賴
在項目下新建lib目錄,然后加入相關jar包
?
修改配置文件
雙擊打開上面的persistnece.xml,選擇Connection視圖,然后選擇Transaction Type 為Resource Local
然后依次配置好數據庫的驅動等,其中URL中jpa對應的就是數據庫名。
?
然后保存,使用Source視圖查看,此時在properties下就會有如下代碼
<properties><property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="123"/>?? </properties>然后再在配置文件中加入Hibernate相關的配置信息。
<property name="hibernate.format_sql" value="true"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value= "update"/>新增實體類?
在src下新建包com.badao.jpa.helloworld
包下新建實體類Customer,通過添加注解的方式完成實體類到數據庫的映射。
1.在類名上添加@Entity表明是實體類。
2.在類名上添加@Table注解,并使用name屬性與數據庫中的表名相對應。
3.在主鍵ID的get方法上使用@Id聲明是主鍵,并使用@GeneratedValue注解聲明主鍵策略。
4.在某些實體類屬性名與數據庫列名不對應的屬性的get方法上要使用@Column注解進行映射。
package com.badao.jpa.helloworld;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name="JPA_CUSTOMERS") public class Customer {private Integer id;private String lastName;private String email;private int age;@GeneratedValue(strategy = GenerationType.IDENTITY)@Idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name="LAST_NAME")public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}添加完實體類后還要回到配置文件中添加一行配置
<class>com.badao.jpa.helloworld.Customer</class>完整配置文件代碼
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 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="HelloJPA" transaction-type="RESOURCE_LOCAL"><!-- 添加持久化類 --><class>com.badao.jpa.helloworld.Customer</class><properties><property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="523627"/><!-- 配置 JPA 實現產品的基本屬性. 配置 hibernate 的基本屬性 --><property name="hibernate.format_sql" value="true"/><property name="hibernate.show_sql" value="true"/><property name="hibernate.hbm2ddl.auto" value="update"/></properties></persistence-unit> </persistence>新建表
打開數據庫jpa并新建表jpa_customers,設計字段如下
?
新建啟動類
在包下新建Main類,然后編寫main方法
package com.badao.jpa.helloworld;import java.util.Date;import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence;public class Main {public static void main(String[] args) {//1. 創建 EntitymanagerFactory? 要與配置文件中一致String persistenceUnitName = "HelloJPA";EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory(persistenceUnitName);//2. 創建 EntityManager. 類似于 Hibernate 的 SessionFactoryEntityManager entityManager = entityManagerFactory.createEntityManager();//3. 開啟事務EntityTransaction transaction = entityManager.getTransaction();transaction.begin();//4. 進行持久化操作Customer customer = new Customer();customer.setAge(12);customer.setEmail("badao@liumang.com");customer.setLastName("Badao");entityManager.persist(customer);//5. 提交事務transaction.commit();//6. 關閉 EntityManagerentityManager.close();//7. 關閉 EntityManagerFactoryentityManagerFactory.close();} }然后運行main方法
?
然后刷新數據庫中的數據?
示例代碼下載
關注公眾號:
霸道的程序猿
回復:
HelloJPA
總結
以上是生活随笔為你收集整理的JPA入门简介与搭建HelloWorld(附代码下载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JPA连接Mysql数据库时提示:Tab
- 下一篇: JPA的基本注解