当前位置: 首页 > news >正文

基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个医院挂号系统

基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个医院挂号系统是一个实用的项目。
在这里插入图片描述

步骤一:需求分析

明确系统需要实现的功能,比如:

  • 用户注册和登录
  • 查看医生列表
  • 预约挂号
  • 查看预约记录
  • 取消预约
  • 管理员管理医生信息和预约记录

步骤二:设计数据库

使用 MySQL 数据库存储系统数据。设计数据库表结构如下:

用户表(users)
  • id (INT, 主键, 自增)
  • username (VARCHAR)
  • password (VARCHAR)
  • email (VARCHAR)
  • phone (VARCHAR)
医生表(doctors)
  • id (INT, 主键, 自增)
  • name (VARCHAR)
  • department (VARCHAR)
  • introduction (TEXT)
  • schedule (TEXT)
预约表(appointments)
  • id (INT, 主键, 自增)
  • user_id (INT, 外键)
  • doctor_id (INT, 外键)
  • appointment_time (DATETIME)
  • status (VARCHAR)

步骤三:选择开发工具

使用 IntelliJ IDEA 或 Eclipse 作为开发环境。

步骤四:搭建项目结构

  1. 创建 Maven 项目。
  2. 添加必要的依赖项(Spring、Spring MVC、MyBatis、MySQL 驱动等)。

步骤五:配置文件

application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/hospital_registration?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.mapper-locations=classpath:mapper/*.xml
spring-mvc.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="com.hospital"/><mvc:annotation-driven/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean></beans>
mybatis-config.xml
<configuration><mappers><mapper resource="mapper/UserMapper.xml"/><mapper resource="mapper/DoctorMapper.xml"/><mapper resource="mapper/AppointmentMapper.xml"/></mappers>
</configuration>

步骤六:编写实体类

User.java
package com.hospital.entity;public class User {private int id;private String username;private String password;private String email;private String phone;// Getters and Setters
}
Doctor.java
package com.hospital.entity;public class Doctor {private int id;private String name;private String department;private String introduction;private String schedule;// Getters and Setters
}
Appointment.java
package com.hospital.entity;import java.util.Date;public class Appointment {private int id;private int userId;private int doctorId;private Date appointmentTime;private String status;// Getters and Setters
}

步骤七:编写 DAO 层

UserMapper.java
package com.hospital.mapper;import com.hospital.entity.User;
import org.apache.ibatis.annotations.*;@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE username = #{username} AND password = #{password}")User login(@Param("username") String username, @Param("password") String password);@Insert("INSERT INTO users(username, password, email, phone) VALUES(#{username}, #{password}, #{email}, #{phone})")@Options(useGeneratedKeys = true, keyProperty = "id")void register(User user);
}
DoctorMapper.java
package com.hospital.mapper;import com.hospital.entity.Doctor;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface DoctorMapper {@Select("SELECT * FROM doctors")List<Doctor> getAllDoctors();@Select("SELECT * FROM doctors WHERE id = #{id}")Doctor getDoctorById(int id);@Insert("INSERT INTO doctors(name, department, introduction, schedule) VALUES(#{name}, #{department}, #{introduction}, #{schedule})")@Options(useGeneratedKeys = true, keyProperty = "id")void addDoctor(Doctor doctor);@Update("UPDATE doctors SET name=#{name}, department=#{department}, introduction=#{introduction}, schedule=#{schedule} WHERE id=#{id}")void updateDoctor(Doctor doctor);@Delete("DELETE FROM doctors WHERE id=#{id}")void deleteDoctor(int id);
}
AppointmentMapper.java
package com.hospital.mapper;import com.hospital.entity.Appointment;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface AppointmentMapper {@Select("SELECT * FROM appointments WHERE user_id = #{userId}")List<Appointment> getAppointmentsByUserId(int userId);@Select("SELECT * FROM appointments WHERE id = #{id}")Appointment getAppointmentById(int id);@Insert("INSERT INTO appointments(user_id, doctor_id, appointment_time, status) VALUES(#{userId}, #{doctorId}, #{appointmentTime}, #{status})")@Options(useGeneratedKeys = true, keyProperty = "id")void addAppointment(Appointment appointment);@Update("UPDATE appointments SET appointment_time=#{appointmentTime}, status=#{status} WHERE id=#{id}")void updateAppointment(Appointment appointment);@Delete("DELETE FROM appointments WHERE id=#{id}")void deleteAppointment(int id);
}

步骤八:编写 Service 层

UserService.java
package com.hospital.service;import com.hospital.entity.User;
import com.hospital.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User login(String username, String password) {return userMapper.login(username, password);}public void register(User user) {userMapper.register(user);}
}
DoctorService.java
package com.hospital.service;import com.hospital.entity.Doctor;
import com.hospital.mapper.DoctorMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class DoctorService {@Autowiredprivate DoctorMapper doctorMapper;public List<Doctor> getAllDoctors() {return doctorMapper.getAllDoctors();}public Doctor getDoctorById(int id) {return doctorMapper.getDoctorById(id);}public void addDoctor(Doctor doctor) {doctorMapper.addDoctor(doctor);}public void updateDoctor(Doctor doctor) {doctorMapper.updateDoctor(doctor);}public void deleteDoctor(int id) {doctorMapper.deleteDoctor(id);}
}
AppointmentService.java
package com.hospital.service;import com.hospital.entity.Appointment;
import com.hospital.mapper.AppointmentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class AppointmentService {@Autowiredprivate AppointmentMapper appointmentMapper;public List<Appointment> getAppointmentsByUserId(int userId) {return appointmentMapper.getAppointmentsByUserId(userId);}public Appointment getAppointmentById(int id) {return appointmentMapper.getAppointmentById(id);}public void addAppointment(Appointment appointment) {appointmentMapper.addAppointment(appointment);}public void updateAppointment(Appointment appointment) {appointmentMapper.updateAppointment(appointment);}public void deleteAppointment(int id) {appointmentMapper.deleteAppointment(id);}
}

步骤九:编写 Controller 层

UserController.java
package com.hospital.controller;import com.hospital.entity.User;
import com.hospital.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/login")public String showLoginForm() {return "login";}@PostMapping("/login")public String handleLogin(@RequestParam("username") String username, @RequestParam("password") String password, Model model) {User user = userService.login(username, password);if (user != null) {model.addAttribute("user", user);return "redirect:/doctors";} else {model.addAttribute("error", "Invalid username or password");return "login";}}@GetMapping("/register")public String showRegisterForm() {return "register";}@PostMapping("/register")public String handleRegister(User user) {userService.register(user);return "redirect:/login";}
}
DoctorController.java
package com.hospital.controller;import com.hospital.entity.Doctor;
import com.hospital.service.DoctorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.util.List;@Controller
public class DoctorController {@Autowiredprivate DoctorService doctorService;@GetMapping("/doctors")public String showDoctors(Model model) {List<Doctor> doctors = doctorService.getAllDoctors();model.addAttribute("doctors", doctors);return "doctors";}@GetMapping("/doctor/{id}")public String showDoctorDetails(@RequestParam("id") int id, Model model) {Doctor doctor = doctorService.getDoctorById(id);model.addAttribute("doctor", doctor);return "doctorDetails";}@GetMapping("/addDoctor")public String showAddDoctorForm() {return "addDoctor";}@PostMapping("/addDoctor")public String handleAddDoctor(Doctor doctor) {doctorService.addDoctor(doctor);return "redirect:/doctors";}@GetMapping("/editDoctor/{id}")public String showEditDoctorForm(@RequestParam("id") int id, Model model) {Doctor doctor = doctorService.getDoctorById(id);model.addAttribute("doctor", doctor);return "editDoctor";}@PostMapping("/editDoctor")public String handleEditDoctor(Doctor doctor) {doctorService.updateDoctor(doctor);return "redirect:/doctors";}@GetMapping("/deleteDoctor/{id}")public String handleDeleteDoctor(@RequestParam("id") int id) {doctorService.deleteDoctor(id);return "redirect:/doctors";}
}
AppointmentController.java
package com.hospital.controller;import com.hospital.entity.Appointment;
import com.hospital.entity.Doctor;
import com.hospital.service.AppointmentService;
import com.hospital.service.DoctorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.util.Date;
import java.util.List;@Controller
public class AppointmentController {@Autowiredprivate AppointmentService appointmentService;@Autowiredprivate DoctorService doctorService;@GetMapping("/appointments")public String showAppointments(@RequestParam("userId") int userId, Model model) {List<Appointment> appointments = appointmentService.getAppointmentsByUserId(userId);model.addAttribute("appointments", appointments);return "appointments";}@GetMapping("/makeAppointment")public String showMakeAppointmentForm(@RequestParam("userId") int userId, Model model) {List<Doctor> doctors = doctorService.getAllDoctors();model.addAttribute("doctors", doctors);model.addAttribute("userId", userId);return "makeAppointment";}@PostMapping("/makeAppointment")public String handleMakeAppointment(@RequestParam("userId") int userId, @RequestParam("doctorId") int doctorId,@RequestParam("appointmentTime") String appointmentTime) {Appointment appointment = new Appointment();appointment.setUserId(userId);appointment.setDoctorId(doctorId);appointment.setAppointmentTime(new Date());appointment.setStatus("Pending");appointmentService.addAppointment(appointment);return "redirect:/appointments?userId=" + userId;}@GetMapping("/cancelAppointment/{id}")public String handleCancelAppointment(@RequestParam("id") int id, @RequestParam("userId") int userId) {appointmentService.deleteAppointment(id);return "redirect:/appointments?userId=" + userId;}
}

步骤十:前端页面

使用 JSP 创建前端页面。以下是简单的 JSP 示例:

login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="${pageContext.request.contextPath}/login" method="post">Username: <input type="text" name="username"><br>Password: <input type="password" name="password"><br><input type="submit" value="Login">
</form>
<c:if test="${not empty error}"><p style="color: red">${error}</p>
</c:if>
</body>
</html>
doctors.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>Doctors</title>
</head>
<body>
<h2>Doctors</h2>
<table><tr><th>Name</th><th>Department</th><th>Introduction</th><th>Schedule</th><th>Action</th></tr><c:forEach items="${doctors}" var="doctor"><tr><td>${doctor.name}</td><td>${doctor.department}</td><td>${doctor.introduction}</td><td>${doctor.schedule}</td><td><a href="${pageContext.request.contextPath}/doctor/${doctor.id}">View</a><a href="${pageContext.request.contextPath}/editDoctor/${doctor.id}">Edit</a><a href="${pageContext.request.contextPath}/deleteDoctor/${doctor.id}">Delete</a></td></tr></c:forEach>
</table>
<a href="${pageContext.request.contextPath}/addDoctor">Add New Doctor</a>
</body>
</html>
makeAppointment.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>Make Appointment</title>
</head>
<body>
<h2>Make Appointment</h2>
<form action="${pageContext.request.contextPath}/makeAppointment" method="post"><input type="hidden" name="userId" value="${userId}">Doctor:<select name="doctorId"><c:forEach items="${doctors}" var="doctor"><option value="${doctor.id}">${doctor.name} (${doctor.department})</option></c:forEach></select><br>Appointment Time: <input type="datetime-local" name="appointmentTime"><br><input type="submit" value="Make Appointment">
</form>
</body>
</html>

步骤十一:测试与调试

对每个功能进行详细测试,确保所有功能都能正常工作。

步骤十二:部署与发布

编译最终版本的应用程序,并准备好 WAR 文件供 Tomcat 或其他应用服务器部署。


http://www.mrgr.cn/news/66300.html

相关文章:

  • Java Web开发入门教程
  • 微信小程序 https://pcapi-xiaotuxian-front-devtest.itheima.net 不在以下 request 合法域名
  • hunyuan-DiT模型部署指南
  • Llama 3.2 Vision Molmo:多模态开源生态系统基础
  • 安卓设备adb执行AT指令控制电话卡
  • [Prometheus学习笔记]从架构到案例,一站式教程
  • 90%会展主办方都会用的6款数字化工具
  • 基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个九宫格日志系统
  • Flutter 正在切换成 Monorepo 和支持 workspaces
  • 【Classifier Guidance/Classifier-free Guidance】理论推导与代码实现
  • 『VUE』19. scope避免组件之间样式互相覆盖(详细图文注释)
  • MATLAB - ROS 2 分析器
  • 欢迎使用Markdown编辑器
  • GaussDB高智能--库内AI引擎:模型管理数据集管理
  • 省级-社会保障水平数据(2007-2022年)
  • 视频编辑学习笔记
  • “大跳水”的全新奥迪A3,精准狙击年轻人的心
  • 【NOIP普及组】明明的随机数
  • 华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿
  • 腾讯混元宣布大语言模型和3D模型正式开源
  • 外包干了6年,技术退步明显.......
  • 小张求职记五
  • C++【string类,模拟实现string类】
  • 数码管驱动电路音响LED驱动芯片VK1640
  • 【通俗理解】自由能与熵的关系是怎样的? ——从热力学第二定律看自由能最小化与熵最大化的趋势
  • C++ <string> 标头文件详解