JPA(二)JPA配置
阿新 • • 發佈:2018-12-25
一、依賴匯入,以maven 工程匯入座標為例
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.hibernate.version>5.0.7.Final</project.hibernate.version>
</properties>
<dependencies>
<!-- junit -->
<dependency >
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<!-- hibernate 對 jpa 的支援包 -->
<dependency>
<groupId >org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>org.hibernate</groupId >
<artifactId>hibernate-c3p0</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<!-- log 日誌 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Mysql and MariaDB -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
二、實體類
package com.it.jpa.domain;
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="cst_customer")//建立實體類和表的對映關係
public class Customer {
@Id//聲明當前私有屬性為主鍵
@GeneratedValue(strategy=GenerationType.IDENTITY) //配置主鍵的生成策略
@Column(name="cust_id") //指定和表中 cust_id 欄位的對映關係
private Long custId;
@Column(name="cust_name") //指定和表中 cust_name 欄位的對映關係
private String custName;
@Column(name="cust_source")//指定和表中 cust_source 欄位的對映關係
private String custSource;
@Column(name="cust_industry")//指定和表中 cust_industry 欄位的對映關係
private String custIndustry;
@Column(name="cust_level")//指定和表中 cust_level 欄位的對映關係
private String custLevel;
@Column(name="cust_address")//指定和表中 cust_address 欄位的對映關係
private String custAddress;
@Column(name="cust_phone")//指定和表中 cust_phone 欄位的對映關係
private String custPhone;
public Long getCustId() {
return custId;
}
public void setCustId(Long custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getCustSource() {
return custSource;
}
public void setCustSource(String custSource) {
this.custSource = custSource;
}
public String getCustIndustry() {
return custIndustry;
}
public void setCustIndustry(String custIndustry) {
this.custIndustry = custIndustry;
}
public String getCustLevel() {
return custLevel;
}
public void setCustLevel(String custLevel) {
this.custLevel = custLevel;
}
public String getCustAddress() {
return custAddress;
}
public void setCustAddress(String custAddress) {
this.custAddress = custAddress;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
常用註解的說明
@Entity
作用:指定當前類是實體類。
@Table
作用:指定實體類和表之間的對應關係。
屬性:
name:指定資料庫表的名稱
@Id
作用:指定當前欄位是主鍵。
@GeneratedValue
作用:指定主鍵的生成方式。。
屬性:
generator:指定引用 hibernate 中宣告的主鍵策略
strategy :指定主鍵生成策略。
1)、AUTO 自動選擇一個最適合底層資料庫的主鍵生成策略。如MySQL會自動對應auto increment。這個是預設選項,即如果只寫@GeneratedValue,等價於@GeneratedValue(strategy=GenerationType.AUTO)。
2)、IDENTITY 表自增長欄位,Oracle不支援這種方式。
3)、SEQUENCE 通過序列產生主鍵,MySQL不支援這種方式。
4)、TABLE 通過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可以使應用更易於資料庫移植。不同的JPA實現商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table表,Hibernate生成一個hibernate_sequences表,而TopLink則生成sequence表。這些表都具有一個序列名和對應值兩個欄位,如SEQ_NAME和SEQ_COUNT。
@Column
作用:指定實體類屬性和資料庫表之間的對應關係
屬性:
name:指定資料庫表的列名稱。
unique:是否唯一
nullable:是否可以為空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定義建表時建立此列的 DDL
secondaryTable: 從表名。如果此列不建在主表上(預設建在主表),該屬性定義該列所在
從表的名字
三、JPA 核心配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<!--
在 maven 工程的 resources 路徑下建立一個名為 META-INF 的資料夾,
在此資料夾下建立一個名為persistence.xml 的配置檔案。
注意:META-INF資料夾名稱不能修改。persistence.xml 檔名稱不能改。
-->
<!--
配置持久化單元 name:
持久化單元名稱 transaction-type:
事務型別 RESOURCE_LOCAL:
本地事務管理 JTA:分散式事務管理
-->
<persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
<!--配置 JPA 規範的服務提供商 -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<!-- 資料庫驅動 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<!-- 資料庫地址 -->
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/springdb" />
<!-- 資料庫使用者名稱 -->
<property name="javax.persistence.jdbc.user" value="root" />
<!-- 資料庫密碼 -->
<property name="javax.persistence.jdbc.password" value="root" />
<!--jpa 提供者的可選配置:我們的 JPA 規範的提供者為 hibernate,所以 jpa 的核心配 置中相容 hibernate
的配 -->
<!--
show_sql: 顯示sql
format_sql: 格式化sql
hbm2ddl.auto: 自動建立|更新|驗證資料庫表結構
-->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>