# hibernate 2/18 觀念
###### tags: `hibernate`
struts 2(少用 已被取代)
https://www.youtube.com/watch?v=BHo5rK3ULY0&list=PLmOn9nNkQxJF4Ekh8jLDRK6R6fGvLw5SC
https://www.youtube.com/channel/UCYeDPubBiFCZXIOgGYoyADw
## 4 JDBC的利弊

* **JDBC**
* 標準(類別,介面) 存取資料庫
* 驅動程式要更新
## 5 何謂ORM(Object Relational Mapping)

* **一對多**
* 出版社<->書(可互相導入)
* 延遲性的問題
oop存java物件語言
ORM 用操作固定的方式操作表格內的紀錄
## 6 知名的JAVA OR Mapping技術

Java Data Object(要錢)
:+1:常用Hibernate,iBATIS(阿里巴巴)
(重要)Java Persistence API(JPA)
#### spring data 命名方法不用實作(DAO當作儲存資料庫)
[spring-data-jpa](https://spring.io/projects/spring-data-jpa)
spring-data-jpa不是java(jpa)
## 7 Hibernate ORM

* **對應關係**
* 類別對應表格
* 物件對應紀錄
* 屬性對應欄位
* 主鍵pk oid存主鍵值
## 8 Hibernate ORM的優點

改用註釋(學習重點)
* **註釋**
* 會出現在類別檔裡面
* 註解寫給框架者看(方便別人幫忙)
* 修改類別改註釋
Hibernate 不需要自己建立table 可自行建立
移除空欄位需自行移除
用物件導性基礎去設計 不需要照資料庫結構
## 9 儲存一筆紀錄 Hibernate vs JDBC

```javascript=
Transaction tx = null;//交易
session.beginTransaction//執行交易
session.save(mem)//不管多少筆
-------
//如果有多個例外or異動
if(tx!=null)tx.rollback();//還原原來的樣子
-------
throw new
RuntimeException(e.getMessage(),e);//再度丟出例外
```
企業邏輯
## 10 查詢一筆紀錄 Hibernate vs JDBC

## 11 刪除一筆紀錄 Hibernate vs JDBC

## 12 修改一筆紀錄 Hibernate vs JDBC

## 13 查詢多筆紀錄 Hibernate vs JDBC

## 14 不適合使用Hibernate的時機

## 15 Hibernate架構圖

>永續物件[color=#907bf7]
>>對應永續類別[color=red]
>>組態檔hibernate.cfg.xml
* **hibernate.cfg.xml**
* 連線資訊
* 映射資訊
* 微調 進階資訊




## 16 Hibernate組態檔

## 17 連線資訊

* **hibernate.dialect**
* 方言(重要)要對應sql版本
每一個組態檔連一個資料庫
[mssql jdbc driver maven](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc)
pom.xml專案物件模型
[hibernate maven](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc)
xml
```click=
//對應jar檔名稱
<artifactId>檔名
<version>版本
<artifactId>-<version>-<scope(.jar)>
```
標籤裡面定義常數
```click=
改版本只要改常數就好不需特別找
<version>${常數}</version>
```

## 18 連線資訊

## 19 映射資訊


## 20 進階資訊

* **session工廠(需告訴組態檔位址)**.
* create 先刪除 重新建立表格 表格內原有資料會遺失
* create-drop 很少用 關閉session就自動刪除
* update 新建sessionFactory物件(原來資料會保存)自動插入新欄位
* validate 檢查兩者相不相同 不相同會丟出例外
* 網路建議 <porprety name="hbm2ddl.auto">none</porprety> 不要給客戶動

Schema(結構)
## 21 進階資訊

以目前的環境只能填thread
* **交易(重要)**
每個session底下都有一個conn物件
同一個連線需要同一個session物件連線

工廠.getCurrentSession
根目錄位置越高權位越高
## 23

## 24

## 25

## 26


可以指定表格名稱
沒有寫@table就是類別的名稱
這兩個組合欄位不可重複

## 28 註釋說明三

Transient(重要)

## 32 編寫Hibernate程式的通則

讀取用createQuery
## 33 建立SessionFactory物件

## 34 SessionFactory介面

實作session工廠類別
## 35 建立SessionFactory的時機

建立工廠
## 36 Session介面

區域變數 不會給多個執行緒
* **Session型態**
* 定義在方法裡面的變數
## 37 Session物件的關閉

## 38 openSession()

## 39 getCurrentSession()

## 40 openSession() vs getCurrentSession()

## 41 Transaction介面
