JPA--java操做數據庫框架

1.JPA

1.1.什麼是JPA

JPA是JPAJPA開發效率高,運行效率低php

         (2)JDBC開發效率低,運行效率高(更接近底層,代碼繁瑣)java

         (3)JPA兼容各類數據庫(方便移植)mysql

         (4)JPA有內置緩存(性能在必定程度上有所優化)sql

         (5)JPA直接面向持久對象操做數據庫

         (6)JPA不能干涉SQL的生成緩存

1.4.ORM概念

Object Relational Mapping, 對象關係映射安全

ORM 就是經過將Java對象映射到數據庫表,經過操做Java對象,就能夠完成對數據表的操做app

2.JPA程序搭建

2.1.建立一個普通Maven項目

2.2.在pom.xml中配置須要的jar包

2.3.引入persisten.xml文件

2.4.配置persisten.xml

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <!-- 持久化單元,能夠有多個 RESOURCE_LOCAL:本地的事物 JTA:分佈式系統要使用的事物 --> <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL"> <properties> <!--四個鏈接數據庫的屬性--> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3307/jpa"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="zy214214~"/> <!--方言屬性:要操做的數據庫,根據不一樣的方言拼接不一樣的SQL--> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <!--可選屬性--> <!--自動生成表 create-drop:刪 → 建 → 執行CRUD → 刪 create:刪 → 建 → 執行CRUD update:沒有表則建表 有表則在原來表的基礎上修改表結構(只加不減,不應類型) validate:驗證(只驗證domain中已有的數據) none:什麼都不作 --> <property name="hibernate.hbm2ddl.auto" value="create"/> <!--是否在控制檯顯示sql--> <property name="hibernate.show_sql" value="true"/> <!--格式化sql:sql在控制檯顯示的格式--> <property name="hibernate.format_sql" value="true"/> </properties> </persistence-unit> </persistence> 

2.5.domain配置

/** * @Entity 表示由一個jpa管理的持久對象,對應數據庫中的一張表 * @Table 設置表名 */ @Entity @Table(name = "t_employee") public class Employee { /** * @Id 表示主鍵 * @GeneratedValue 表示主鍵自動遞增 */ @Id @GeneratedValue private Long id; private String name; private String password; // getter/setter略 } 

3.CRUD

3.1.基本操做流程

         (1)獲取EntityManagerFactory實體化管理工廠對象(傳入持久化單元名)dom

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa");
(2)經過EntityManagerFactory對象獲取實體管理對象
EntityManager entityManager = entityManagerFactory.createEntityManager();
3增刪改須要提交事務

// 執行CRUD
// 提交事務
entityManager.getTransaction().commit();
分佈式

// 事物提交失敗,回滾 entityManager.getTransaction().rollback();
4)關閉資源(實體管理對象)
// 關閉實體管理對象 entityManager.close();

3.2.新增

// 執行新增操做
entityManager.persist(employee);

3.3.刪除

// 若是數據庫有數據
if (employee != null) {
    // 執行刪除操做
    entityManager.remove(employee);
}

3.4.查找單條數據

// 執行查詢操做
return entityManager.find(Employee.class, id);

3.5.查找全部數據

// 執行查詢操做  // 須要寫一個jpql語句  // 簡寫1 // String jpql = "select o from Employee o"; // 簡寫2 // String jpql = "from Employee"; // (推薦寫法) String jpql = "select x from cn.meco.jpa.domain.Employee x"; // 獲取query對象 Query query = entityManager.createQuery(jpql); // 獲取List集合 return query.getResultList();

3.6.修改

employeeDao.update(employee);

 

// 執行修改操做
entityManager.merge(employee);

4.重要API

4.1.Persisten

  • 解析相應的核心配置文件
  • 建立EntityManagerFactory對象

4.2.EntityManagerFactory

線程安全對象,重量級對象

一個應用程序對應一個EntityManagerFactory:一個數據庫(1:1:1

(1)數據庫配置信息它裏面有一個鏈接池(自己就重,建立與銷燬太費時間)

         (2)二級緩存(查詢緩存,...)

         (3)預約義的JPQL語句(JPQL,SQL)

         (3)全部實體及關係

4.3 EntityManager

         (1)輕量級對象

         (2)線程不安全

         (3)提供CRUD

         (4)內置一級緩存

一級緩存命中:同一個EntityManagerFactory,同一個EntityManager,同一個OID

4.4. EntityTransaction

  • EntityManager只有這一個事務
  • 若是多個系統/多個數據庫 使用JTA

5.映射細節

5.1 .@Column

// 在表中列名爲pid
private Long id;

5.2.@Lob

大文本,能夠裝不少數據

5.3.@Transient

         臨時屬性(JPA不會管理這個屬性)

5.4.@Temporal時間設置

年月日,時分秒

年月日

時分秒

相關文章
相關標籤/搜索