# 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介面 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up