[JAVA] Liaison de base de données avec doma2 (Spring boot)

Qu'est-ce que Doma2

Utilisé pour l'accès à la base de données. Les caractéristiques sont les suivantes. Selon Officiel (https://doma.readthedocs.io/en/stable/)

Doma 2 est un framework d'accès aux bases de données pour Java 8 et supérieur. Doma présente de nombreux avantages.

-Utiliser le traitement des annotations pour valider et générer le code source au moment de la compilation. · Mappez les colonnes de la base de données sur les objets Java définis par l'utilisateur. -Utiliser un modèle SQL appelé "SQL bidirectionnel". · Prend en charge les classes introduites par Java 8 telles que java.time.LocalDate, java.util.Optional et java.util.stream.Stream ・ Ne dépend pas d'autres bibliothèques

La plupart sont encore traduits, donc le japonais peut être un peu étrange. .. ..

Les principaux avantages sont les deux points suivants -Pas de dépendance sur les bibliothèques autres que JRE (sensible aux dépendances ww) -Tout SQL peut être géré dans un fichier (est-il faiblement couplé?) C'est une opinion que j'ai utilisée, mais je pensais que la gérer avec un fichier SQL a l'avantage d'éviter les ** points communs excessifs **. Trop de points communs peut prêter à confusion.

la mise en oeuvre

Il y avait un exemple de projet officiel, donc je pense que c'est facile à comprendre. Exemple officiel La principale configuration requise est ・ Dao (Dao est une interface d'accès à la base de données) -Entity (une classe qui représente (mais pas seulement) une table) -Fichier SQL (requête) Sera.

Définissez une méthode de traitement CRUD dans Dao.

MstEmployeeDao.java



package com.example.dao;

import com.example.entity.MstEmployee;
import com.example.entity.UserEntity;
import org.seasar.doma.Dao;
import org.seasar.doma.Insert;
import org.seasar.doma.Select;
import org.seasar.doma.boot.ConfigAutowireable;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**Interface Dao maître employé. */
@ConfigAutowireable
@Dao
public interface MstEmployeeDao {

  @Select
  List<MstEmployee> selectAll();

  @Select
  MstEmployee selectOne(String id);

  @Select
  UserEntity selectUser(String id);

  @Insert
  @Transactional
  int insert(MstEmployee mstEmployee);
}

Transformons la requête que vous souhaitez faire avec cette méthode dans un fichier SQL. C'est comment utiliser. Placez le fichier SQL dans META-INF en créant une hiérarchie de dossiers de la même manière que` package com.example.dao; ʻ dans la classe ci-dessus et ** rendez le nom de fichier identique au nom de la méthode. ** (l'extension est sql)

Vous pouvez facilement le comprendre en regardant l'arborescence de l'exemple de projet.

tree


├── pom.xml ...Fichier de configuration Maven
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           ├── App.java  ...Fichier exécutable de l'application
    │   │           ├── SecurityConfig.java  ...Fichier de paramètres de sécurité
    │   │           ├── dao  ...Package de stockage de classe Doma2 DAO
    │   │           │   ├── MstEmployeeDao.java
    │   │           │   ├── MstNewsDao.java
    │   │           │   └── MstRoleDao.java
    │   │           ├── dto
    │   │           │   └── NewsDto.java
    │   │           ├── entity  ...Package de stockage de classe Doma2 Entity
    │   │           │   ├── AuditEntity.java
    │   │           │   ├── MstEmployee.java
    │   │           │   ├── MstNews.java
    │   │           │   ├── MstRole.java
    │   │           │   ├── UserEntity.java
    │   │           │   └── listener
    │   │           │       └── AuditListener.java
    │   │           ├── security  ...Fonction d'authentification Spring Security
    │   │           │   ├── LoginUserDetails.java
    │   │           │   ├── LoginUserDetailsService.java
    │   │           │   └── UserInfo.java
    │   │           ├── service  ...Package de stockage de classe de service
    │   │           │   ├── NewsService.java
    │   │           │   └── NewsServiceImpl.java
    │   │           └── web ...Package de stockage de classe de contrôleur Spring MVC
    │   │               ├── LoginController.java
    │   │               ├── NewsController.java
    │   │               ├── TopController.java
    │   │               └── manager
    │   │                   ├── NewsForm.java
    │   │                   ├── NewsManagerEditController.java
    │   │                   ├── NewsManagerListController.java
    │   │                   └── NewsManagerRegisterController.java
    │   └── resources
    │       ├── META-INF
    │       │   └── com
    │       │       └── example
    │       │           └── dao ...Package de stockage de fichiers SQL Doma2
    │       │               ├── MstEmployeeDao
    │       │               │   ├── selectAll.sql
    │       │               │   ├── selectOne.sql
    │       │               │   └── selectUser.sql
    │       │               ├── MstNewsDao
    │       │               │   ├── selectAll.sql
    │       │               │   ├── selectNewsDtoByCond.sql
    │       │               │   └── selectOneNewsDto.sql
    │       │               └── MstRoleDao
    │       │                   └── selectAll.sql
    │       ├── ValidationMessages.properties ...Fichier de paramètres de message de vérification de validation
    │       ├── application.yml ...Fichier de paramètres d'application
    │       ├── data.sql ...Instruction DDL à exécuter au démarrage
    │       ├── messages.properties ...Message de vérification de validation Fichier de paramètres de remplacement de propriété de formulaire
    │       ├── schema.sql ...Instruction DML à exécuter au démarrage
    │       ├── static ...Dossier de stockage de fichiers statique qui se trouve directement sous la racine de contexte au moment de l'exécution
    │       │   ├── css
    │       │   │   └── lib ...Dossier de stockage de la bibliothèque CSS
    │       │   │       ├── bootstrap-theme.min.css
    │       │   │       └── bootstrap.min.css
    │       │   ├── fonts ...Dossier de stockage des polices(Bootstrap)
    │       │   │   ├── glyphicons-halflings-regular.eot
    │       │   │   ├── glyphicons-halflings-regular.svg
    │       │   │   ├── glyphicons-halflings-regular.ttf
    │       │   │   ├── glyphicons-halflings-regular.woff
    │       │   │   └── glyphicons-halflings-regular.woff2
    │       │   ├── js
    │       │   │   └── lib ...Dossier de stockage de la bibliothèque JavaScript
    │       │   │       └── bootstrap.min.js
    │       │   └── movie
    │       │       ├── sample
    │       │       │   └── nc144421.mp4
    │       │       └── thumbnail
    │       │           ├── nc144421.jpg
    │       │           └── nc144555.jpg
    │       └── templates ...Dossier de stockage des modèles Thymeleaf
    │           ├── learning
    │           │   └── learning.html
    │           ├── loginForm.html
    │           ├── manager
    │           │   ├── managerLayout.html
    │           │   └── news
    │           │       ├── edit
    │           │       │   ├── newsEditComplete.html
    │           │       │   ├── newsEditConfirm.html
    │           │       │   └── newsEditInput.html
    │           │       ├── list
    │           │       │   └── newsList.html
    │           │       └── register
    │           │           ├── newsRegisterComplete.html
    │           │           ├── newsRegisterConfirm.html
    │           │           └── newsRegisterInput.html
    │           ├── news
    │           │   └── news.html
    │           └── top
    │               └── top.html
    └── test ...Dossier de stockage du code de test
        └── java
            └── com
                └── example
                    └── service
                        └── NewsServiceImplTest.java

Comment écrire des paramètres

Vous pouvez lier les variables de classe Dao et les variables de fichier sql en écrivant le fichier sql comme indiqué ci-dessous.

selectOne



SELECT
	employee_id,
	employee_last_name,
	employee_first_name,
	role_id
FROM mst_employee
WHERE
  employee_id = /* id */'employee_id';

De plus, la condition dynamique peut être exprimée en écrivant comme suit. Vous pouvez utiliser des instructions et des annotations if.

selectNewsDtoByCond.sql



select
  n.mst_news_id id,
  n.role_id role_id,
  r.role_name role_nm,
  n.subject subject,
  n.url url,
  n.version version
FROM
  mst_news n
INNER JOIN
  mst_role r
ON
  n.role_id = r.role_id
WHERE
/*%if @isNotEmpty(url) */
    n.url LIKE /* @prefix(url) */'http'
/*%end*/
/*%if @isNotEmpty(subject) */
AND
    n.subject LIKE /* @prefix(subject) */'aujourd'hui'
/*%end*/
/*%if @isNotEmpty(roleId) */
AND
    n.role_id = /* roleId */'01'
/*%end*/
ORDER BY
  n.mst_news_id

J'ai utilisé JPA pour accéder à la base de données de Spring Boot, mais celle-ci semble être la norme.

Recommended Posts

Liaison de base de données avec doma2 (Spring boot)
Télécharger avec Spring Boot
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Déploiement à chaud avec le développement Spring Boot
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Spring with Kotorin ―― 9. Migration de base de données ―― Flyway
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Essayez d'utiliser Spring Boot avec VS Code
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Traitement asynchrone avec Spring Boot en utilisant @Async
Résumé des paramètres initiaux pour Spring Boot, Doma2, Gradle
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
(IntelliJ + gradle) Hello World avec Spring Boot
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Test de validation de classe de formulaire avec Spring Boot
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Défi Spring Boot
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort