建立實體類Employee

vbcjnmkk發表於2024-09-01

8.1.1、建立實體類Employee
image

package org.rain.pojo;

import java.io.Serializable;

/**

  • @author liaojy

  • @date 2023/10/19 - 21:31
    */
    public class Employee implements Serializable {

    private Integer id;

    private String lastName;

    private String email;

    //1 male, 0 female
    private Integer gender;

    public Employee() {
    }

    public Employee(Integer id, String lastName, String email, Integer gender) {
    this.id = id;
    this.lastName = lastName;
    this.email = email;
    this.gender = gender;
    }

    public Integer getId() {
    return id;
    }

    public void setId(Integer id) {
    this.id = id;
    }

    public String getLastName() {
    return lastName;
    }

    public void setLastName(String lastName) {
    this.lastName = lastName;
    }

    public String getEmail() {
    return email;
    }

    public void setEmail(String email) {
    this.email = email;
    }

    public Integer getGender() {
    return gender;
    }

    public void setGender(Integer gender) {
    this.gender = gender;
    }

    @Override
    public String toString() {
    return "Employee{" +
    "id=" + id +
    ", lastName='" + lastName + ''' +
    ", email='" + email + ''' +
    ", gender=" + gender +
    '}';
    }
    }
    8.1.2、建立EmployeeDao模擬運算元據
    image

package org.rain.dao;

import org.rain.pojo.Employee;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**

  • @author liaojy

  • @date 2023/10/19 - 21:36
    */
    @Repository
    public class EmployeeDao {

    // 透過map集合模擬資料庫
    private static Map<Integer, Employee> employees = null;

    // 靜態程式碼塊在類載入時執行,並且只執行一次
    static{
    employees = new HashMap<Integer, Employee>();
    employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1));
    employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1));
    employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0));
    employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0));
    employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1));
    }

    // 新資料的id
    private static Integer initId = 1006;

    // 新增或修改
    public void save(Employee employee) {
    // 引數沒有id表示要執行新增操作
    if (employee.getId() == null) {
    // 設定新增資料的id,並自增id值為下一次新增資料做準備
    employee.setId(initId++);
    }
    // 更新模擬資料庫的資料
    employees.put(employee.getId(), employee);
    }

    // 查詢所有
    public Collection getAll(){
    return employees.values();
    }

    // 根據id查詢
    public Employee get(Integer id){
    return employees.get(id);
    }

    // 根據id刪除
    public void delete(Integer id){
    employees.remove(id);
    }

}
8.1.3、調整bean元件掃描
image

在原來的環境中,只掃描控制層元件,現在多了持久層元件,所以要調整掃描包的範圍

<!--在指定的包中,掃描bean元件-->
<context:component-scan base-package="org.rain"></context:component-scan>

8.1.4、功能清單
功能 URL 地址 請求方式
訪問首頁 / GET
查詢全部資料 /employee GET
跳轉到新增資料頁面 /to/add GET
執行儲存 /employee POST
跳轉到修改資料頁面 /to/update/2 GET
執行修改 /employee PUT
刪除 /employee/2 DELETE
8.2、查詢列表功能
8.2.1、頁面請求示例
image

查詢所有員工的資訊
8.2.2、控制器方法示例
image

@GetMapping("/employee")
public String getAllEmployee(Model model){
    // 獲取所有員工的資訊
    Collection<Employee> allEmployee = employeeDao.getAll();
    // 將所有員工的資訊,共享到請求域
    model.addAttribute("allEmployee",allEmployee);
    // 跳轉到列表頁面
    return "employee_list";
}

8.2.3、列表頁面示例
image

注意:在idea中,某些thymeleaf語法可能會提示錯誤(紅色波浪線),這是誤報,可以不用管

employee list
id lastName email gender options
update delete
8.2.4、測試效果 image

image

8.3、新增功能
8.3.1、頁面請求示例
image

options(add) 8.3.2、檢視控制器示例 image

因為只需要實現頁面跳轉,沒有處理業務的過程,所以可以使用檢視控制器實現

<mvc:view-controller path="/to/add" view-name="employee_add"></mvc:view-controller>
8.3.3、新增頁面示例
image

employee add
lastName
email
gender male female
8.3.4、控制器方法示例 image

注意:直接跳轉到列表頁面會顯示不了資料,因為還沒向請求域共享資料,所以需要先跳轉到查詢列表功能

此外,跳轉要用重定向,而不是用請求轉發;

如果用請求轉發,因為源請求的請求方式是post,所以請求轉發後的請求方式還會是post,這樣就會一直重複呼叫insertEmployee方法,直至記憶體耗盡;

如果用重定向,因為重定向的請求方式肯定是get,所以會呼叫getAllEmployee方法,從而實現查詢列表功能

@PostMapping("/employee")
public String insertEmployee(Employee employee){
    // 新增員工
    employeeDao.save(employee);
    // 重定向到查詢列表功能
    return "redirect:/employee";
}

8.3.5、測試效果
image

image

image

image

8.4、修改功能
8.4.1、頁面請求示例
image

注意:因為員工id是變數,所以(在thymeleaf語法中)路徑要使用單引號後再使用加號拼接變數

update
8.4.2、控制器方法示例(回顯資料)
image

@GetMapping("/to/update/{id}")
public String toUpdate(@PathVariable("id") Integer id, Model model){
    // 根據id查詢員工資訊
    Employee employee = employeeDao.get(id);
    // 將員工資訊共享到請求域
    model.addAttribute("employee",employee);
    // 跳轉到更新頁面
    return "employee_update";
}

8.4.3、更新頁面示例
image

注意:請求方式和id用了隱藏域;
單選框的回顯,用了th:field的屬性,如果其值和value屬性的值相等,則選中當前單選框

employee update
lastName
email
gender male female
8.4.4、控制器方法示例(執行修改) image
@PutMapping("/employee")
public String updateEmployee(Employee employee){
    // 修改員工
    employeeDao.save(employee);
    // 重定向到查詢列表功能

//程式碼效果參考:http://www.intpipe.com/sitemap/post.html
return "redirect:/employee";
}
8.4.5、測試效果
image

image

image

image

8.5、刪除功能
8.5.1、頁面請求示例
image

delete

8.5.2、控制器方法示例 image
@DeleteMapping("/employee/{id}")
public String deleteEmployee(@PathVariable("id") Integer id){
    // 刪除員工
    employeeDao.delete(id);
    // 重定向到查詢列表功能
    return "redirect:/employee";
}

8.5.3、測試效果
image

image

相關文章