[JAVA] Rapport de participation à la session d'étude JSUG
L'autre jour (2019/1/31) a eu lieu [Session d'étude JSUG 2019 Partie 1](https://jsug.doorkeeper.jp/events/86027?error_code=4201&error_message=User%20canceled%20the%20Dialog%20flow#_ J'ai essayé de résumer le contenu de = _).
Points de sélection du mappeur Java OU
[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 et sa classification
--Parler de l'accès à la base de données en Java, JDBC
--Problèmes JDBC
- Ecrire SQL sous forme de chaîne dans le programme
- Vous devez écrire la même chose à chaque fois
--Problème de recharger ResultSet dans les entités
C'est là qu'intervient OR Mapper
--Convertir les enregistrements RDB en objets Java
--SQL peut être automatiquement émis ou décrit dans un fichier externe
Il existe 4 (+1) types de mappeurs OR
--Type de wrapper JDBC
- JDBC finement enveloppé
--Type de wrapper SQL
--Spécialisé en SQL et en remplissage de classes
- Type de générateur de requête
--Écrire du SQL avec des classes et des méthodes
- OU type de mappeur au sens strict
- Emission SQL automatique orientée relation
- Spring Data
--Il y a Spring Data JPA
- Le nouveau JDBC Spring Data est maintenant disponible
Type de wrapper JDBC
- Juste un mince emballage de JDBC
--Facile à utiliser et faible coût d'apprentissage
- Printemps JDBC etc.
Spring JDBC
- Ne touchez pas la connexion et la déclaration
--Developer décrit uniquement le remplissage à partir de ResultSet
--Travailler sans conteneur Spring DI
--BeanPropertyRowMapper classe
- Si le nom de la colonne et le nom de la propriété sont identiques, ils seront automatiquement remplis.
--Autre que
- Vous pouvez faire tout ce que JDBC peut faire
--Classe avec agrégation, mise à jour par lots, relation 1: N
--Résumé
--Facile à utiliser
--SQL est solide
- La description de RowMapper est gênante
Type de mappeur SQL
--Spécialisé en SQL et en remplissage de classes
--MyBatis, Doma, etc.
My Batis
- Ecrire SQL en XML
- Interface un-à-un avec Mapper XML
- Seule l'interface doit être créée
- Branche conditionnelle
<if test="salary != null">
- La gestion des inégalités est difficile ("<", ">" n'est pas appliqué en xml)
-Il est bon d'utiliser <! CDATA>, mais cette fois, il est difficile de séparer \ et \ <! CDATA>.
Doma
- Le SQL bidirectionnel peut être écrit
- Peut être exécuté uniquement par SQL
――À l'avenir, seuls les documents en anglais seront disponibles
2-way SQL
- Ecrire des paramètres et des branches conditionnelles dans les commentaires
- Le SQL bidirectionnel est pratique, mais les processeurs d'annotations peuvent entrer en conflit.
Type de générateur de requête
--Écrire SQL dans les classes et les méthodes
- Si vous faites une erreur dans la description, une erreur de compilation se produira.
- jOOQ,DBFlute
jOOQ
create
.select(EMPLOYEE.ID)
.from(EMPLOYEE)
.orderby()
- Pas de soucis pour les fautes de frappe SQL, mais on ne sait pas si un SQL complexe peut être reproduit
OU type de mappeur
- JPA
- Spécifications d'accès aux données standard Java EE
--Créé pour standardiser Hibernate
- Puisqu'il s'agit d'une spécification, une bibliothèque implémentée est requise.
- EclipseLink,Hibernate
--Recherche par JPQL
--Bien que vous puissiez écrire du SQL, il existe des restrictions sur les sous-requêtes.
- L'état de l'entité est super important
- État nouveau, géré, détaché, supprimé
--EclipseLink et Hibernate se comportent différemment
- Coût d'apprentissage élevé
«Lorsqu'on leur a demandé pourquoi ils avaient choisi JPA, de nombreuses personnes ont répondu qu'il s'agissait d'une technologie standard.
Conditions d'utilisation de JPA
- Vous pouvez concevoir une nouvelle base de données, il n'y a pas de SQL compliqué, il y a des gens compétents en PJ, etc.
―― Le niveau de difficulté est élevé. Devrait être évité
Spring Data
--Résumé de nombreuses technologies d'accès aux données pour fournir une interface commune
- Interface CrudRepository
--Spring Data JPA uniquement pour RDB
- Vous devez comprendre la complexité de JPA avant de l'utiliser.
OR Flux de sélection du mappeur
--Recommandé est Spring JDBC ou MyBatis
JDBC Spring Data facile à comprendre
[SpeakerDeck Link](https://speakerdeck.com/rshindo/jsug-2019-01
)
JPA est difficile
--Donc Spring Data JDBC
Qu'est-ce que Spring Data JDBC?
--Une bibliothèque pour l'accès RDB qui a rejoint la famille Spring Data.
- Un référentiel comme Spring Data JPA peut être facilement implémenté sans JPA.
- Le concept est d'être simple
- Ce n'est pas la direction dans laquelle vous pouvez faire quelque chose comme JDBC Template.
- Ne prend pas en charge la mise en cache, le chargement différé, etc.
--Entity est OK avec Pojo (aucune @entity requise)
- Ne pas utiliser JdbcTepmlate directement
- Plus proche du mappeur OR que du mappeur SQL
--Soutenir un à plusieurs
Spriong Data JDBC
- getting start
- Spring Boot 2.1.1
- Spring Data JDBC 1.0.4
--save méthode… insérer ou mettre à jour
architecture
- Vous pouvez choisir Spring JDBC ou My Batis
--Wrapper pour le modèle JDBC
- La collaboration avec MyBatis est également possible
- Le référentiel peut être utilisé en créant une interface de référentiel et un fichier xml.
Comment créer une entité
--Faites en tête-à-tête avec la table comme JPA
--Aucun @Entity requis
--Ajouter @id à la clé primaire
- Prend en charge les constructeurs avec des arguments
- Pas besoin de setter.
--Il est également possible de rendre l'entité immuable
Dépôt
- Vous pouvez exécuter n'importe quelle requête avec @Query
--Répertoire personnalisé
Choses impossibles
- Pagination, tri
--PagingAndSortRepository n'est pas pris en charge
- Possibilité de générer automatiquement une requête à partir d'un nom de méthode
- La clé primaire composite n'est pas prise en charge
――Il sera peut-être possible de le faire à l'avenir
relation
- Prend en charge les opérations de persistance d'objets connexes
- Prend en charge les relations 1 à N
--N à 1 et M à N ne sont pas pris en charge
- Le statut du support diffère entre l'implémentation Spring JDBC et l'implémentation MyBatis
Table parents-enfants (1: N)
--Lorsque vous supprimez l'enregistrement parent, l'enregistrement enfant est également supprimé.
- Lors de la mise à jour de l'enregistrement parent, l'enregistrement enfant est Suppr / Insérer
--Créer une table de service des employés en plus de la table des employés et de la table des services
Autres caractéristiques
- Events
-Le déclencheur d'événement peut être défini pour chaque opération du référentiel
- Auditing
- Réglage de la valeur pour la colonne d'audit
Résumé
--Les personnes qui recommandent Spring Data JDBC
- Les personnes qui souhaitent utiliser Repository mais ne souhaitent pas utiliser JPA
--Les personnes qui ne veulent pas écrire de requêtes
--Les personnes qui ne recommandent pas Spring Data JDBC
- Les personnes qui souhaitent rédiger toutes les requêtes
--Les personnes qui veulent du cache et de la récupération paresseuse
--Personnes qui ne correspondent pas au schéma existant
- Les clés naturelles ne conviennent pas