JPA之初體驗

JPA全稱爲Java Persistence API,即Java持久化APIjava

JPA是Hibernate的一個抽象(就像JDBC和JDBC驅動的關係),從功能上來講,JPA是Hibernate功能的一個子集。mysql

使用JPA持久化對象的步驟sql

1.建立persistence.xml,在這個文件中配置持久化單元數據庫

>須要指定跟哪一個數據庫進行交互框架

>須要指定JPA使用哪一個持久化的框架以及配置該框架的基本屬性ide

2.建立實體類,使用annotation來描述實體跟數據庫表之間的映射關係ui

3.使用JPA API完成數據增刪改查操做this

>建立EntityManagerFactory(對應Hibernate中的SessionFactory)url

>建立EntityManager(對應Hibernate中的Session).net

 

1.在項目中加入Hibernate的required和jpa文件夾下的全部jar包,加入MySQL驅動包

2.新建JPA項目

3.配置persistence.xml,ppersistence.xml文件打成jar包後,必須保存在META-INF文件夾下

<?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="jpa-1" transaction-type="RESOURCE_LOCAL">
		<!-- 配置使用什麼ORM產品來做爲JPA的實現 1.實際上配置的是javax.persistence.spi.PersistenceProvider接口的實現類 
			2.若JPA項目中只有一個JPA的實現產品,則也能夠不配置該節點 -->
		<provider>org.hibernate.ejb.HibernatePersistence</provider>

		<!-- 添加持久化類 -->
		<class>com.f145a.jpa.helloworld.Customer</class>

		<properties>
			<!-- 鏈接數據庫的基本信息 -->
			<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="123456" />

			<!-- 配置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>

4.建立實體類Customer.java

@Entity:表示該類是一個可持久化實體類,標記了該註釋的類能夠由實體管理器EntityManager來管理

@Table:表示該實體類映射爲數據庫中的指定的一個表。使用name屬性指定數據庫的表名,若是表名與類名相同,那麼能夠省去name屬性(以下例子便可省去name屬性)

@Id:表示該屬性爲該實體的主鍵。一般置於屬性聲明語句以前,也可置於屬性的getter方法前(以下例子)

@GeneratedValue:設置Id的生成規則。經過strategy屬性指定,默認狀況下,JPA自動選擇一個最適合底層數據庫的主鍵生成策略:SQLServer對應identity,MySQL對應autoincrement

在javax.presistence.GenerationType中定義瞭如下幾種可供選擇的策略:

-IDENTITY:採用數據庫ID自增加的方式來自增主鍵字段,Oracle不支持這種方式

-AUTO:JPA自動選擇合適的策略,是默認選項

-SEQUENCE:經過序列產生主鍵,經過@SequenceGenerator註解指定序列名,MySQl不支持這種方式

-TABLE:經過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可使應用易於數據庫移植

@Column:表示實體類的屬性對應表中的指定字段。用name屬性指定數據表的列名,如實體的屬性與其映射的數據表的列名相同便可省略

@Basic:表示一個簡單的屬性到數據庫表的字段映射,對於沒有任何標註的getxx()方法,默認即爲@Basic

package com.f145a.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;

@Table(name="customer")
@Entity
public class Customer {

	private Integer id;
	private String lastName;
	private String email;
	private int age;
	
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Id
	public 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;
	}
	
}

5.實現mian方法Main.java

package com.f145a.jpa.helloworld;

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="jpa-1";
		EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
		//2.建立EntityManager
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		//3。開啓事務
		EntityTransaction transaction = entityManager.getTransaction();
		transaction.begin();
		//4.進行持久化操做
		Customer customer=new Customer();
		customer.setAge(34);
		customer.setEmail("tom@qq.com");
		customer.setLastName("Tom");
		
		entityManager.persist(customer);
		//5.提交事務
		transaction.commit();
		//6.關閉EntityManager
		entityManager.close();
		//7.關閉EntityManagerFactory
		entityManagerFactory.close();
	
	}
}

6.運行Main類,能夠看到數據庫中新建了一個customer表,並插入了一條數據

歡迎訪問個人我的博客 http://www.chengzequn.top

相關文章
相關標籤/搜索