Cette entrée est basée sur Spring Boot et sur la base de données H2 Database Engine ) Est spécifié, et un exemple d'accès avec Spring Data JPA est résumé.
En tant que sujet, j'ai imaginé une API pour rechercher un code postal. Par exemple, si vous recherchez un endroit avec "chat" dedans, il ressemble à la figure ci-dessous.
―― Puisqu'il y a plusieurs fois pour commencer après avoir fait un modèle en copiant de chaque site d'une manière ou d'une autre, pour créer votre propre plaque chauffante ――Parce que cela peut être utile pour quelqu'un
Vous pouvez rechercher des codes postaux et des adresses comme indiqué dans la figure au début de l'entrée.
Créez une API pour rechercher la table qui stocke le code postal et l'adresse par les deux méthodes suivantes.
--Sur la page du bureau de poste puisque vous pouvez télécharger le code postal, chargez-le dans la base de données pour un accès REST.
Spring Initializr
Ça ressemble à ça.
La balise GitHub initiale est ici.
La base de données H2 est livrée avec la fonctionnalité de console WEB que vous pouvez utiliser dès que vous l'activez. (Voir la figure ci-dessous)
Pour l'activer, spécifiez ce qui suit dans application.yaml et application.yaml, ce qui signifie qu'il ne sera activé que pendant le développement.
application.yaml est le suivant. Spring Boot JPA a une fonction pour émettre du DDL basé sur @Entity lorsque ce n'est pas fait en particulier, mais je veux spécifier DDL par moi-même, alors je me suis arrêté ici.
La raison pour laquelle "; database_to_upper = false" est spécifié dans la chaîne de connexion de H2 est que le nom de la table est aligné en majuscules lors de l'émission de DDL par défaut dans H2, mais cette fonction est désactivée. Le côté JPA + Hibernate attend des lettres minuscules par défaut, nous les avons donc alignées là-bas.
sqlScriptEncoding empêche les caractères déformés dans les données lues au démarrage. (Par exemple, la plate-forme Windows essaie de fonctionner avec le codage de la plate-forme en tant que SJIS (MS932))
# properties: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html
spring:
datasource:
platform: h2
driver-class-name: org.h2.Driver
url: jdbc:h2:./demodb;database_to_upper=false
username: username
password: password
sqlScriptEncoding: UTF-8
h2:
console:
enabled: false
jpa:
hibernate:
ddl-auto: none
application-dev.yaml est la suivante. Comme il est plus facile de voir le mouvement si SQL est journalisé, jpa.show-log est spécifié comme true dans le profil de développement.
# properties: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html
spring:
h2:
console:
enabled: true
path: /h2-consolea
settings:
web-allow-others: true
jpa:
show-sql: true # for debugging-purpose only. Because it shows everything, there's no ways to filter.
properties:
hibernate:
format_sql: true
Dans cet état, la console WEB est activée en spécifiant le profil Spring à démarrer comme indiqué ci-dessous.
Pour Power Shell: (Dans Spring Boot2 ou version ultérieure, vous pouvez transmettre des paramètres à bootRun comme indiqué ci-dessous)
.\gradlew bootRun --args='--spring.profiles.active=dev'
Vous pouvez vous connecter à http: // localhost: 8080 / h2-console spécifié dans le fichier de configuration avec le jeu de nom d'utilisateur et de mot de passe spécifié dans le fichier de configuration (voir la figure ci-dessous).
Spring Boot a une fonction pour lire le SQL du schéma DB et une fonction pour lire les données DB au démarrage.
Chacun peut être réalisé en plaçant les fichiers sous src / main / resources.
Lors de l'utilisation ou du basculement entre plusieurs sources de données, chaque base de données est unique La syntaxe peut être différente, auquel cas vous pouvez la gérer en mettant un fichier pour votre plateforme d'écriture. (Il y a une explication ici)
Dans cet exemple, nous avons préparé les fichiers suivants. À titre d'exemple, nous utilisons un schéma qui stocke les codes postaux et les adresses.
Je crée une table avec src / data / resources / schema-h2.sql. Puisqu'il s'agit d'un processus qui s'exécute à chaque fois, IF NOT EXISTS est attaché. J'ai décidé d'utiliser la fonction H2 pour attribuer l'ID.
CREATE TABLE IF NOT EXISTS
postal_codes (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
code7 VARCHAR(7) NOT NULL,
address1 VARCHAR(12) NOT NULL,
address2 VARCHAR(60),
address3 VARCHAR(60)
);
Dans src / data / resources / data-h2.sql, 2 données initiales sont entrées. Principalement pour vérifier le fonctionnement pendant le développement. Je suis seul quand il est vide. Il s'agit également d'un processus qui s'exécute à chaque fois qu'il est démarré, le SQL est donc défini de manière à ne pas être dupliqué.
INSERT INTO postal_codes (code7, address1, address2, address3) select '0640941', 'Hokkaido', 'Chuo-ku, Sapporo', 'Asahigaoka' where not exists (select * from postal_codes where code7 = '0640941');
INSERT INTO postal_codes (code7, address1, address2, address3) select '0600041', 'Hokkaido', 'Chuo-ku, Sapporo', 'Odori Higashi' where not exists (select * from postal_codes where code7 = '0600041');
H2 peut lire les données CSV et les sélectionner. En utilisant cela, à partir du [site de téléchargement d'informations sur les codes postaux] du bureau de poste (https://www.post.japanpost.jp/zipcode/download.html), le fichier «KEN_ALL». Utilisez CSV.
Sur la console H2 WEB mentionnée ci-dessus, exécutez ce qui suit. Comme il n'y avait pas de nom de colonne dans les données CSV, le nom de colonne est spécifié comme une option de CSVREAD et sélectionné. Le résultat est stocké dans la table postal_codes.
insert into postal_codes (code7, address1, address2, address3) select "col3", "col7", "col8", "col9" from csvread('~/KEN_ALL.CSV', 'col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col2,col3,col4,col15', 'charset=SJIS')
À ce stade, vous disposez des données à interroger.
Il n'y en a que trois.
Main
C'est l'application Spring Boot habituelle.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Entity
Préparez une classe pour charger des données à partir de la base de données. Spring Data JPA a également une fonction qui crée automatiquement une table correspondante à partir du nom de la classe sans spécifier @Table, mais elle est explicitement spécifiée ici.
Setter / Getter est généré automatiquement en utilisant lombok. L '"id" auquel @ javax.persistense.Id est attribué correspond à celui automatiquement numéroté par H2.
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "`POSTAL_CODES`")
@Data
public class PostalCodeInfo {
@Id
private long id;
private String code7;
private String address1;
private String address2;
private String address3;
}
Repository
La couche du référentiel. En héritant de "PagingAndSortingRepository", Spring Data JPA, REST fournira l'implémentation requise pour l'accès à la base de données et l'accès REST de l'extérieur.
Les paramètres de l'annotation @RepositoryRestResource sont également donnés par le framework sans aucune spécification particulière, mais dans cet exemple, ils sont explicitement spécifiés.
@RepositoryRestResource(collectionResourceRel = "postalcode", path = "postalcodes")
public interface PostalCodeInfoRepository extends PagingAndSortingRepository<PostalCodeInfo, Long> {
List<PostalCodeInfo> findByCode7(@Param("code") String code);
@Query("SELECT p FROM PostalCodeInfo p "
+ "WHERE address1 LIKE CONCAT('%',:name,'%')"
+ " OR address2 LIKE CONCAT('%',:name,'%')"
+ " OR address3 LIKE CONCAT('%',:name,'%')"
+ " ORDER BY p.code7")
List<PostalCodeInfo> anyFieldLike(@Param("name") String name);
}
Il existe deux méthodes, mais la première est nommée selon les règles de dénomination Spring Data JPA. Pour les méthodes qui suivent les règles de dénomination, le framework implémente les instructions et paramètres SQL correspondants. C'est donc le seul code dont vous avez besoin pour trouver une adresse à partir du code postal à 7 chiffres.
List<PostalCodeInfo> findByCode7(@Param("code") String code);
Dans l'autre méthode, vous spécifiez vous-même la requête. Il y a trois colonnes liées à l'adresse, mais vous rechercherez une correspondance avec LIKE parmi elles.
@Query("SELECT p FROM PostalCodeInfo p "
+ "WHERE address1 LIKE CONCAT('%',:name,'%')"
+ " OR address2 LIKE CONCAT('%',:name,'%')"
+ " OR address3 LIKE CONCAT('%',:name,'%')"
+ " ORDER BY p.code7")
List<PostalCodeInfo> anyFieldLike(@Param("name") String name);
Mettez le code à ce stade sur GitHub mettez-le sous la forme de balise 0.1.0.
Cette entrée a couvert un exemple utilisant Spring Boot, H2 DB et Spring Data REST. Il a été confirmé que la quantité de code à écrire était considérablement réduite tant que la plage fournie par le cadre pouvait être atteinte.
J'ai réfléchi à ce qu'il fallait faire avec les trois packages de placement de code pendant un moment, mais dans cet exemple, je les ai simplement mis tous dans le même dossier. Selon le style, vous pouvez le placer dans n'importe quelle position que vous aimez.
Recommended Posts