【Java MVC】制作简单的手机管理系统

本文详细介绍了如何使用SpringBoot、JPA和MySQL构建一个手机通讯录管理系统,包括添加、删除、更新、查询和分页功能。系统采用HTML页面进行交互,利用Thymeleaf模板引擎和Bootstrap框架进行界面设计。同时,文章还展示了代码实现,包括Controller、Service、Repository和HTML模板的详细内容。
摘要由CSDN通过智能技术生成

目录

1.功能要求:

 2.背景要求:

3.技术要求:

4.添加数据库MySQL

5.文件准备:

6.控制层(PhoneConntroller):

6.1.分页、添加、添加并保持、修改、删除、排序、搜索名字

7.业务类(Phone):

7.1.在此定义了5个业务类的属性:

7.1.1电话的编号、保存的名字、对方的年龄、电话号码、电话的IP

8.数据访问层(PhoneRepository)接口:

8.1.负责与数据的查询的方法

8.1.1在网页中可以查询数据库中对应电话的编号、保存的名字、对方的年龄、电话号码、电话的IP

9.在service层创建一个接口PhoneService这个类服务与9.1.PhoneServiceImpl并进行测试:

9.1.1里面定义了方法,例如:将用户的手机信息存进一个列表里、新增手机信息或者更新手机信息、通过查询用户的手机信息存进一个新的列表里,将它们进行分页展示

9.1.2:测试类BankServiceimpl用来继承BankService,实现获取所有用户的手机信息、根据姓名查找用户的、保存用户信息到列表、根据id删除用户的信息、根据姓名查找列表是否存在此用户、设置排序参数:

10.HTML部分:主页面以及新增和更新部分页面设置

10.1主页面(index):

10.手机通讯录管理系统的界面(new_phone,html)

10.1它使用了Bootstrap框架来实现样式和布局的设置。

10.1.1在页面上,你可以看到一个包含标题和表单的容器。表单中包括了几个输入字段,用于保存手机通讯录中的联系人信息。每个输入字段都有一个占位符和相应的输入类型。

11.更新手机通讯录联系人信息的界面:

11.1在更新操作时,通常需要知道要更新的联系人的ID。

12.运行结果:

12.1.1主页面:

12.1.2 新增页面: 

 12.1.3 查询页面:

​编辑

12.1.4 更新、删除:

13. 总结:


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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值