目录
7.1.1电话的编号、保存的名字、对方的年龄、电话号码、电话的IP
8.1.1在网页中可以查询数据库中对应电话的编号、保存的名字、对方的年龄、电话号码、电话的IP
9.在service层创建一个接口PhoneService这个类服务与9.1.PhoneServiceImpl并进行测试:
9.1.1里面定义了方法,例如:将用户的手机信息存进一个列表里、新增手机信息或者更新手机信息、通过查询用户的手机信息存进一个新的列表里,将它们进行分页展示
10.手机通讯录管理系统的界面(new_phone,html)
10.1它使用了Bootstrap框架来实现样式和布局的设置。
10.1.1在页面上,你可以看到一个包含标题和表单的容器。表单中包括了几个输入字段,用于保存手机通讯录中的联系人信息。每个输入字段都有一个占位符和相应的输入类型。
1.功能要求:
包括但不限于功能要求增删改查和分页。以设备管理管理系统App为例:
1.设备:属性至少3个以上,包括并不限于设备类型、设备名称、初始状态……
2.添加设备
3.删除设备
4.更新设备
5.查找设备(自定义查询依据),显示查询结果。
6.分页
7.排序
扩展(加分):例如部门设备(1:n)管理部门,根据部门查询设备等等。
2.背景要求:
设计一个手机通讯管理系统,提供用户方便查找并修改。
3.技术要求:
创建项目,并添加依赖项。
4.添加数据库MySQL
MySQL是一个开源的关系型数据库管理系统,被广泛用于Web应用程序开发。它具有卓越的性能、可靠性和可扩展性,提供了丰富的查询语言和存储过程支持。通过与Spring Boot和JPA的结合,我们可以轻松地进行数据库操作,实现数据的持久化和查询。
我定义的数据名,以及密码,各位可以尝试着修改。数据库名称:testdb
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username= root
spring.datasource.password= 123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.open-in-view=false
# for Spring Boot 2
# spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect
# for Spring Boot 3
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto= update
#?????hibernate-sql
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
5.文件准备:
5.1.创建软件包与实现类
6.控制层(PhoneConntroller):
6.1.分页、添加、添加并保持、修改、删除、排序、搜索名字
package com.example.phone.Controller;
import com.example.phone.model.Phone;
import com.example.phone.repository.PhoneRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
/ 控制层
@Controller
public class PhoneController {
@Autowired
private PhoneRepository phoneRepository;
/// 分页
@GetMapping("/")
public String viewHomePage(Model model) {
return findPaginated(1, "name", "asc", model);
}
/// 添加
@GetMapping("/showNewPoneForm")
public String showNewPhoneForm(Model model) {
Phone phone = new Phone();
model.addAttribute("phone", phone);
return "new_phone";
}
/// 添加的保存
@PostMapping("/savePone")
public String savePhone(@ModelAttribute("phone") Phone phone) {
phoneRepository.save(phone);
return "redirect:/";
}
/// 修改
@GetMapping("/showFormForUpdate/{id}")
public String showFormForUpdate(@PathVariable("id") long id, Model model) {
Optional<Phone> optional = phoneRepository.findById(id);
if (optional.isPresent()) {
Phone phone = optional.get();
model.addAttribute("phone", phone);
} else {
throw new RuntimeException("Cannot find phone with ID: " + id);
}
return "update_phone";
}
/// 删除
@GetMapping("/deletePhone/{id}")
public String deletePhone(@PathVariable("id") long id) {
phoneRepository.deleteById(id);
return "redirect:/";
}
排序
@GetMapping("/page/{pageNo}")
public String findPaginated(@PathVariable(value = "pageNo") int pageNo,
@RequestParam("sortField") String sortField,
@RequestParam("sortDir") String sortDir,
Model model) {
int pageSize = 5;
Sort sort = sortDir.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
Page<Phone> page = phoneRepository.findAll(pageable);
List<Phone> listPhones = page.getContent();
model.addAttribute("currentPage", pageNo);
model.addAttribute("totalPages", page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("sortField", sortField);
model.addAttribute("sortDir", sortDir);
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
model.addAttribute("listPhones", listPhones);
return "index";
}
//搜索名字
@GetMapping("/query{inpname}")
public String query(@PathVariable(value = "inpname") String inpame,Model model){
List<Phone> listPhones = phoneRepository.findByName(inpame);
model.addAttribute("listPhones",listPhones);
return "index";
}
}
7.业务类(Phone):
7.1.在此定义了5个业务类的属性:
7.1.1电话的编号、保存的名字、对方的年龄、电话号码、电话的IP
package com.example.phone.model;
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "phones")
public class Phone {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "numbering") /// 电话的编号
private String numbering;
@Co