1. 程式人生 > >基於JavaEE(SSH)實現員工管理系統案例

基於JavaEE(SSH)實現員工管理系統案例

專案開發準備

Java EE開發環境的搭建,請檢視我的另一篇部落格
一個專案的開發一般要做以下幾個事情:

  • 專案概述
    • 專案簡介
    • 使用的開發工具介紹
  • 系統分析
    • 開發背景及意義
    • 可行性研究
      • 經濟可行性
      • 技術可行性
      • 操作可行性
    • 需求分析
      • 功能需求 √
      • 效能需求
  • 系統設計
    • 系統功能結構設計
      • 系統功能模組圖
    • 資料庫設計
      • 資料庫概念結構設計
      • 資料庫的邏輯設計 √
    • 人機互動介面設計
      • 多個內容設計(省略)
    • 系統的詳細設計
      • 多個內容設計(省略)
  • 系統實現
    • 開發環境
    • 功能實現 √
      • 多個模組實現(省略)
  • 系統測試

下面的案例只對打勾部分內容做實現。

功能需求分析

  本系統採用MySQL資料庫使資料具有較強的完整性、較好的資料安全性等特點以及提供了標準的幫助,使使用者方便的獲得所需的幫助。介面友好、操作簡單、功能齊全是本系統的最大優點。通過員工管理系統還可以實現如下功能。
(未完成)

資料庫的邏輯設計

  資料庫的邏輯結構就是把概念模型轉換成為某個具體的資料庫管理系統所支援的資料模型。
  E-R模型向關係模型的轉換

  1. 每一個實體型轉換為一個關係模式,實體的屬性就是關係的屬性,實體的關鍵字就是關係的關鍵字。
  2. 聯絡的轉換。
      一般1:1,1:m聯絡不產生新的關係模式,而是將一方實體的關鍵字加入到多方。
      實體對應的關係模式中,聯絡的屬性也一併加入。
      m:n聯絡要產生一個新的關係模式,該關係模式由聯絡涉及實體的關鍵字加上聯絡的屬性組成。

部門表(department)結構如下:

欄位名 說明 型別 其它
did 部門ID int 主鍵
dname 部門名稱 varchar(20)
ddesc 部門描述 varchar(100)
外來鍵

員工表(employee)結構如下:

欄位名 說明 型別 其它
eid 員工ID int 主鍵
ename 員工姓名 varchar(20)
sex 性別 varchar(10)
birthday 生日 date
joinDate 入職日期 date
eno 員工編號 varchar(20)
username 使用者名稱 varchar(20)
password 密碼 varchar(20)
外來鍵

功能實現

準備工作

  開啟eclipse,建立一個web專案,取名為ssh_employee。然後將ssh開發需要的jar包和配置檔案拷貝到這個專案裡面,jar包和配置檔案可以檢視Eclipse整合SSH框架
  在專案src下面建立下面幾個包,方便類的查詢和使用。

com.csdn.employee.action ————– 管理業務(Service)排程和管理跳轉的
com.csdn.employee.dao —————– 封裝增刪改查(介面)
com.csdn.employee.dao.impl ———– 封裝增刪改查(實現)
com.csdn.employee.entity ————– 實體
com.csdn.employee.interceptor —— 攔截器
com.csdn.employee.service ———— 管理具體的功能的(介面)
com.csdn.employee.service.impl —— 管理具體的功能的(實現)

建立實體類

  在com.csdn.employee.entity包中建立2個實體類,一個部門實體Department.java、一個員工實體Employee.java(一般情況下,類的命名開頭字母為大寫)。程式碼如下:

//Department.java
package com.integration.entity;

import java.util.HashSet;
import java.util.Set;

/*
 * 部門的實體
 */
public class Department {
    private Integer did;    //部門ID
    private String dname;   //部門名稱
    private String ddesc;   //部門描述
    //員工的集合
    private Set<Employee> employees = new HashSet<Employee>();
    //預設構造方法
    public Department() {
    }
    //包含全部屬性的構造方法
    public Department(Integer did, String dname, String ddesc, Set<Employee> employees) {
        super();
        this.did = did;
        this.dname = dname;
        this.ddesc = ddesc;
        this.employees = employees;
    }
    //各屬性的getter和setter方法
    public Integer getDid() {
        return did;
    }
    public void setDid(Integer did) {
        this.did = did;
    }
    public String getDname() {
        return dname;
    }
    public void setDname(String dname) {
        this.dname = dname;
    }
    public String getDdesc() {
        return ddesc;
    }
    public void setDdesc(String ddesc) {
        this.ddesc = ddesc;
    }
    public Set<Employee> getEmployees() {
        return employees;
    }
    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }
}
//Employee.java
package com.integration.entity;

import java.util.Date;

/*
 * 員工的實體
 */
public class Employee {
    private Integer eid;        //員工ID
    private String ename;       //員工姓名
    private String sex;         //性別
    private Date birthday;      //生日
    private Date joinDate;      //入職日期
    private String eno;         //員工編號
    private String username;    //使用者名稱
    private String password;    //使用者密碼

    private Department department;  //所屬部門
    //預設構造方法
    public Employee(){
    }
    //包含全部屬性的構造方法
    public Employee(Integer eid, String ename, String sex, Date birthday, Date joinDate, String eno, String username,
            String password, Department department) {
        this.eid = eid;
        this.ename = ename;
        this.sex = sex;
        this.birthday = birthday;
        this.joinDate = joinDate;
        this.eno = eno;
        this.username = username;
        this.password = password;
        this.department = department;
    }
    //各屬性的getter和setter方法
    public Integer getEid() {
        return eid;
    }
    public void setEid(Integer eid) {
        this.eid = eid;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Date getJoinDate() {
        return joinDate;
    }
    public void setJoinDate(Date joinDate) {
        this.joinDate = joinDate;
    }
    public String getEno() {
        return eno;
    }
    public void setEno(String eno) {
        this.eno = eno;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Department getDepartment() {
        return department;
    }
    public void setDepartment(Department department) {
        this.department = department;
    }
}

建立資料庫與對映檔案

  同樣在之前建立實體的com.csdn.employee.entity包中建立Hibernate的2個對映檔案,Department.hbm.xmlEmployee.java.hbm.xml,具體程式碼如下:

  xml頭部的約束程式碼可以在Hibernate核心jar中的/org/hibernate/hibernate-mapping-3.0.dtd中找到。不同版本的hibernate約束程式碼有可能不同。

  配置檔案中name表示java中的類名或者屬性名,table表示資料庫中的表名,column表示資料庫中的欄位名。
  例如下面的程式碼片段中< proerty />表示對應資料庫中的欄位,name屬性對應java類中的屬性,column屬性對應資料庫表中的欄位名,length表示資料長度。

<property name="dname" column="dname" length="20"/>

  主鍵欄位不是用< property /> 而是用< id>< /id>。
  例如下面的程式碼片段中主鍵為did欄位,而generator表示主鍵生成規則,具體使用方法可以去這個部落格檢視

<id name="did" column="did">
    <generator class="native"/>
</id>

未完待續…