Spring MVC — пример проекта для поиска врачей в Интернете с помощью MySQL

Опубликовано: 8 Января, 2023

Spring MVC Framework следует шаблону проектирования Model-View-Controller. Он используется для разработки веб-приложений. Он работает вокруг DispatcherServlet. DispatcherServlet обрабатывает все HTTP-запросы и ответы. Используя MySQL в качестве серверной части, мы можем хранить все сведения о врачах, а с помощью функциональности Spring MVC мы можем получать сведения о врачах в виде онлайн-шаблона. Давайте рассмотрим это как проект maven здесь.

Запросы MySQL:

Поскольку мы получаем детали через MySQL, давайте у нас есть некоторые данные для этого.

DROP DATABASE IF EXISTS geeksforgeeks;
CREATE DATABASE geeksforgeeks;
USE geeksforgeeks;

DROP TABLE geeksforgeeks.DoctorsDetails;

CREATE TABLE DoctorsDetails (
  id int(6) unsigned NOT NULL,
  doctorName varchar(50) NOT NULL,
  doctorRegistrationNumber varchar(10) NOT NULL,
  qualification varchar(30) NOT NULL,
  gender varchar(10) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

INSERT INTO geeksforgeeks.DoctorsDetails
(id,doctorName, doctorRegistrationNumber, qualification,gender) VALUES
(1,"doctorA","123-456","MDDCH","Female");

INSERT INTO geeksforgeeks.DoctorsDetails
(id,doctorName, doctorRegistrationNumber, qualification,gender) VALUES
(1,"doctorB","111-222","MSNeuro","Male");

INSERT INTO geeksforgeeks.DoctorsDetails
(id,doctorName, doctorRegistrationNumber, qualification,gender) VALUES
(1,"doctorC","222-444","MDGynae","Female");

INSERT INTO geeksforgeeks.DoctorsDetails
(id,doctorName, doctorRegistrationNumber, qualification,gender) VALUES
(1,"doctorD","199-998","MSNephro","Male");

INSERT INTO geeksforgeeks.DoctorsDetails
(id,doctorName, doctorRegistrationNumber, qualification,gender) VALUES
(1,"doctorE","444-666","MDCardio","Female");

SELECT * FROM geeksforgeeks.DoctorsDetails;

--If required, at last point of time we can truncate table
truncate table geeksforgeeks.DoctorsDetails;

Вывод данных БД:

Структура проекта:

Это будет выполнено как проект maven

пом.xml

XML




<?xml version="1.0" encoding="UTF-8"?>
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
                             http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.doctors</groupId>
   <artifactId>SpringMVCFindDoctorsOnline</artifactId>
   <packaging>war</packaging>
   <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
   </properties>
   <version>0.0.1-SNAPSHOT</version>
   <name>SpringMVCFindDoctorsOnline Maven Webapp</name>
   <url>http://maven.apache.org</url>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-all</artifactId>
         <version>1.9.5</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>5.1.1.RELEASE</version>
      </dependency>
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>5.1.1.RELEASE</version>
      </dependency>
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-test</artifactId>
         <version>5.1.1.RELEASE</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.apache.tomcat</groupId>
         <artifactId>tomcat-jasper</artifactId>
         <version>9.0.12</version>
      </dependency>
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>servlet-api</artifactId>
         <version>3.0-alpha-1</version>
      </dependency>
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
      </dependency>
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.11</version>
      </dependency>
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>5.1.1.RELEASE</version>
      </dependency>
   </dependencies>
   <build>
      <finalName>SpringMVCFindDoctorsOnline</finalName>
      <sourceDirectory>src/main/java</sourceDirectory>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M3</version>
            <configuration>
               <testFailureIgnore>true</testFailureIgnore>
               <shutdown>kill</shutdown>
               <!-- Use it if required-->
            </configuration>
         </plugin>
         <!-- This should be added to overcome Could not initialize
              class org.apache.maven.plugin.war.util.WebappStructureSerializer -->
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
         </plugin>
      </plugins>
   </build>
</project>

Мы должны создать bean-файл, и его структура должна соответствовать MySQL geeksforgeeks.DoctorsDetails.

Доктор.java

Java




public class Doctor {
   
    private int id;
    private String doctorName;   
    private String doctorRegistrationNumber;   
    private String gender;
    private String qualification;
 
    public String getGender() {
        return gender;
    }
 
    public void setGender(String gender) {
        this.gender = gender;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getDoctorName() {
        return doctorName;
    }
 
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
 
    public String getDoctorRegistrationNumber() {
        return doctorRegistrationNumber;
    }
 
    public void setDoctorRegistrationNumber(String doctorRegistrationNumber) {
        this.doctorRegistrationNumber = doctorRegistrationNumber;
    }
 
    public String getQualification() {
        return qualification;
    }
 
    public void setQualification(String qualification) {
        this.qualification = qualification;
    }
   
}

Перейдем к контроллеру java

ДокторКонтроллер.java

Java




import java.sql.SQLException;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
 
import com.doctors.beans.Doctor;
import com.doctors.dao.DoctorDao;
 
@Controller
@SessionAttributes("doctor")
public class DoctorController {
    // @Autowired
    // will inject dao from xml file
    DoctorDao dao;
 
    @Autowired
    public DoctorController(DoctorDao dao) {
        this.dao = dao;
    }
     
    @ModelAttribute("doctor")
    public Doctor getDoctor() {
        return new Doctor();
    }
 
    // for searchform
    @RequestMapping("/doctorsearchform")
    public String searchform(Model m) {
        m.addAttribute("command", new Doctor());
        return "doctorsearchform";
    }
 
    // It provides a facility to check doctors online
    @RequestMapping(value = "/checkDoctorsOnline", method = RequestMethod.POST)
    public ModelAndView calculateAmountForConsumedUnits(@ModelAttribute("doctor") Doctor doctor) {
 
        ModelAndView mav = null;
        Doctor doctor1 = null;
        try {
            if (doctor.getDoctorName() != null && doctor.getDoctorName() != "") {
                doctor1 = dao.getDoctorsByName(doctor.getDoctorName());
            }
            if (doctor.getDoctorRegistrationNumber() != null && doctor.getDoctorRegistrationNumber() != "") {
                doctor1 = dao.getDoctorsByRegistrationNumber(doctor.getDoctorRegistrationNumber());
            }
            mav = new ModelAndView("welcome");
            if (null != doctor1) {
                System.out.println(doctor1.getId() + "..." + doctor1.getDoctorName() + ".." + doctor1.getDoctorRegistrationNumber()
                + doctor1.getGender());
                boolean isAvailable = false;
                 
                mav.addObject("DoctorName", doctor1.getDoctorName());
                mav.addObject("RegistrationNumber", doctor1.getDoctorRegistrationNumber());
                mav.addObject("Gender", doctor1.getGender());
                mav.addObject("Qualification", doctor1.getQualification());
            }
        else {
            mav.addObject("DoctorName", doctor1.getDoctorName());
            mav.addObject("RegistrationNumber", "Not available Online");
        }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        return mav;
    }
 
}

класс ДАО

DoctorDao.java

Java




import java.sql.SQLException;
 
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
 
import com.doctors.beans.Doctor;
 
public class DoctorDao {
    JdbcTemplate template;
 
    public void setTemplate(JdbcTemplate template) {
        this.template = template;
    }
 
    public Doctor getDoctorsByName(String doctorName) throws SQLException {
        String sql = "select * from doctorsdetails where doctorname=?";
        return template.queryForObject(sql, new Object[] {doctorName},
                new BeanPropertyRowMapper<Doctor>(Doctor.class));
    }
     
    public Doctor getDoctorsByRegistrationNumber(String registrationNumber) throws SQLException {
        String sql = "select * from doctorsdetails where doctorRegistrationNumber=?";
        return template.queryForObject(sql, new Object[] {registrationNumber},
                new BeanPropertyRowMapper<Doctor>(Doctor.class));
    }
     
    public Doctor getDoctorsById(int id) throws SQLException {
        String sql = "select * from doctorsdetails where id =?";
        <