[TOC]
# 簡介
一個對象就對應著表中的一條記錄,而表中的字段對應著類中的屬性。
數據庫中表與表之間存在著三種關系,也就是系統設計中的三種實體關系
## 一對一
原則有兩種:
1. 1. 唯一外鍵對應:在任意一方添加外鍵來描述對應關系
2. 2. 主鍵對應:一方的主鍵作為另一方的主鍵

~~~
Class Employee{
Private Archives archives;
}
Class Archives{
Private Employee employee;
}
~~~
## 一對多,多對一
客戶與訂單之間一對多關系(多對一)
建表原則:在多的一方添加外鍵來描述關聯關系

~~~
Class Customer{
Private Set<Order> orders;
}
Class Order{
Private Customer c;
}
~~~
## 多對多
例如學生與老師
建表原則:通過一張中間表來描述其對應關系

~~~
Class Student{
Set<Teacher> ts;
}
Class Teacher{
Set<Student> ss;
}
~~~
# Hibernate關系映射--(一對多,多對一)
類創建
訂單

客戶

映射文件編寫
Order.hbm.xml

Customer.hbm.xml

## 測試保存

上面操作是一種雙向關聯
問題:我們可不可以只保存訂單或只保存客戶完成保存操作?
## 測試單向關聯保存

這個異常代表提一個持久化對象關聯了一個瞬時對象。
我們可以使用級聯操作來解決上述的問題.
我們現在要做的是保存訂單時保存客戶,需要在訂單的hbm配置文件中修改

## 雙向關聯維護
我們在開發中要配置雙向關聯配置。---------可以通過任意一方來操作對方
在操作代碼,盡量來要進行單向關聯。------可以盡量資源浪費。
在雙向關聯中,會存在多余的update語句。
我們可以使用inverse屬性來設置,雙向關聯時由哪一方來維護表與表之間的關系。

# 級聯刪除
我們在刪除客戶時,也要刪除訂單,如果沒有做級聯,那么這個操作是不允許。
為了維護數據完整性

想要完成操作:我們可以在客戶中添加`cascade=”delete”;`


# cascade總結
使用cascade可以完成級聯操作
它可常用取值:
none這是一個默認值
save-update,當我們配置它時,底層使用save update或save-update完成操作,級聯保存臨時對象,如果是游離對象,會執行update.
delete 級聯刪除
delete-ophan 刪除與當前對象解除關系的對象。
all 它包含了save-update delete操作
all-delete-orphan 它包信了delete-orphan與all操作
# cascade與inverse有什么區別?
cascade它是完成級聯操作
Inverse它只有在雙向關聯情況下有作用,它來指定由哪一方維護外鍵
# 多對多
我們使用注解完成多對多配置.
描述學生與老師.
使用@ManyToMany來配置多對多,只需要在一端配置中間表,另一端使用mappedBy表示放置外鍵維護權。
創建PO類
Teacher類中

## 級聯保存操作測試
因為我們將外鍵的維護權利由Student來維護,我們演示保存學生時,將都也級聯保存。

# 一對一
以人與身份證號為例
一對一操作有兩種映射方式:
1. 1. 在任意一方添加外鍵
2. 2. 主鍵映射
## 外鍵映射
創建實體
User類

上述配置,t_user表放棄對外鍵的維護權利
IDCard類

- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化