1. 程式人生 > 實用技巧 >2、JPA 環境搭建

2、JPA 環境搭建

1.建立Maven專案

2.新增依賴

<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.12</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>

3.配置JPA核心配置檔案

該檔案預設情況下必須創建於resources/META-INF目錄下
並且命名為persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--需要配置persistence-unit節點
        持久化單元:
            name:持久化單元名稱
            transaction-type : 事務管理的方式
                JTA:分散式事務管理
                RESOURCE_LOCAL
    -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--JPA實現方式-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!--配置資料庫-->
        <properties>
            <!--資料來源
                驅動: javax.persistence.jdbc.driver
                資料庫地址:javax.persistence.jdbc.url
                使用者名稱:javax.persistence.jdbc.user
                密碼:javax.persistence.jdbc.password
            -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="12345"/>
            <!--(可選)配置JPA實現方(Hibernate)的配置資訊
                顯示sql
                自動建立資料庫表(建表策略)
                    create: 程式執行是建立資料庫表(已存在則刪,然後再建立)
                    update 程式執行時建立表(如果有表,不會建立表)
                    none 不會建立表
            -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>

    </persistence-unit>
</persistence>

4.編寫實體類,建立實體類與表之間的關係

/**
 * 客戶的實體類
 *      配置對映關係
 *          1、實體類和表的關係
 *          2、實體類中屬性和表字段的對映關係
 * @Entity 宣告實體類
 * @Table 配置實體類和表的對映關係
 *      name:配置資料庫表的名稱
 */
@Entity
@Table(name = "users")
public class Users {
    /**
     *  @Id: 宣告主鍵的配置
     *  @GeneratedValue: 配置主鍵的生成策略
     *          strategy =
     *              GenerationType.IDENTITY 自動增長
     *                      要求你底層資料庫必須支援自動增長
     *              GenerationType.SEQUENCE
     *                      要求底層資料庫必須支援序列
     *              GenerationType.TABLE
     *                      JPA提供的一種機制,通過一張資料庫表的形式完成主鍵自增
     *              GenerationType.AUTO
     *                      由程式自動選擇主鍵生成策略
     *  @Column: 配置屬性和欄位的對映關係
     *          name:資料庫表中欄位的名稱
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer userId;
    @Column(name = "user_name")
    private String userName;
    @Column(name = "user_sex")
    private String userSex;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    @Override
    public String toString() {
        return "Users{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userSex='" + userSex + '\'' +
                '}';
    }
}

5.測試

/**
 * 測試jpa的儲存
 *      1.載入配置檔案建立工廠(實體類工廠)物件
 *      2.通過實體管理類工廠獲取實體管理器
 *      3.獲取事務物件,開啟事務
 *      4.完成增刪改查操作
 *      5.提交事務(回滾事務)
 *      6.釋放資源
 */
@Test
public void testInsert(){
    //1.載入配置檔案建立工廠(實體類工廠)物件
//        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    //2.通過實體管理器工廠獲取實體管理器
//        EntityManager entityManager = factory.createEntityManager();
    EntityManager entityManager = JpaUtils.getEntityManager();
    //3.獲取事務物件,開啟事務
    EntityTransaction transaction = entityManager.getTransaction();
    transaction.begin();
    //4.完成增刪改查操作
    Users user = new Users();
    user.setUserName("小黑");
    user.setUserSex("男");
    //儲存
    entityManager.persist(user);
    //5.提交事務(回滾事務)
    transaction.commit();
    //6.釋放資源
    entityManager.close();
//        factory.close();
}