[Java] Konvertieren Sie DB-Code mit enum in einen Codewert

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.

Umgebung

Überblick

Der in der Schülertabelle registrierte Schülerstatuscode (ganzzahliger Wert) wird mit enum auf der Java-Seite in den entsprechenden Codewert konvertiert.

ER-Diagramm

image.png

Statuscode und Codewert

Statuscode Codewert
1 Schüler
2 Beurlaubt
3 Absolvent

Paketkonfigurationsdiagramm

enum-sample
     |
    src/main/java
     |----jp.co.high_school
     |               |---- app
     |               |     |---- controller
     |               |     |---- response
     |               |
     |               |---- domain
     |               |      |---- service
     |               |      |---- repository
     |               |      |---- model
     |               |  
     |               |---- constant
     |
    src/main/resources
     |----application.yml

Quellcode

  1. DDL

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';

2. Konstante Klasse

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;

        }

}

3. Entitätsklasse

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;
	}

}

4. Repository-Klasse

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);

}

5. Serviceklasse

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;

	}

}


6. Controller-Klasse

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);
	}

}

7. Antwortklasse

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;

}

Funktionsprüfung

Dieses Mal werden wir den Betrieb in der lokalen Umgebung überprüfen.

Schülertisch

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

image.png

Geschichte verändern

--2020 / 07/13: Statuscode → Ändern Sie die Beschreibung des Prozesses, um den entsprechenden Codewert und die Paketkonfiguration der konstanten Klasse zu erhalten

Am Ende

Die Verwendung von enum scheint die Verwaltung von Mastern (DB) und Konstanten (Java) erheblich zu vereinfachen. Ich möchte es gut nutzen.

Referenz

Recommended Posts

[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
[Android] Konvertieren Sie Android Java-Code in Kotlin
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
Beispielcode zum Konvertieren von List in List <String> in Java Stream
Konvertieren Sie die CSV-Datei mit enum in eine Datensatzdatei mit fester Länge
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Stellen Sie mit Java eine Verbindung zur Datenbank her
So konvertieren Sie Java Base
[Java] Konvertiert ArrayList in Array
Karte <K, V1> in Karte <K, V2> konvertieren (Kartenwert konvertieren)
[Java] Eliminierung des Kesselplattencodes mit Lombok
[Java] Konvertiere 1 in N Liste in Karte
[Java] Eliminierung des Kesselplattencodes mit Lombok 2
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
So formatieren Sie Enum mit dem Formatierer-Maven-Plugin (Java)
Beispielcode mit Minio aus Java
[Java] Konvertieren Sie ein Array in ArrayList * Achtung
Verwendung des Java-Aufzählungstyps
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
[Java] Express-Aufzählungstyp ohne Verwendung des Aufzählungstyps (Aufzählung)
Beispielcode für die Singleton-Implementierung mit enum
Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson
Konvertieren Sie Anforderungsparameter im Frühjahr in Enum
Konvertieren Sie alle Android-Apps (Java) in Kotlin
[Java] So berechnen Sie das Alter mit LocalDate
Konvertieren Sie von der Java-UTC-Zeit in die JST-Zeit
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
[Java] Konvertiert Null vom Objekttyp in String-Typ
Stellen Sie mit Eclipse eine Verbindung von Java zu MySQL her
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
[Java] enum (Aufzählungstyp)
[Java] Fluss vom Quellcode zur Ausführung
Upsert von Java SDK zu Azure Cosmos DB
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Erstellen Sie mit Gradle mit VSCode Java → Ausführen
Schreiben Sie Selenium Java-Bindungscode mit Silk WebDriver
Konvertieren Sie verschachtelte Java-Beans in das Format aaa.bbb [0] .ccc
Wählen Sie * aus dem Java SDK in Azure Cosmos DB
Java-Code-TIPPS
Java-Beispielcode 02
Java-Beispielcode 03
Java-Beispielcode 04
[Java] Einführung in Java
Einführung in Java
Java-Beispielcode 01
Java-Zeichencode
Starten Sie Docker von Java aus, um Office-Dokumente in PDF zu konvertieren
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
<java> Zip-Datei lesen und direkt in String konvertieren
[Java] [SQL Server] Stellen Sie mit JDBC für SQL Server eine Verbindung zum lokalen SQL Server 2017 her
Erste Schritte mit Java-Programmen mit Visual Studio Code
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 3
Geben Sie den Maximalwert eines Arrays mithilfe der Java-Standardausgabe aus
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 2