Dies ist ein Beispiel, das den in der Datenbank registrierten Statuscode in einen Codewert auf der Java-Seite konvertiert. Dadurch muss kein Master erstellt werden, der die Bedeutung des Statuscodes definiert. Das Framework ist Spring Boot.
Der in der Schülertabelle registrierte Schülerstatuscode (ganzzahliger Wert) wird mit enum auf der Java-Seite in den entsprechenden Codewert konvertiert.
Statuscode | Codewert |
---|---|
1 | Schüler |
2 | Beurlaubt |
3 | Absolvent |
enum-sample
|
src/main/java
|----jp.co.high_school
| |---- app
| | |---- controller
| | |---- response
| |
| |---- domain
| | |---- service
| | |---- repository
| | |---- model
| |
| |---- constant
|
src/main/resources
|----application.yml
Schülertisch
CREATE TABLE `students` (
`student_id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'Studenten ID',
`student_name` varchar(300) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'Name des Studenten',
`sex` tinyint(4) DEFAULT NULL COMMENT 'Sex',
`school_year` tinyint(4) DEFAULT NULL COMMENT 'Schuljahr',
`class` tinyint(4) DEFAULT NULL COMMENT 'Klasse',
`student_status` tinyint(4) DEFAULT NULL COMMENT 'Studenten-Status',
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Schüler';
Definieren und verwenden Sie enum in der konstanten Klasse. Sie können eine Aufzählung als Klasse erstellen, aber ich habe sie in der Klasse unter der Annahme definiert, dass die Anzahl zunimmt. Auf diese Weise können Sie mehrere Aufzählungen mit einer Klassendatei verwalten.
Constant.java
package jp.co.high_school.constant;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.Getter;
/**
*Konstante Klasse
* @author CHI-3
* @Version 1.0
*/
public class Constant {
/**
* StudentStatus
*Studenten-Status
*/
@Getter
public static enum StudentStatus {
In(1, "Schüler"),
Rest(2, "Beurlaubt"),
Out(3, "Absolvent");
private StudentStatus(int key, String value) {
this.key = key;
this.value = value;
}
private int key;
private String value;
//Gibt alle Codewerte zurück
public static Stream<StudentStatus> stream(){
return Stream.of(StudentStatus.values());
}
//Gibt den Codewert zurück, der mit dem abgerufenen Code übereinstimmt
public static String getStatusValue(Byte code) {
return Stream.of(StudentStatus.values()).filter(v -> v.getKey() == code).map(v -> v.getValue()).collect(Collectors.joining());
}
}
//Diesmal nicht verwendet: Beschrieben als Beweis dafür, dass mehrere Aufzählungen in einer Klasse definiert werden können
/**
* Grade
*Noten
*/
@Getter
public static enum Grade{
//Hervorragend, gut, akzeptabel sind die Mindestanforderungen-Sam, nicht möglich ist die beste Bedingung
Excellent(1, "Yu", 90),
Good(2, "Gut", 75),
Passing(3, "Ja", 60),
Failing(4, "Unmöglich", 59);
private Grade(int key, String value, int order) {
this.key = key;
this.value = value;
this.order = order;
}
private int key;
private String value;
private int order;
}
}
Dieses Mal wurde es automatisch aus der Datenbank mit den Hibernate Tools von Eclipse generiert.
Student.java
package jp.co.high_school.domain.model;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the students database table.
*
*/
@Entity
@Table(name="students")
@NamedQuery(name="Student.findAll", query="SELECT s FROM Student s")
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="student_id")
private Integer studentId;
@Column(name="class")
private Byte class_;
@Column(name="school_year")
private Byte schoolYear;
private Byte sex;
@Column(name="student_name")
private String studentName;
@Column(name="student_status")
private Byte studentStatus;
//bi-directional one-to-one association to Grade
@OneToOne(mappedBy="student")
private Grade grade;
public Student() {
}
public Integer getStudentId() {
return this.studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public Byte getClass_() {
return this.class_;
}
public void setClass_(Byte class_) {
this.class_ = class_;
}
public Byte getSchoolYear() {
return this.schoolYear;
}
public void setSchoolYear(Byte schoolYear) {
this.schoolYear = schoolYear;
}
public Byte getSex() {
return this.sex;
}
public void setSex(Byte sex) {
this.sex = sex;
}
public String getStudentName() {
return this.studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Byte getStudentStatus() {
return this.studentStatus;
}
public void setStudentStatus(Byte studentStatus) {
this.studentStatus = studentStatus;
}
public Grade getGrade() {
return this.grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
Durch Angabe des Studentenausweises werden die Informationen des entsprechenden Studenten erfasst.
StudentRepository.java
package jp.co.high_school.domain.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import jp.co.test_shop.domain.model.Student;
/**
*Student Repository-Manipulations-Repository-Klasse
* @author CHI-3
* @Version 1.0
*/
@Repository
public interface StudentRepository extends JpaRepository<Student, Integer>{
/**
*findByStudentId-Methode
*Holen Sie sich den Schüler, der dem Studentenausweis entspricht
* @param studentId
* @Rückkehrer
*/
public Student findByStudentId(Integer studentId);
}
Konvertiert den Studentenstatuscode des erworbenen Studenten in den entsprechenden Statuscode und gibt ihn zurück.
StudentInformationService.java
package jp.co.high_school.domain.service;
import java.util.Optional;
import org.springframework.stereotype.Service;
import jp.co.test_shop.constant.Constant.StudentStatus;
import jp.co.test_shop.domain.model.Student;
import jp.co.test_shop.domain.repository.StudentRepository;
import lombok.RequiredArgsConstructor;
/**
*Serviceklasse zum Erwerb von Schülerinformationen
* @author CHI-3
* @version 1.0
*/
@Service
@RequiredArgsConstructor
public class StudentInformationService {
private final StudentRepository studentRepository;
/**
*getStatus-Methode
*Ruft den Studentenstatus (Codewert) des Zielschülers ab
* @param studentId Studenten-ID
* @Rückgabe des Studentenstatus (Codewert)
*/
public String getStatus(Integer studentId) throws Exception{
Student student = studentRepository.findByStudentId(studentId);
//Lösen Sie eine Ausnahme aus, wenn dem Studentenausweis kein Schüler zugeordnet ist
Optional.ofNullable(student).orElseThrow(Exception::new);
String status = null;
/*Statuscode → Entsprechender Codewert: Kommentar aufgrund einer Änderung der Beschreibung nach Stream
for(StudentStatus ss:StudentStatus.values()){
if(ss.getKey() == student.getStudentStatus()) {
status = ss.getValue();
break;
}
}
*/
//Statuscode → Entsprechender Codewert
status = StudentStatus.getStatusValue(student.getStudentStatus());
return status;
}
}
Formatiert und gibt den von der Service-Klasse erhaltenen Codewert zurück.
StudentInformationController.java
package jp.co.high_school.app.controller;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import jp.co.test_shop.app.response.StudentStatusResponse;
import jp.co.test_shop.domain.service.StudentInformationService;
import lombok.RequiredArgsConstructor;
/**
*Controller-Klasse zum Erfassen von Schülerinformationen
* @author CHI-3
* @Version 1.0
*/
@RestController
@RequiredArgsConstructor
public class StudentInformationController {
private final StudentInformationService studenInformationService;
/**
*getStatus-Methode
*Holen Sie sich den Studentenstatus
* @param studentId Studenten-ID
* @Rückgabe Antwortentität (Statuscodewert + HTTP-Status)
*/
@GetMapping("/student-information/{studentId}")
public ResponseEntity<StudentStatusResponse> getStatus(@PathVariable("studentId") Integer studentId){
String status = studenInformationService.getStatus(studentId);
StudentStatusResponse studentStatusReponse = StudentStatusResponse.builder().status(status).build();
return new ResponseEntity<>(studentStatusReponse, HttpStatus.OK);
}
}
StudentStatusResponse.java
package jp.co.high_school.app.response;
import lombok.Builder;
import lombok.Getter;
/**
*Antwortklasse für den Schülerstatus
*Wird verwendet, um den Studentenstatus zu gestalten
* @author CHI-3
* @Version 1.0
*/
@Getter
@Builder
public class StudentStatusResponse {
private String status;
}
Dieses Mal werden wir den Betrieb in der lokalen Umgebung überprüfen.
student_id | student_name | sex | school_year | class | student_status |
---|---|---|---|---|---|
1 | Schüler | 1 | 1 | 2 | 1 |
Wenn die Schülertabelle den oben genannten Inhalt enthält, wird durch Drücken der API (mithilfe des Advanced Rest Client) das folgende Ergebnis zurückgegeben. Der Code-Wert (während des Schulbesuchs), der dem Statuscode (1) entspricht, wird ordnungsgemäß übernommen.
Methode | GET |
---|---|
URL | http://localhost:8080/student-information/1 |
--2020 / 07/13: Statuscode → Ändern Sie die Beschreibung des Prozesses, um den entsprechenden Codewert und die Paketkonfiguration der konstanten Klasse zu erhalten
Die Verwendung von enum scheint die Verwaltung von Mastern (DB) und Konstanten (Java) erheblich zu vereinfachen. Ich möchte es gut nutzen.