1. Einführung
(1) MySQL ist ein relationales Datenbanksystem, die am häufigsten verwendete und umfangreiche Datenbank für Internetunternehmen heute. Es handelt sich um eine serverseitige Datenbank, die hohen gleichzeitigen Besuchen standhalten kann.
(2) Spring-DATA-JPA ist eine Implementierung der in der JPA-Spezifikation bereitgestellten Repository-Ebene. Es kann unter Verwendung verschiedener Implementierungsrahmen wie Winterschlinse, OpenJPA und anderen Frameworks entwickelt werden. Dies kann das Repository einfach machen und seine Kopplung mit der Geschäftsschicht lösen.
In dieser Studie verwenden wir MySQL + Spring-Data-JPA, um es zu bauen. Die JPA -Implementierungsmethode verwendet Hibernate. Der Datenbankverbindungspool verwendet DBCP für die Verbindung.
2. Projektbau
1. Einführung von MySQL- und JPA-bezogenen Abhängigkeiten:
<!-Spring-JDBC-bezogene Abhängigkeiten-> <Depopenty> <gruppe> org.springFramework </Groupid> <artifactId> Spring-Jdbc </artifactid> </abhängig> <!-Verwandte Abhängigkeiten für die Verbindung zu MySQL-> <De vorangetrieben> </gruppen> mysql </Groupid> </Groupid> <artifactid> mysql-connector-java </artifactid> </abhängig> <!-JPA-bezogene Abhängigkeiten umfassen Spring-Data-jpa, Spring-ARM und Hibernate, um JPA-> <De vor Ort> <gruppe> org.springFramework.boot </GroupID> zu unterstützen> </GroupID> <artifactid> Spring-Boot-Starter-Data-jpa </artifactid> </abhängig>
Drei Abhängigkeiten müssen eingeführt werden. JDBC ist die Abhängigkeit, die von der Spring -Integration von MySQL erforderlich ist. Die zweite ist die Abhängigkeit von Datenbanktreiber von MySQL, und die dritte ist die Abhängigkeit im Zusammenhang mit der Spring-DATA-JPA:
Es enthält Abhängigkeiten wie AOP, JDBC, Federmorm, Transaktionstransaktion-API und Winterschlaf, um es zu unterstützen. JPA stellt es also mithilfe von Hibernate implementiert.
2. Konfigurationsdateikonfiguration:
Wir wählen die .yml -Formatdatei für die Konfigurationsdatei aus und konfigurieren DPCP2, um die Parameter des Verbindungspools zu konfigurieren:
1) projektbezogene Konfiguration:
Server: #Configuration Portnummer Port: 8088Spring: Anwendung: #Configuration Service Name Name: CMS-Dept
Hier finden Sie die relevanten Informationen über die Konfiguration der Serveröffnung und konfigurieren hauptsächlich den Servernamen und den Port
2) MySQL -bezogene Konfiguration
spring:#Data source and jpa configuration datasource: #Database-related configuration url -SSL connection is set to false url: jdbc:mysql://localhost:3306/crm?characterEncoding=utf8&useSSL=false #Configuration username: *** #Configuration password password: ***
Hier sind einige datenbankbezogene Konfigurationen, die hauptsächlich die Datenbank-URL, das Konto und das Kennwort konfigurieren. Die Konfigurationsinformationen nach der URL ist das Codierungsformat von MySQL Connected und ob die SSL -Verschlüsselung aktiviert ist.
3) DBCP -bezogene Konfiguration
Feder: #Die folgt eine Konfiguration DBCP2 für Verbindungspool verwandt: #initialisieren Sie die Initialgröße der Verbindungspool-Größe: 10 #Sitting-Mindestanzahl von Verbindungspools Min-Idle: 10 #Configure Die maximale Anzahl von Verbindungspools maximal. Zeitabend-Eviction-Runs-Millis: 200000 #Configure Die minimale Überlebenszeit der Verbindung im Verbindungspool entfernen Sie verlassen auf Wartung: 200000
Es ist hauptsächlich als einige Verbindungspoolinformationen konfiguriert und die Konfigurationsdetails sind in den obigen Kommentaren angezeigt.
4) Spring-Data-JPA basiert auf iHibernata-bezogenen Konfiguration
Frühling: JPA: #Configure-Datenbank-Datenbank: MySQL #Configure Ob Drucken von SQL Show-SQL: TRUE #HiBERNATE RELATTRISCHE KONFIGKEIT HET Hibernate: #Configure Cascade Level DDL-auto: Update-Namensschwererwart: #naming Strategie: HiBibernate.cfg.imprevovedStrovedStrovedStreat: Dialyct.imprevovedStrevedStrectStrategies: org.hibernate.dialect.mysql5dialect
Die Konfiguration ist der Verbindungsdatenbanktyp, und ob die Kaskade von SQL und Winterschlaf drucken soll, gibt es verschiedene Typen:
1) Validieren- Überprüfen Sie beim Laden von Hibernate die Erstellung der Datenbanktabellenstruktur.
2) Erstellen Sie jedes Mal, wenn Hibernate geladen wird, die Datenbanktabellenstruktur erstellt, was der Grund für den Verlust von Datenbanktabellendaten ist.
3) Erstellen Sie beim Laden von Hibernate erstellt, und beenden Sie die Tabellenstruktur.
4) Update-Cascade-Update-Update-Hibernate Aktualisiert automatisch die Datenbankstruktur.
Hier wählen wir Cascading -Updates und iterieren auf der Originaltabelle.
Es gibt zwei Arten von Namensstrategien:
1), org.springframework.boot.orm.jpa.hiNNTE.SpringPhysicalnamingStrategy begegnet dem Kapitalbuchstaben plus "_".
2), org.hibernate.cfg.imprevednamingStrategy No Modification Benennung.
3. Konfigurieren Sie verwandte Klassen:
Die Konfigurationsklasse muss in einem horizontalen Verzeichnis oder einem Unterverzeichnis mit der pneumatischen Klasse konfiguriert werden, bevor sie erfolgreich konfiguriert werden kann. Hier verwenden wir die Java -Klassenkonfiguration anstelle der XML -Methode für die Konfiguration:
/*** @Function Beschreibung: Klasse für MySQL -verwandte Konfiguration* @Author Administrator* /// Die für die Sortierung verwendete Annotationsschnittstelle wird zur Bewältigung von Ladungsprioritätsproblemen verwendet. Es hat zwei Aufzählungsvariablen @Order (ordned.highest_precedence) // Die folgende Zeile repräsentiert diese Klasse als Konfigurationsklasse @Configuration // Die folgende Zeile repräsentiert diese Klasse, um die Transaktionsmanagement @enableTransactionManagement (proxytargetClass = true) zu aktivieren // Es kann auch definiert werden. Es kann auch Filter includefilters = { @componentscan.filter (type = filterType.annotation, value = service.class)} @EnablejparePoories (Basepackages = "Com.hzt. **. PersistenceExceptionTranslationPostProcessor () {Neue PersistenceExceptionTranslationPostProcessor () zurückgeben; }} 1) @order Annotation, verwendet, um die Ladepriorität der Klasse zu konfigurieren, hat sie zwei Aufzählungsvariablen:
Bestellt.Highest_precedence- integer.min_value - Mindestwert mit höchster Priorität
Bestellt.lowest_precedence -integer.max_value -maximum -Wert mit der niedrigsten Priorität
2) @Configuration Annotation, was bedeutet, dass diese Klasse eine Konfigurationsklasse ist
3) @EnableTransactionManagement Transaction Management für MySQL ProxytargetClass = TRUE MECOLE, um das Transaktionsmanagement der Klasse zu ermöglichen
4) @EnableJParePositories wird verwendet, um Transaktionen zu konfigurieren. Hier wird der Pfad durch einen CGNL -Ausdruck dargestellt und kann auch als eine bestimmte Klasse wie Deprepository.class definiert werden
Sein untergeordnetes Element umfasst Filter können Transaktionsabfangwäsche definieren, z.
4. Orm Mapping Java -Klassen -Code: Code:
1) Datenbanktabellenstruktur
2) Entitätsklassenzuordnung
@Entity // repräsentiert diese Art der Zuordnungsentitätsklasse für eine Tabelle @table (name = "tbbl_dept") // Setzen Sie den entsprechenden Tabellennamen Public Class Dept implementiert serialisierbare { /*** Funktion Beschreibung: Einzigartigkeit während der Serialisierung, die entsprechenden Get -und -festgelegten Methoden wurden weggelassen. */ Private statische endgültige lange Serialversionuid = 1L; /** Primärschlüssel -id uUid*/@id // Diese Bemerkung bedeutet, dass das Feld der Primärschlüssel der Klasse @generatedValue ist (Generator = "System -UUID") @GenericGenerator (name = "system -uUid", Strategy = "uUid") // Name -Name des Namens der entsprechenden Spalte, Länge -Maximum Länge @column (name = "id", Länge der Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -Länge -maximal Länge @" /** zum, eindeutig*/// Nullierbar - Kann es null sein, standardmäßig eindeutig - ob es eindeutig ist, Standard für false @Column (name = "no", nullable = false, einzigartig = true) private Ganzzahl nr.; / ** Abteilungsname*/ @column (name = "name", eindeutig = true, nullable = false) privater Zeichenfolge Name; / ** Abteilungsmanagement Primärschlüssel -ID UUID*/ @Column (name = "Manager", einzigartig = true, nullable = false) privater String -Manager; / ** Abteilungsbeschreibung*/ @column (name = "Beschreibung") private Zeichenfolge Beschreibung; / ** Abteilungs Telefon*/ @Column (name = "telefonisch") privates String -Telefon; / ** Abteilungs Telefon*/ @Column (name = "telefonisch") privates String -Telefon; / ** Abteilung Erstellungszeit*/ @column (name = "createTime") @DATETIMEFORMAT (muster = "yyyy-mm-dd hh: mm: ss") Private Datum CreateTime; / ** Abteilungsmodifizierungszeit*/ @column (name = "edittime") @DATETIMEFORMAT (MUSTERUNG = "YYYY-MM-DD HH: MM: SS") Private Datum Edittime;} (1) repräsentiert @Entity die Tabellenstruktur dieser Art der Zuordnung als Datenbank
(2), @table (name = "tbl_dept") Mit dieser Annotation wird die Beziehung zwischen Entitätsklassen und Tabellenzuordnung konfiguriert. Der Name repräsentiert den zugeordneten Tabellennamen.
(3) Die @ID -Annotation bedeutet, dass diese Klasse ein Hauptschlüssel ist
(4) wird die @GeneratedValue -Annotation verwendet, um primäre Schlüsselbezogene Informationen zu konfigurieren, und das Generatorattribut wird zur Konfiguration der Generationsstrategie verwendet. Es gibt die folgenden Aufzählungswerte:
1.AUTO - Der Primärschlüssel wird vom Programm gesteuert.
2. Identität - automatisch von der Datenbank generiert.
A. Energerator - Gibt den Generator an, mit dem der Primärschlüssel erzeugt wird.
4. Sequenz - Erzeugen Sie Primärschlüssel basierend auf der Sequenz der zugrunde liegenden Datenbank.
5. Tabelle - Verwenden Sie eine bestimmte Datenbanktabelle, um den Primärschlüssel zu speichern.
6. System-UUID repräsentiert die Verwendung der systemgenerierten UUID zur Übereinstimmung.
(5) @Column Annotation zum Konfigurieren von Spaltenbezogenen Informationen 1. Das Feld Namen wird verwendet, um das auf die Tabellenstruktur abgebildete Zuordnungsfeld anzugeben.
2. Die Länge repräsentiert die Längenbeschränkung dieses Feldes und kann weggelassen werden.
3. Das eindeutige Attribut gibt an, ob dieses Feld eindeutige Einschränkungen ermöglicht hat. Der Standard ist falsch und das Einzigartige ist wahr.
4. Nullierbar bedeutet, ob dieses Feld leer sein kann und der Standard ist wahr. Falsch bedeutet, dass es nicht leer sein kann.
(6) @DateTimeFormat wird verwendet, um die Datenbanktabellenzeit zuzuordnen.
Die entsprechenden GET & Set -Methoden wurden weggelassen.
3) Implementierung der Deprepository -Schicht
Wie in der Abbildung gezeigt, ist respository eine Schnittstellenspezifikation mit unterschiedlichem Vererbung der Untergrenze. Zusätzlich zur Erben aller Funktionen der übergeordneten Schnittstelle fügt jede Untergrenze zusätzliche Methoden für verschiedene Implementierungen hinzu. Die Crudrepository -Klasse definiert die grundlegende Methode und ihre Unterklassen werden separat erweitert.
Beispielsweise erweitert die PagagingandSortingRepository -Klasse zusätzlich zur Erben aller Methoden von Crudrepository es auch und fügt sie auch relevante Methoden für die Paging -Suche hinzu:
Iterable <t> findAll (sortieren); Seite <T> findAll (lehnte lehnte);
Jarepository wird basierend auf PagagingandSortingRepository erweitert.
1. Repository -Schicht:
@Repository stellt dar, dass diese Klasse vom Frühling verwaltet wird und eine DAO -Ebene ist
/*** @Function Beschreibung: DAO -Layer -Schnittstelle für Abteilungstabellenoperation* @Author Administrator*/ @repository // repository Dies ist eine DAO -Schicht -Implementierung der öffentlichen Schnittstelle Deprepository erweitert JParepository <Dept, String> {}Abhängig von der Implementierungsklasse gibt es unterschiedliche Methoden zu rufen. Im Allgemeinen kann jeder die Verwendung dieser Methode kennen, indem sie den Namen und die Bedeutung kennen. Im generischen Typ repräsentiert der erste Parameter die Entitätsklasse der Tabellenkarte und der zweite Parameter den Primärschlüsseltyp.
2. Implementierung von Service Layer:
/*** @Function Beschreibung: Implementierungsklasse für Abteilungsdienstleistungen* @Author Administrator*/ @servicePublic -Klasse DeptServiceImpl implementiert DeptService {/** Log -Verarbeitungsklasse*/private endgültige Logger log = loggerfactory.getLogger (getClass ()); @Autowired Private Deprepository Repository; @Override public Dept queryById (String -ID) löst eine Ausnahme aus {try {Dept result = repository.findone (id); log.info (result.toString ()); Rückgabeergebnis; } catch (Ausnahme e) {log.info (e.toString (), e); Neue ServiceException werfen ("Ausnahme ist beim Abfragen nach ID!"); }}}Wo FindOne die von JParepository implementierte Methode ist.
3.. Controller Layer -Implementierung:
@RastController@requestmapPing ("/api/v1/Dept") öffentliche Klasse DeptController {/** Protokollierungsklasse*/private logger log = loggerfactory.getLogger (getClass ()); / ** mein eigener Service*/ @autowired Private Deptservice Service; /*** @Function Beschreibung: Methode zum Abfrieren von Abteilungsinhalten basierend auf ID* @return Dept*/@getmapping ("/id/get") öffentliches Ergebnis getbyId (String -ID) löst eine Ausnahme aus {verifizieren (neuer Verifyparam ("Abteilungs -ID", ID)); Neues Ergebnis zurückgeben ("erfolgreich durch ID erhalten!", Service.QueryById (ID)); }}Wenn RestController den Controller darstellt, der das JSON -Format zurückgibt, definiert @RequestMapping die URL seiner Klassenkarte. Die Daten, die wir hier akzeptieren, sind ein normaler String -Typ. Wenn Sie den JSON -Typ akzeptieren müssen, benötigen Sie @RequestBody String -ID, um die Anforderungsparameter zu konfigurieren, um sie zu akzeptieren.
4. Test:
Simulieren Sie das Senden von GET-Anfragen, um die Integration und Konfiguration von Spring-DATA-JPA und MySQL zu vervollständigen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.