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.
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
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