[Java] Utilisation de Mirage-Basic de SQL

J'ai essayé d'utiliser Mirage-SQL comme cadre d'accès aux données dans les applications Java, je vais donc vous présenter l'utilisation de base.

Paramètres Maven

pom.xml


  <dependency>
    <groupId>jp.sf.amateras.mirage</groupId>
    <artifactId>mirage</artifactId>
    <version>***</version>
  </dependency>

Ajoutez également un référentiel.

pom.xml


  <repository>
    <id>amateras</id>
    <name>amateras</name>
    <url>http://amateras.sourceforge.jp/mvn</url>
  </repository>

Paramètres de connexion à la base de données

Placez le fichier jdbc.properties à la racine du chemin de classe.

jdbc.properties


jdbc.driver=Classe de pilote
jdbc.url=URL
jdbc.user=Nom d'utilisateur
jdbc.password=mot de passe

Fichier SQL

Placez le fichier .sql à la racine du chemin de classe.

test.sql


SELECT *
FROM staff
 
/*BEGIN*/
WHERE
 
  /*IF username != null */
  staffname = /*staffname*/'testuser'
  /*END*/
 
  /*IF staffstatus != null */
  AND staffstatus = /*status*/1
  /*END*/
 
/*END*/

Il y a des commentaires significatifs entre les deux. Cette instruction de commentaire et la valeur après le commentaire seront remplacées par des espaces réservés lors de la génération de l'instruction préparée.

Étant donné que la variable de liaison est écrite en tant que commentaire de SQL et que la valeur de test est écrite immédiatement après cela, ce SQL peut être exécuté tel quel avec l'outil de gestion de base de données ou la ligne de commande. C'est "2Way SQL".

Généralement, lors de l'exploitation d'une base de données à partir d'une application, je pense que SQL est stocké dans une variable de type chaîne et exécuté, mais Mirage-SQL peut être utilisé pour séparer complètement SQL du code source Java. Par conséquent, vous pouvez éviter la situation où «SQL ne peut pas être confirmé tant qu'il n'est pas exécuté». Puisque l'instruction SQL n'est pas assemblée dynamiquement, c'est également une contre-mesure contre l'injection SQL.

C'est une bonne idée de penser à / * BEGIN * / ~ / * END * / comme quelque chose qui s'ajuste pour ne pas causer d'erreur de syntaxe. (Voir github wiki pour plus d'informations)

Classe d'entité

Staff


import jp.sf.amateras.mirage.annotation.Column;
import jp.sf.amateras.mirage.annotation.Table;

@Table(name = "staff")//Peut être omis si le nom de la classe et le nom de la table sont identiques
public class Staff implements Serializable {
 
  @Column(name = "staffname")//Peut être omis si le nom de la colonne et le nom du champ sont identiques
  private String staffname ;
 
  @Column(name = "staffstatus ")
  private int staffstatus ;

  //Ci-dessous, méthode d'accesseur
  public void setStaffname (String staffname) {
    this.staffname= staffname;
  }

  public String getStaffname () {
    return staffname;
  }

  public void setStaffstatus (int staffstatus ) {
    this.staffstatus = staffstatus ;
  }

  public int getStaffstatus () {
    return staffstatus ;
  }

}

L'acquisition des données

Main



Session session = SessionFactory.getSession();
SqlManager sqlManager = session.getSqlManager();

session.begin();
try {
	Map<String, Object> params = new HashMap<>();
	params.put("status", 0);
	SqlResource selectUserSql = new ClasspathSqlResource("test.sql");
	List<Staff> results = sqlManager.getResultList(Staff.class, selectUserSql, params);

	for (Staff result : results ) {
		System.out.println(result.getStaffname());
	}
	session.commit();
} catch (Exception ex) {
	session.rollback();
} finally {
	session.release();
}

J'ai utilisé Map comme valeur à transmettre à la variable de liaison, mais une classe portant le même nom que la variable de liaison convient.

Recommended Posts

[Java] Utilisation de Mirage-Basic de SQL
Utilisation de base de Java Facultatif Partie 1
Examiner l'utilisation de la mémoire des éléments Java
[Java] Présentation de Java
Revue Java ③ (utilisation de base des tableaux / type de référence)
Collection expirée de java
Caractéristiques prévues de Java
NIO.2 examen de Java
Avis sur Java Shilber
java --Unification des commentaires
Utilisation minimale de Mockito
Comment utiliser les variables Java
Histoire des annotations Java
java (mérites du polymorphisme)
Examen NIO de Java
[Java] Trois fonctionnalités de Java
Résumé du support Java 2018
À propos des instances Java
[Java] Compréhension débutante de Servlet-②
[Java] Pratique de la gestion des exceptions [Exception]
[Java11] Résumé du flux -Avantages du flux-
Principes de base de l'utilisation des caractères (Java)
[Entraine toi! ] Exécution de l'instruction SQL
[Java] Création d'annotations originales
java learning day 4
[Java] Compréhension débutante de Servlet-①
Java fin du mois plusMonths
[Java] Résumé des expressions régulières
[Java] Résumé des opérateurs (opérateur)
[Java] Implémentation du réseau Faistel
[Java] Comparateur de la classe Collection
Règles d'utilisation pour la gestion des exceptions Java
Résumé des bases du langage Java
Utilisation super basique d'Eclipse
Résumé de la classe Java Math
Énumération de toutes les combinaisons Java
java (héritage du principe is-a)
Avantages et inconvénients de Java
Avantages de la méthode statique Java
[Java11] Résumé de l'utilisation du flux -Basics-
[Java] Résumé de la syntaxe de contrôle
Implémentation Java de tri-tree
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Résumé des opérations mathématiques
[Java] Comparaison de vitesse de combinaison de chaînes
Pensez à une stratégie de mise à jour Java
[Java] Supprimer les éléments de la liste
[Pour les débutants] Résumé du constructeur java
Diverses méthodes de la classe Java String
Mémo d'utilisation de JCA (Java Encryption Architecture)
Cause fondamentale du bogue du framework Java
À propos de Biocontainers fastqc et Java
[Édition Java] Histoire de la sérialisation
Résumé du package [Java Silver Study]
À propos de Lambda, Stream, LocalDate de Java8
Histoire du passage de Java Gold SE8
Trier la liste des objets Java