《Spring Boot从入门到实战》第五章习题答案

news/2024/11/8 17:23:55 标签: spring boot, java, 数据库

5.7 本章练习

1)创建Spring Boot Web项目,使用Thymeleaf页面模板引擎实现人员管理模块的功能。

答案:

1. 创建人员实体类 创建一个 Person 实体类,用于定义人员属性

package com.example.demo.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    public Person() {
    }

    public Person(Long id, String name, Integer age, String email) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

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

2. 创建控制器 创建 PersonController,用于处理请求:

package com.example.demo.controller;

import com.example.demo.bean.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@Controller
@RequestMapping("/persons")
public class PersonController {

    List<Person> personList = new ArrayList<>();

    public PersonController() {
        personList.add(new Person(1L, "Alice", 12, "123@163.com"));
        personList.add(new Person(2L, "Bob", 12, "123@163.com"));
    }

    @GetMapping
    public String listPersons(Model model) {
        model.addAttribute("persons", personList);
        return "person/list";
    }

    @GetMapping("/add")
    public String addPersonForm(Model model) {
        model.addAttribute("person", new Person());
        return "person/add";
    }

    @PostMapping("/add")
    public String savePerson(@ModelAttribute Person person) {
        person.setId(Long.valueOf(personList.size()) + 1);
        personList.add(person);
        return "redirect:/persons";
    }

    @GetMapping("/edit/{id}")
    public String editPersonForm(@PathVariable Long id, Model model) {
        int personIndex = getPersonIndexUsingPersonId(id);
        Person person = personList.get(personIndex);
        model.addAttribute("person", person);
        return "person/edit";
    }

    private Integer getPersonIndexUsingPersonId(Long personId)
    {
        int personIndex = 0;
        for (Person personObj : personList) {
            if (personObj.getId() == personId) {
                personIndex = personList.indexOf(personObj);
            }
        }
        return personIndex;
    }

    @PostMapping("/edit/{id}")
    public String updatePerson(@PathVariable Long id, @ModelAttribute Person person) {
        int personIndex = getPersonIndexUsingPersonId(id);
        personList.set(personIndex, person);
        return "redirect:/persons";
    }

    @GetMapping("/delete/{id}")
    public String deletePerson(@PathVariable Long id) {
        int personIndex = getPersonIndexUsingPersonId(id);
        personList.remove(personIndex);
        return "redirect:/persons";
    }


}

3. 创建 Thymeleaf 页面模板

在 src/main/resources/templates/person 下创建以下 HTML 文件:

(1) list.html:显示人员列表

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Person List</title>
</head>
<body>
<h2>Person List</h2>
<a href="/persons/add">Add Person</a>
<table border="1">
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Age</th>
        <th>Email</th>
        <th>Actions</th>
    </tr>
    <tr th:each="person : ${persons}">
        <td th:text="${person.id}"></td>
        <td th:text="${person.name}"></td>
        <td th:text="${person.age}"></td>
        <td th:text="${person.email}"></td>
        <td>
            <a th:href="@{/persons/edit/{id}(id=${person.id})}">Edit</a> |
            <a th:href="@{/persons/delete/{id}(id=${person.id})}">Delete</a>
        </td>
    </tr>
</table>
</body>
</html>

(2) add.html:添加人员表单

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Add Person</title>
</head>
<body>
<h2>Add New Person</h2>
<form action="#" th:action="@{/persons/add}" th:object="${person}" method="post">
    Name: <input type="text" th:field="*{name}"/><br/>
    Age: <input type="number" th:field="*{age}"/><br/>
    Email: <input type="email" th:field="*{email}"/><br/>
    <button type="submit">Save</button>
</form>
</body>
</html>

(3) edit.html:编辑人员表单

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Edit Person</title>
</head>
<body>
<h2>Edit Person</h2>
<form action="#" th:action="@{/persons/edit/{id}(id=${person.id})}" th:object="${person}" method="post">
    Name: <input type="text" th:field="*{name}"/><br/>
    Age: <input type="number" th:field="*{age}"/><br/>
    Email: <input type="email" th:field="*{email}"/><br/>
    <button type="submit">Update</button>
</form>
</body>
</html>

4. 运行项目
启动 Spring Boot 应用程序,访问 http://localhost:8080/persons 即可查看人员管理模块的功能。

2)使用Thymeleaf实现系统的整体布局,包括顶部、底部、左侧菜单栏和右部主区域。

答案:

在templates/layout目录下新建footer.html、header.html、left.html等各区域模板页面。

footer.html的内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>footer</title>
</head>
<body>
    <footer th:fragment="footer">
        <div style="position: fixed;bottom: 0px;background-color: green;width: 100%">
            <h1 style="text-align: center">我是底部</h1>
        </div>
    </footer>
</body>
</html>

left.html的内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>left</title>
</head>
<body>
    <left th:fragment="left">
        <div style="background-color: red;width: 200px;height: 80vh;">
            <h1 style="margin: 0px;">我是左侧</h1>
        </div>
    </left>
</body>
</html>

header.html的内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>header</title>
</head>
<body>
  <header th:fragment="header">
    <div style="background-color: blue;height: 100px;">
      <h1 style="text-align: center;margin: 0;">我是头部</h1>
    </div>
  </header>
</body>
</html>

在templates/layout目录下新建index.html页面,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Layout</title>
</head>
<body style="margin: 0px;">
    <div>
        <div th:replace="layout/header :: header"></div>
        <div th:replace="layout/left :: left"></div>
        <div th:replace="layout/footer :: footer"></div>
    </div>
</body>
</html>

在后端添加访问入口:

@RequestMapping("/layout/index")
    public String index() {
        return "layout/index";
    }

运行验证,效果图如下:


http://www.niftyadmin.cn/n/5744208.html

相关文章

[JAVA]有关一些Maven的介绍

Maven 是一个强大的项目管理和构建自动化工具&#xff0c;主要用于Java项目&#xff0c;也可以用于其他基于JVM&#xff08;Java虚拟机&#xff09;的语言项目&#xff0c;它的作用介绍如下 1.依赖管理 在Java开发中&#xff0c;一个项目通常会依赖许多外部的库&#xff0c;比…

Latex中给公式加边框

1、这里使用的不是 amsmath 的 \boxed 命令, 而是 empheq 的 empheq 环境以及 xcolor 的 \fcolorbox 命令, 下面是代码, 可以分别阅读这两个手册来获取更多的信息 \documentclass{article} \usepackage{xcolor} \usepackage{empheq} \usepackage{amsmath} \begin{document}\be…

城镇住房保障:SpringBoot系统架构解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

深入了解Git、GitHub、GitLab及其应用技巧

在现代软件开发中&#xff0c;掌握版本控制系统&#xff08;VCS&#xff09;是至关重要的&#xff0c;其中Git是最流行的分布式版本控制工具之一。本文将详细介绍Git的用途及其基本操作&#xff0c;并深入探讨GitLab、GitHub、和Git Desktop的使用方法&#xff0c;同时总结Git的…

【Linux】解锁操作系统潜能,高效线程管理的实战技巧

目录 1. 线程的概念2. 线程的理解3. 地址空间和页表4. 线程的控制4.1. POSIX线程库4.2 线程创建 — pthread_create4.3. 获取线程ID — pthread_self4.4. 线程终止4.5. 线程等待 — pthread_join4.6. 线程分离 — pthread_detach 5. 线程的特点5.1. 优点5.2. 缺点5.3. 线程异常…

SQL 数据结构查询

1&#xff1a;查询变得结构。 SELECT COLID,SO.NAME,EP.VALUE,SO.LENGTH,MIN(ST.NAME) AS TYPE FROM SYS.EXTENDED_PROPERTIES EP RIGHT JOIN SYS.SYSCOLUMNS SO ON MAJOR_IDID AND COLIDMINOR_ID LEFT JOIN SYS.SYSTYPES ST ON ST.XTYPESO…

Pinia 如何在项目中使用?

Pinia 是一个现代的、轻量级的状态管理库&#xff0c;专为 Vue 3 设计。它简化了 Vuex 的复杂性&#xff0c;提供了更直观和灵活的方式来管理应用的状态。下面详细介绍 Pinia 的基本概念、安装、配置和使用方法。 1. 先安装对应的包 npm add pinia2. 在项目中注册 /main.ts …

Spark中的宽窄依赖

一、什么是依赖关系 这里通过一张图来解释&#xff1a; result_rdd是由tuple_rdd使用reduceByKey算子得到的&#xff0c; 而tuple_rdd是由word_rdd使用map算子得到的&#xff0c;word_rdd又是由input_rdd使用flatMap算子得到的。它们之间的关系就称为依赖关系&#xff01; 二…