【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统

文章目录

  • 前言
    • 一、系统实现步骤
      • 1.选择依赖
      • 2.配置数据库并连接
      • 3.在model层创建一个Medicine类
      • 4.在repository层创建MedicineRepository接口
      • 5.在service层创建MedicineService接口
      • 6.在controller层编写一个控制类MedicineController
      • 最终项目结构
      • 7.在视图层templates文件编写html文件
      • 8.添加BootStrap
    • 二、Web前端页面展示
      • 1.进入首页效果图
      • 2.登录页面效果图
      • 3.首页效果图
      • 4.添加信息效果图
      • 5.更新信息效果图
      • 6.查询信息效果图
      • 7.分页效果图
    • 本学期Java学习总结

前言

医院药品管理系统是现代化在线医药管理必不可少的基础设施与技术支撑环境。本系统可以实现管理员登录、重置密码,管理员进行药品信息的添加、更新、删除管理,还可以根据药品名称查询供药品信息,以及分页和排序,内置字段有:药品编号、药品名称、价格、厂家、保质期,而药品编号是依据生产日期而形成的。

一、系统实现步骤

1.选择依赖

  1. Lombok
  2. Spring Web
  3. Thymeleaf
  4. Spring Data JPA
  5. MYSQL Driver
    【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第1张图片

2.配置数据库并连接

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第2张图片
打开IDEA右上角的database连接如下:
【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第3张图片

3.在model层创建一个Medicine类

该medicine类用于药品的属性有药品编号、药品名称、价格、厂家以及保质期,代码实现如下:

import jakarta.persistence.*;
import lombok.Data;

@Data
@Entity
@Table(name = "medicines")
public class Medicine {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "number")
    private Long number;//药品编号
    @Column(name = "name")
    private String name;//药品名称
    @Column(name = "price")
    private String price;//价格
    @Column(name = "manufacturers")
    private String manufacturers;//厂家
    @Column(name = "date")
    private String date;//保质期
}

4.在repository层创建MedicineRepository接口

在数据访问层创建一个MedicineRepository接口,并编写一个查询药品名称的方法,为了能在Web前端以药品名称查询得出药品信息,代码实现如下:

import mm.rr.lmrjava.model.Medicine;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MedicineRepository extends JpaRepository, Long> {
    @Query("select a from Medicine a where a.name like %:name%")
    List findByMedicinesName(@Param("name") String name);

}

5.在service层创建MedicineService接口

该MedicineService接口用于封装药品增删改查的方法,代码实现如下:

import mm.rr.lmrjava.model.Medicine;
import org.springframework.data.domain.Page;

import java.util.List;

public interface MedicineService {
    //获取所有的药品
    List  getAllMedicines();
    //新增/更新一个药品
    void saveMedicine(Medicine medicine);
    //获取指定编号的药品
    Medicine getMedicineById(long id);
    //删除指定编号的药品
    void deleteMedicineById(long id);
    //查询药品
    List findByMedicinesName(String name);
    //分页
    Page findPaginated(int pagNo, int pageSize, String sortField, String sortDirection);
    
}

并在service层创建一个实现业务逻辑的MedicineServiceImpl类继承MedicineService,从而实现药品信息的增删改查以及分页,最后通过药品名称查询得出药品信息,代码实现如下:

import mm.rr.lmrjava.model.Medicine;
import mm.rr.lmrjava.repository.MedicineRepository;
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.Service;

import java.util.List;
import java.util.Optional;

@Service
public class MedicineServiceImpl implements MedicineService {
    @Autowired
    private MedicineRepository medicineRepository;
    @Override
    public List getAllMedicines(){return medicineRepository.findAll();}
    @Override
    public void saveMedicine(Medicine medicine) {this.medicineRepository.save(medicine);}
    @Override
    public Medicine getMedicineById(long id) {
        //调用数据访问层查找指定编号的药品,返回Optional对象
        Optional optional = medicineRepository.findById(id);
        Medicine medicine = null;
        //如果存在指定编号的药品
        if (optional.isPresent()) {
            //从Optional对象中获取药品对象
            medicine = optional.get();
        } else {
            //否则抛出运行时异常
            throw new RuntimeException(" 找不到药品编号 :: " + id);
        }
        return medicine;
    }
    @Override
    public void deleteMedicineById(long id) {this.medicineRepository.deleteById(id);}
    @Override
    public Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
        //设置排序参数,升序ASC/降序DESC?
        Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
                ? Sort.by(sortField).ascending()
                : Sort.by(sortField).descending();
        //根据页号/每页记录数/排序依据返回某指定页面数据。
        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
        return this.medicineRepository.findAll(pageable);
    }
    @Override
    public List findByMedicinesName(String name) {
        List optional = medicineRepository.findByMedicinesName((name));
        return optional;
       }
}

6.在controller层编写一个控制类MedicineController

Controller 层主要对用户的请求参数进行处理(校验、转换),然后调用对应的 service 方法处理业务,得到业务结果后封装并返回结果响应给用户,代码实现如下:

import mm.rr.lmrjava.model.Medicine;
import mm.rr.lmrjava.service.MedicineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
public class MedicineController {
    @Autowired
    private MedicineService medicineService;
    @GetMapping("/")
    public String viewHomePage(Model model) {
        return findPaginated(1, "name", "asc", model);
    }
    @GetMapping("/showNewMedicineForm")
    public String showNewMedicineForm(Model model) {
        // create model attribute to bind form data
        Medicine medicine = new Medicine();
        model.addAttribute("medicine", medicine);
        return "new_medicines";
    }
    @PostMapping("/saveMedicine")
    public String saveMedicine(@ModelAttribute("medicine") Medicine medicine) {
        // save medicine to database
        medicineService.saveMedicine(medicine);
        return "redirect:/";
    }
    @GetMapping("/showFormForUpdate/{id}")
    public String showFormForUpdate(@PathVariable(value = "id") long id, Model model) {
        // get medicine from the service
        Medicine medicine = medicineService.getMedicineById(id);
        // set medicine as a model attribute to pre-populate the form
        model.addAttribute("medicine", medicine);
        return "update_medicines";
    }
    @GetMapping("/deleteMedicine/{id}")
    public String deleteMedicine(@PathVariable(value = "id") long id) {
        // call delete medicine method
        this.medicineService.deleteMedicineById(id);
        return "redirect:/";
    }
    @GetMapping("/query{name}")
    public String query(@PathVariable(value = "name") String name,Model model){
        List listMedicines = medicineService.findByMedicinesName(name);
        model.addAttribute("listMedicines",listMedicines);
        return "index";
    }
    //获取分页数据
    @GetMapping("/page/{pageNo}")
    public String findPaginated(@PathVariable (value = "pageNo") int pageNo,
                                @RequestParam("sortField") String sortField,
                                @RequestParam("sortDir") String sortDir,
                                Model model) {
        int pageSize = 5;
        Page page = medicineService.findPaginated(pageNo, pageSize, sortField, sortDir);
        List listMedicines = 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("listMedicines", listMedicines);
        return "index";
    }

}

最终项目结构

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第4张图片

7.在视图层templates文件编写html文件

编写以下html文件:

  1. 进入首页home.html
  2. 登录页login.html
  3. 首页index.html
  4. 添加信息页new_medicines.html
  5. 更新信息页update_medicines.html
  6. 分页test.html

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第5张图片

8.添加BootStrap

  
  "stylesheet" href="resources/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"/>
  
  
  "stylesheet" href="resources/static/bootstrap-5.1.3-dist/css/bootstrap.min.css"/>
  
  

二、Web前端页面展示

医院药品管理系统演示

1.进入首页效果图

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第6张图片

2.登录页面效果图

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第7张图片

3.首页效果图

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第8张图片

4.添加信息效果图

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第9张图片

5.更新信息效果图

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第10张图片

6.查询信息效果图

【Java高级】SpringBoot +JPA+thymeleaf+MySQL实现医院药品管理系统_第11张图片

7.分页效果图

在这里插入图片描述

本学期Java学习总结

本学期我们所学的Java高级课程中涉及到的重要概念包括: Java语言、对象、类、多线程、I/O流、集合、映射表以及泛型编程等。不仅如此,还学习了SpringBoot、Sping、Bean容器、数据访问和视图技术等等,而Java是一种非常强大的编程语言,它的应用领域极其广泛,掌握其极其重要的高级知识点对于我们来说非常有必要。
在学习Java 课程的过程中,我会主动地帮小组成员做一些力所能及的事情,并会积极地寻找合适的时间,向小组成员请教问题。记得有次舍友的电脑出问题,我就积极的帮她去进行查找原因,等问题解决的后,我心里感觉很高兴,因为我的积极主动,巩固了我所学的知识,并且得到了舍友的认可。对我们这样的初学者来说,细心是写好每个程序所必备的基本。如果写的代码很凌乱,敲错字母等,就可能会在一些细小的地方犯错误。所以,我们敲代码过程中是要细心细心在细心的!!!

你可能感兴趣的:(java,spring,boot,mysql)