1. 程式人生 > >JPA(二)JPA配置

JPA(二)JPA配置

一、依賴匯入,以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>