TODO: hibernate 尚未整理完成
介紹 Hibernate
傳統 JDBC 查詢 SQL
1 | Class.forName("com.mysql.jdbc.Driver"); |
一開始學 Java 我們都是這樣寫的
沒有仔細探討寫法
首先是 Class.forName
因為 Class.forName 有 static 執行 DriverManager.registerDriver(new Driver)
JWorld@TW Java論壇 - Re:請問Class.forName()的用途
1 |
|
發現代碼,還是正常的執行了。
總結一下: Class.forName 方法的作用,就是初始化給定的類。而我們給定的 MySQL 的 Driver 類中,它在靜態代碼塊中通過 JDBC 的 DriverManager 註冊了一下驅動。我們也可以直接使用 JDBC 的驅動管理器註冊 mysql 驅動,從而代替使用 Class.forName。
參考來源:Java class.forname 詳解 | 菜鳥教程
Hibernate
前置設定
jar 加載
- Hibernate jar 包
下載連結5.4 series - Hibernate ORM
lib/required,lib/jpa
底下需要載入jar
Hibernate 日誌 jar 包
DB 驅動 Jar 包
MySQL JDBC驅動程式(mysql-connector-java-*.jar)
Maven 設定
設定檔原則上要放在 src 跟目錄,但
Java程式教學甘仔店: Hibernate Hello World Example 專案 之 XML Mapping
探討 Eclipse 加 resource 資料夾
其中 resources 是會抓到 target1
2# copy resources to target
cp -rf $PROJECT_DIR/resources/* $PROJECT_DIR/target
詳細可以看 javac 編譯:第1期:抛开IDE,了解一下javac如何编译 | 毛帅的博客
這篇可以有時間再做整理
設定 Hibernate
加入 dtd 用意
設定實體類 hbm.xml
1 |
設定 Hibernate 核心檔
需要放在 src 底下,除非有做 resource (還需要設定 Eclipse)
1 |
一般實作
加載 Hibernate 核心文件
New sessionfactory
使用SessionFactory 創建 Session 物件
開起交易
CRUD
交易提交
關閉資源(Session,SessionFactory)
hibernate utils
main 方法建置 table
session
save
update
delete
get
hibernate 3 種狀態
- 瞬時態 物件匋有id,session 沒有關聯
- 持久態 物件有id、session 有關聯
這邊沒有做save,當正常commit的話
持久態會做資料寫入到資料庫
一級緩存還會提到 - 托管態 物件有id,session 沒有關聯
緩存
一級緩存
通常使用
持久態 沒做 save/update,交易 commit 時候會寫入到資料庫
二級緩存
默認不使用
通常現在使用 redis 代替
生命週期是 SessionFactory
getCurrentSession
threadlocal
不用 close
不用在大量資料 test
三種 API
Query
使用 HQL
介於 實體類 和 SQL 之間
Criteria
使用實體類
SQLQuery
原生 SQL
Entity 建立
Hibernate入门之主键生成策略详解_博客云社区开发者中心-华为云
5.4. Spring Data with MySQL
實體類關聯
一對多
通常
進階探討
hibernate基于注解的维护权反转:@OneToMany(mappedBy=) - bojiangzhou - 博客园
1. 設定
2. 聯級
多對多
@ManyToMany中间表附加字段设计 - rubekid - 博客园
Hibernate中多对多的annotation的写法(中间表可以有多个字段) - MJBrian - 博客园
一對一
Hibernate —— HQL与QBC的区别_tuxq5721-CSDN博客_hql和qbc
問題
org.hibernate.ObjectNotFoundException
org.hibernate.ObjectNotFoundException: No row with the given identifier exists - keepup~ - 博客园
org.hibernate.ObjectNotFoundException: No row with the given identifier exists
hibernate -> Spring Data JPA
Java Artisan / Neil Chan: 從 Spring + Hibernate 到 Spring Data JPA
SpringBoot系列 - 集成Hibernate | 飞污熊博客
junit 使用 spring 做 DAO 查詢,最外層沒辦法做 dao 查詢
Hibernate Set / List
【学习笔记】Hibernate中多对多不用List而用Set的原因分析机智猫-CSDN博客多对多关系用set还是list
Hibernate的抓取策略及优化 - 簡書
java - What are the differences between the different saving methods in Hibernate? - Stack Overflow