1. 程式人生 > >【CRM(四)】聯絡人管理

【CRM(四)】聯絡人管理

CRM綜合練習_聯絡人管理

儲存聯絡人

修改menu.jsp的連結

在這裡插入圖片描述

編寫Action中的saveUI的方法

在這裡插入圖片描述

編寫Service

在這裡插入圖片描述

編寫DAO

在這裡插入圖片描述

修改新增頁面(改成struts2的標籤)

編寫表單提交路徑

在這裡插入圖片描述

編寫Action的save方法

在這裡插入圖片描述

編寫Service

在這裡插入圖片描述

編寫DAO

在這裡插入圖片描述

修改聯絡人

修改列表頁面上鍊接

在這裡插入圖片描述

編寫Action的edit方法

在這裡插入圖片描述

編寫Service

在這裡插入圖片描述

編寫DAO

在這裡插入圖片描述

修改編輯頁面提交的路徑

在這裡插入圖片描述

編寫Action的update方法

在這裡插入圖片描述

編寫Service

在這裡插入圖片描述

編寫DAO

在這裡插入圖片描述

刪除聯絡人

修改連結地址

在這裡插入圖片描述

編寫Action中的delete方法

在這裡插入圖片描述

編寫Service

在這裡插入圖片描述

編寫DAO

在這裡插入圖片描述

條件查詢聯絡人

修改列表頁面

在這裡插入圖片描述

修改Action中findAll的方法

在這裡插入圖片描述

解決與客戶之間問題

級聯刪除的問題

  • 級聯刪除,在客戶刪除的時候,先查詢再刪除
  • 在客戶的對映刪進行配置
    在這裡插入圖片描述

修改客戶的時候,聯絡人的客戶的資訊就丟失了

  • 因為在修改客戶的時候,沒有查詢聯絡人的集合,當點選修改,修改客戶(修改客戶所關聯聯絡人)因為聯絡人的集合是空,所以將外來鍵置為null。
    在這裡插入圖片描述

CRM綜合練習_抽取通用的DAO

通用的DAO的抽取

在這裡插入圖片描述

抽取通用的增刪改的操作

  • 定義介面
    在這裡插入圖片描述
  • 定義實現類
    在這裡插入圖片描述

抽取一個查詢一個的方法

  • 在介面中定義了一個查詢的方法
    在這裡插入圖片描述
  • 在實現類中實現查詢的方法
    在這裡插入圖片描述
    如果能把具體的型別的Class解決,查詢所有,分頁查詢都可以解決!!!

解決方案一:在實現類的構造方法中傳入一個Class

  • 編寫實現類
    在這裡插入圖片描述
    在父類中提供了有引數的構造方法,在子類中繼承了父類,提供構造方法,在子類的構造中,呼叫父類的有引數的構造。
  • 在客戶的DAO的實現類中
    在這裡插入圖片描述
  • 在聯絡人的DAO的實現類中
    在這裡插入圖片描述
  • 有了以上這些內容,將查詢的所有的方法,都抽取
    • 介面
      在這裡插入圖片描述
    • 實現類
      在這裡插入圖片描述
      如果這樣抽取完成以後,那麼在編寫DAO的時候如果裡面都是一些CRUD的操作,在DAO中只需要提供構造方法即可。
  • 客戶的DAO
    在這裡插入圖片描述
  • 聯絡人的DAO
    在這裡插入圖片描述
    如果將通用的DAO編寫的更好,連構造方法都不想要了!!!需要怎麼做???
  • 泛型反射

解決方案二:通過泛型的反射抽取通用的DAO

  • 如果現在將DAO中的構造方法去掉,將父類的通用的DAO中提供無引數的構造即可,但是需要在無引數的構造中需要獲得具體型別的Class才可以-----涉及到泛型的反射了。
  • 回顧一下泛型:
    • 泛型 :通用的型別。
    • <> :念為 typeof
    • List:E稱為型別引數變數
    • ArrayList :Integer稱為是實際型別引數
    • ArrayList :ArrayList稱為引數化型別
  • 需要做的事情在父類的構造方法中獲得子類繼承父類上的引數化型別中的實際型別引數
  • 泛型反射的步驟:
    • 第一步:獲得代表子類物件的Class
    • 第二步:檢視API
      在這裡插入圖片描述
      • Type[] getGenericInterfaces(); :獲得帶有泛型的介面,可以實現多個介面。
      • Type getGenericSuperclass(); :獲得帶有泛型的父類,繼承一個類。
    • 第三步:獲得帶有泛型的父類
    • 第四步:將帶有泛型的父類的型別轉成具體引數化的型別
    • 第五步:通過引數化型別的方法獲得實際型別引數
  • 程式碼實現
    在這裡插入圖片描述