Hibernate框架學習day03(表操作、多對多配置)

第1章 Hibernate_day03筆記

1.1 上次課內容回顧

  • Hibernate的持久化類的編寫規則

    • 無參數構造
    • 屬性私有
    • 屬性儘量使用包裝類
    • 提供一個唯一OID與主鍵對應
    • 不要使用final修飾
  • Hibernate的主鍵生成策略

    • 主鍵分類
      • 自然主鍵
      • 代理主鍵
    • 主鍵生成策略
      • increment
      • identity
      • sequence
      • uuid
      • native
      • assigned
      • foreign
  • Hibernate的持久化類的三種狀態

    • 瞬時態:沒有唯一標識OID,沒有被session管理
    • 持久態:有唯一標識OID,已經被session管理
    • 脫管態:有唯一標識OID,沒有被session管理
    • 狀態轉換:(瞭解)
  • Hibernate的一級緩存

  • 一級緩存:Hibernate優化手段,稱爲是session級別緩存。

  • 一級緩存:快照區

  • Hibernate的事務管理

    • 事務的回顧
      • 事務的概念
      • 事務的特性
      • 引發安全性問題
      • 安全性問題解決
    • Hibernate解決讀問題
      • 配置設置隔離級別
    • Hibernate解決Service事務
      • 採用的是線程綁定的方式
  • Hibernate的其他的API

    • Query :HQL 面向對象方式的查詢。
    • Criteria :QBC 完成面向對象化。
    • SQLQuery :SQL查詢

1.2 Hibernate的一對多關聯映射

1.2.1 數據庫表與表之間的關係

1.2.1.1 一對多關係
  • 什麼樣關係屬於一對多?
    • 一個部門對應多個員工,一個員工只能屬於某一個部門。
    • 一個客戶對應多個聯繫人,一個聯繫人只能屬於某一個客戶。
  • 一對多的建表原則:
    在這裏插入圖片描述
1.2.1.2 多對多關係
  • 什麼樣關係屬於多對多?
    • 一個學生可以選擇多門課程,一門課程也可以被多個學生選擇。
    • 一個用戶可以選擇多個角色,一個角色也可以被多個用戶選擇。
  • 多對多的建表原則:
    在這裏插入圖片描述
1.2.1.3 一對一關係(瞭解)
  • 什麼樣關係屬於一對一?
    • 一個公司只能有一個註冊地址,一個註冊地址只能被一個公司註冊。
  • 一對一的建表原則:
    在這裏插入圖片描述

1.2.2 Hibernate一對多的關係配置

1.2.2.1 創建一個項目,引入相應jar包
1.2.2.2 創建數據庫和表
CREATE TABLE `cst_customer` (
  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
  `cust_name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
  `cust_source` varchar(32) DEFAULT NULL COMMENT '客戶信息來源',
  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客戶所屬行業',
  `cust_level` varchar(32) DEFAULT NULL COMMENT '客戶級別',
  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定電話',
  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移動電話',
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `cst_linkman` (
  `lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '聯繫人編號(主鍵)',
  `lkm_name` varchar(16) DEFAULT NULL COMMENT '聯繫人姓名',
  `lkm_cust_id` bigint(32) DEFAULT NULL COMMENT '客戶id',
  `lkm_gender` char(1) DEFAULT NULL COMMENT '聯繫人性別',
  `lkm_phone` varchar(16) DEFAULT NULL COMMENT '聯繫人辦公電話',
  `lkm_mobile` varchar(16) DEFAULT NULL COMMENT '聯繫人手機',
  `lkm_email` varchar(64) DEFAULT NULL COMMENT '聯繫人郵箱',
  `lkm_qq` varchar(16) DEFAULT NULL COMMENT '聯繫人qq',
  `lkm_position` varchar(16) DEFAULT NULL COMMENT '聯繫人職位',
  `lkm_memo` varchar(512) DEFAULT NULL COMMENT '聯繫人備註',
  PRIMARY KEY (`lkm_id`),
  KEY `FK_cst_linkman_lkm_cust_id` (`lkm_cust_id`),
  CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

在這裏插入圖片描述

1.2.2.3 創建實體
  • 一的一方的實體
    在這裏插入圖片描述

  • 多的一方的實體
    在這裏插入圖片描述

1.2.2.4 創建映射文件
  • 多的一方的映射的創建
    在這裏插入圖片描述

  • 一的一方的映射的創建
    在這裏插入圖片描述

1.2.2.5 創建核心配置文件
1.2.2.6 引入工具類
1.2.2.7 編寫測試類

在這裏插入圖片描述

1.2.3 Hibernate的一對多相關操作

1.2.3.1 一對多關係只保存一邊是否可以:

在這裏插入圖片描述

1.2.3.2 一對多的級聯操作
  • 什麼叫做級聯
    • 級聯指的是,操作一個對象的時候,是否會同時操作其關聯的對象。
  • 級聯是有方向性
    • 操作一的一方的時候,是否操作到多的一方
    • 操作多的一方的時候,是否操作到一的一方
1.2.3.3 級聯保存或更新
  • 保存客戶級聯聯繫人
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 保存聯繫人級聯客戶
    在這裏插入圖片描述
    在這裏插入圖片描述
1.2.3.4 測試對象的導航

在這裏插入圖片描述

1.2.3.5 級聯刪除
  • 級聯刪除:
    • 刪除一邊的時候,同時將另一方的數據也一併刪除。
  • 刪除客戶級聯刪除聯繫人
    在這裏插入圖片描述
  • 刪除聯繫人級聯刪除客戶(基本不用)
    在這裏插入圖片描述
1.2.3.6 一對多設置了雙向關聯產生多餘的SQL語句

在這裏插入圖片描述

  • 解決多餘的SQL語句
    • 單向維護:
    • 使一方放棄外鍵維護權:
      • 一的一方放棄。在set上配置inverse=”true”
    • 一對多的關聯查詢的修改的時候。(CRM練習–)
1.2.3.7 區分cascade和inverse

在這裏插入圖片描述

1.3 Hibernate的多對多關聯映射

1.3.1 Hibernate多對多關係的配置

1.3.1.1 創建表
  • 用戶表
CREATE TABLE `sys_user` (
  `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
  `user_code` varchar(32) NOT NULL COMMENT '用戶賬號',
  `user_name` varchar(64) NOT NULL COMMENT '用戶名稱',
  `user_password` varchar(32) NOT NULL COMMENT '用戶密碼',
  `user_state` char(1) NOT NULL COMMENT '1:正常,0:暫停',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  • 角色表
CREATE TABLE `sys_role` (
  `role_id` bigint(32) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(32) NOT NULL COMMENT '角色名稱',
  `role_memo` varchar(128) DEFAULT NULL COMMENT '備註',
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  • 中間表
CREATE TABLE `sys_user_role` (
  `role_id` bigint(32) NOT NULL COMMENT '角色id',
  `user_id` bigint(32) NOT NULL COMMENT '用戶id',
  PRIMARY KEY (`role_id`,`user_id`),
  KEY `FK_user_role_user_id` (`user_id`),
  CONSTRAINT `FK_user_role_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`role_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_user_role_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.3.1.2 創建實體
  • 用戶的實體
    在這裏插入圖片描述
  • 角色的實體
    在這裏插入圖片描述
1.3.1.3 創建映射
  • 用戶的映射
    在這裏插入圖片描述
  • 角色的映射
    在這裏插入圖片描述
1.3.1.4 編寫測試類

在這裏插入圖片描述

1.3.2 Hibernate的多對多的操作

1.3.2.1 只保存一邊是否可以

在這裏插入圖片描述

1.3.2.2 多對多的級聯保存或更新
  • 保存用戶級聯保存角色
    在這裏插入圖片描述
  • 保存角色級聯保存用戶
    在這裏插入圖片描述
1.3.2.3 多對多的級聯刪除(基本用不上)
  • 刪除用戶級聯刪除角色
    在這裏插入圖片描述
  • 刪除角色級聯刪除用戶
    在這裏插入圖片描述
1.3.2.4 多對多的其他的操作
  • 給用戶選擇角色
    在這裏插入圖片描述
  • 給用戶改選角色
    在這裏插入圖片描述
  • 給用戶刪除角色
    在這裏插入圖片描述
發佈了73 篇原創文章 · 獲贊 67 · 訪問量 4521
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章