# 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.