[JAVA] Bericht über die Teilnahme an der JSUG-Studiensitzung
Der andere Tag (31.1.2011) fand statt [JSUG Study Session 2019 Part 1](https://jsug.doorkeeper.jp/events/86027?error_code=4201&error_message=User%20canceled%20the%20Dialog%20flow#_ Ich habe versucht, den Inhalt von = _) zusammenzufassen.
Punkte für die Auswahl von Java OR Mapper
[SlideShare Link](https://www.slideshare.net/masatoshitada7/java-or-jsug?ref=https%3A%2F%2Ftwitter.com%2Fi%2Fcards%2Ftfw%2Fv1%2F1090929751462531075%3Fcardname%3Dplayer&autoplay_disabled=true&forward=true&earned=true&edge=true&lang=ja&card_height=130&scribe_context=%7B%22client%22%3A%22web%22%2C%22page%22%3A%22search%22%2C%22section%22%3A%22default_tweets%22%2C%22component%22%3A%22tweet%22%7D&bearer_token=AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%252F40K4moUkGsoc%253DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw&fbclid=IwAR3nUi1c0gunXLMwqG32IRyfwYgMrPwHLpJWaNzvoEYNczBAwqOZOZWWMno
)
OR Mapper und seine Klassifizierung
- Sprechen des DB-Zugriffs in Java, JDBC
- JDBC-Probleme
--Schreiben Sie SQL als Zeichenfolge im Programm
- Du musst jedes Mal das Gleiche schreiben
- Problem beim Nachfüllen von ResultSet in Entitäten
Hier kommt der OR Mapper ins Spiel
- Konvertieren Sie RDB-Datensätze in Java-Objekte
--SQL kann automatisch ausgegeben oder in einer externen Datei beschrieben werden
Es gibt 4 (+1) Arten von OR-Mappern
- JDBC-Wrapper-Typ
- Thinly eingewickelt JDBC
--SQL-Wrapper-Typ
- Spezialisiert auf SQL und Nachfüllen von Klassen
--Query Builder-Typ
--Schreibe SQL mit Klassen und Methoden
- ODER Mapper-Typ im engeren Sinne
--Relationsorientierte, automatische SQL-Ausgabe
- Spring Data
- Es gibt Spring Data JPA
- New Spring Data JDBC ist jetzt verfügbar
JDBC-Wrapper-Typ
- Nur eine dünne Packung JDBC
- Einfach zu bedienen und niedrige Lernkosten
- Spring JDBC etc.
Spring JDBC
- Berühren Sie Verbindung und Anweisung nicht
--Developer beschreibt nur das Nachfüllen aus ResultSet
--Arbeit ohne Spring DI Container
--BeanPropertyRowMapper-Klasse
- Wenn der Spaltenname und der Eigenschaftsname identisch sind, werden sie automatisch nachgefüllt.
--Außer
- Sie können alles tun, was JDBC kann
- Klasse mit Aggregation, Stapelaktualisierung, 1: N-Beziehung
--Zusammenfassung
--Einfach zu verwenden
- SQL ist solide
- Die Beschreibung von RowMapper ist problematisch
SQL-Mapper-Typ
- Spezialisiert auf SQL und Nachfüllen von Klassen
- MyBatis, Doma usw.
My Batis
--Schreiben Sie SQL in XML
- Eins-zu-eins-Schnittstelle mit Mapper XML
- Es muss nur die Schnittstelle erstellt werden
- Bedingter Zweig
<if test="salary != null">
- Der Umgang mit Ungleichheit ist schwierig ("<", ">" wird in XML nicht angewendet)
-Es ist gut, <! CDATA> zu verwenden, aber diesmal ist es schwierig, \ und \ <! CDATA> zu trennen.
Doma
- 2-Wege-SQL kann geschrieben werden
- Kann nur von SQL ausgeführt werden
―― In Zukunft werden nur englische Dokumente verfügbar sein
2-way SQL
--Schreiben Sie Parameter und bedingte Verzweigungen in Kommentare
- 2-Wege-SQL ist praktisch, aber Anmerkungsprozessoren können Konflikte verursachen.
Typ des Abfrage-Generators
--Schreiben Sie SQL in Klassen und Methoden
- Wenn Sie in der Beschreibung einen Fehler machen, tritt ein Kompilierungsfehler auf.
- jOOQ,DBFlute
jOOQ
create
.select(EMPLOYEE.ID)
.from(EMPLOYEE)
.orderby()
- Keine Sorge um SQL-Tippfehler, aber es ist unklar, ob komplexes SQL reproduziert werden kann
ODER Mapper-Typ
- JPA
- Java EE Standard-Datenzugriffsspezifikationen
- Erstellt, um den Ruhezustand zu standardisieren
- Da es sich um eine Spezifikation handelt, ist eine implementierte Bibliothek erforderlich.
- Suche nach JPQL
- Obwohl Sie SQL schreiben können, gibt es Einschränkungen für Unterabfragen.
- Der Zustand der Entität ist sehr wichtig
--Neuer, verwalteter, losgelöster, entfernter Zustand
--EclipseLink und Hibernate verhalten sich unterschiedlich
- Hohe Lernkosten
――Wenn gefragt wurde, warum sie sich für JPA entschieden haben, antworteten viele Leute, dass es sich um eine Standardtechnologie handele.
Bedingungen für die Verwendung von JPA
- Sie können eine neue Datenbank entwerfen, es gibt kein kompliziertes SQL, es gibt kompetente Leute in PJ usw.
――Der Schwierigkeitsgrad ist hoch. Sollte vermieden werden
Spring Data
- Ziehen Sie viele Datenzugriffstechnologien ab, um eine gemeinsame Schnittstelle bereitzustellen
--CrudRepository-Schnittstelle
--Spring Data JPA nur für RDB
- Sie müssen die Komplexität von JPA verstehen, bevor Sie es verwenden.
ODER Mapper-Auswahlablauf
- Empfohlen wird Spring JDBC oder MyBatis
Leicht verständlicher Spring Data JDBC
[SpeakerDeck Link](https://speakerdeck.com/rshindo/jsug-2019-01
)
JPA ist schwierig
Was ist Spring Data JDBC?
- Eine Bibliothek für den RDB-Zugriff, die der Spring Data-Familie hinzugefügt wurde.
--Repository wie Spring Data JPA kann problemlos ohne JPA implementiert werden.
- Das Konzept soll einfach sein
- Es ist nicht die Richtung, in die Sie etwas wie JDBC-Vorlage tun können.
- Unterstützt kein Caching, verzögertes Laden usw.
--Entity ist mit Pojo in Ordnung (keine @entity erforderlich)
- Betreiben Sie JdbcTepmlate nicht direkt
- Näher am OR-Mapper als am SQL-Mapper
- Unterstützen Sie eins zu viele
Spriong Data JDBC
- getting start
- Spring Boot 2.1.1
- Spring Data JDBC 1.0.4
- Methode speichern… einfügen oder aktualisieren
die Architektur
- Sie können Spring JDBC oder My Batis wählen
--Wrapper für JDBC-Vorlage
- Eine Zusammenarbeit mit MyBatis ist ebenfalls möglich
--Repository kann durch Erstellen einer Repository-Schnittstelle und einer XML-Datei verwendet werden.
So erstellen Sie eine Entität
- Machen Sie eins zu eins mit dem Tisch wie JPA
- Keine @Entity erforderlich
- Fügen Sie dem Primärschlüssel @id hinzu
- Unterstützt Konstruktoren mit Argumenten
- Kein Setter erforderlich.
- Es ist auch möglich, das Unternehmen unveränderlich zu machen
Repository
- Sie können jede Abfrage mit @Query ausführen
- Benutzerdefiniertes Repository
Dinge unmöglich
--Seiten, Sortieren
--PagingAndSortRepository wird nicht unterstützt
- Möglichkeit, automatisch eine Abfrage aus einem Methodennamen zu generieren
- Der zusammengesetzte Primärschlüssel wird nicht unterstützt
―― Möglicherweise ist dies in Zukunft möglich
Beziehung
- Unterstützt verwandte Objektpersistenzoperationen
- Unterstützt 1-zu-N-Beziehungen
--N bis 1 und M bis N werden nicht unterstützt
- Der Support-Status unterscheidet sich zwischen der Spring JDBC-Implementierung und der MyBatis-Implementierung
Eltern-Kind-Tabelle (1: N)
- Wenn Sie den übergeordneten Datensatz löschen, wird auch der untergeordnete Datensatz gelöscht.
--Wenn der übergeordnete Datensatz aktualisiert wird, lautet der untergeordnete Datensatz Löschen / Einfügen
--Erstellen Sie zusätzlich zur Mitarbeiter- und Abteilungstabelle eine Mitarbeiterabteilungstabelle
Andere Eigenschaften
- Events
-Event Trigger kann für jede Operation des Repository gesetzt werden
- Auditing
--Werteinstellung für die Überwachungsspalte
Zusammenfassung
- Personen, die Spring Data JDBC empfehlen
- Personen, die Repository verwenden möchten, aber JPA nicht verwenden möchten
- Leute, die keine Anfragen schreiben wollen
- Personen, die Spring Data JDBC nicht empfehlen
- Personen, die alle Abfragen schreiben möchten
- Leute, die Cache und faulen Abruf wollen
- Personen, die nicht mit dem vorhandenen Schema übereinstimmen
--Natürliche Schlüssel sind nicht geeignet