[Java] Mirage-Basic-Verwendung von SQL

Ich habe versucht, Mirage-SQL als Framework für den Datenzugriff in Java-Anwendungen zu verwenden, daher werde ich die grundlegende Verwendung vorstellen.

Maven-Einstellungen

pom.xml


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

Fügen Sie auch ein Repository hinzu.

pom.xml


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

Verbindungseinstellungen zur DB

Platzieren Sie die Datei "jdbc.properties" im Stammverzeichnis des Klassenpfads.

jdbc.properties


jdbc.driver=Fahrerklasse
jdbc.url=URL
jdbc.user=Nutzername
jdbc.password=Passwort

SQL-Datei

Platzieren Sie die .sql-Datei im Stammverzeichnis des Klassenpfads.

test.sql


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

Dazwischen gibt es aussagekräftige Kommentare. Diese Kommentaranweisung und der Wert nach dem Kommentar werden beim Generieren der vorbereiteten Anweisung durch Platzhalter ersetzt.

Da die Bindevariable als Kommentar von SQL geschrieben wird und der Wert für das Testen unmittelbar danach geschrieben wird, kann diese SQL wie mit dem DB-Verwaltungstool oder der Befehlszeile ausgeführt werden. Dies ist "2Way SQL".

Wenn Sie eine Datenbank von einer Anwendung aus betreiben, wird SQL im Allgemeinen in einer Variablen vom Typ String gespeichert und ausgeführt. Mirage-SQL kann jedoch verwendet werden, um SQL vollständig vom Java-Quellcode zu trennen. Daher können Sie die Situation vermeiden, dass "SQL erst bestätigt werden kann, wenn es ausgeführt wird". Da die SQL-Anweisung nicht dynamisch zusammengestellt wird, ist sie auch eine Gegenmaßnahme gegen die SQL-Injection.

Es ist eine gute Idee, sich / * BEGIN * / ~ / * END * / als etwas vorzustellen, das sich so anpasst, dass es keinen Syntaxfehler verursacht. (Weitere Informationen finden Sie unter github wiki.)

Entitätsklasse

Staff


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

@Table(name = "staff")//Kann weggelassen werden, wenn der Klassenname und der Tabellenname identisch sind
public class Staff implements Serializable {
 
  @Column(name = "staffname")//Kann weggelassen werden, wenn der Spaltenname und der Feldname identisch sind
  private String staffname ;
 
  @Column(name = "staffstatus ")
  private int staffstatus ;

  //Unten die Zugriffsmethode
  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 ;
  }

}

Datenerfassung

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();
}

Ich habe Map als Wert für die Übergabe an die Bindevariable verwendet, aber eine Klasse mit demselben Namen wie die Bindevariable ist in Ordnung.

Recommended Posts

[Java] Mirage-Basic-Verwendung von SQL
Grundlegende Verwendung von Java Optionaler Teil 1
Untersuchen Sie die Speichernutzung von Java-Elementen
[Java] Übersicht über Java
Java-Überprüfung ③ (grundlegende Verwendung von Arrays / Referenztyp)
Abgelaufene Java-Sammlung
Voraussichtliche Funktionen von Java
NIO.2 Überprüfung von Java
Bewertung von Java Shilber
Java - Vereinigung von Kommentaren
Minimaler Einsatz von Mockito
Verwendung von Java-Variablen
Geschichte der Java-Annotationen
Java (Verdienste des Polymorphismus)
NIO Bewertung von Java
[Java] Drei Funktionen von Java
Zusammenfassung der Java-Unterstützung 2018
Über Java-Instanzen
[Java] Anfängerverständnis von Servlet-②
[Java] Praxis der Ausnahmebehandlung [Ausnahme]
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
Grundlagen der Zeichenoperation (Java)
[Trainieren! ] Ausführung der SQL-Anweisung
[Java] Erstellen von Originalanmerkungen
Java-Lerntag 4
[Java] Anfängerverständnis von Servlet-①
Java Ende des Monats plusMonate
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Zusammenfassung der Operatoren (Operator)
[Java] Implementierung des Faistel-Netzwerks
[Java] Komparator der Collection-Klasse
Verwendungsregeln für die Behandlung von Java-Ausnahmen
Zusammenfassung der Grundlagen der Java-Sprache
Super grundlegende Verwendung von Eclipse
Zusammenfassung der Java Math Klasse
Aufzählung aller Kombinationen Java
Java (Vererbung von is-ein Prinzip)
Vor- und Nachteile von Java
Vorteile der statischen Java-Methode
[Java11] Stream Usage Summary -Basics-
[Java] Zusammenfassung der Steuerungssyntax
Java-Implementierung von Tri-Tree
Zusammenfassung der Java-Fehlerverarbeitung
[Java] Zusammenfassung der Entwurfsmuster
[Java] Zusammenfassung der mathematischen Operationen
[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination
Denken Sie an eine Java-Update-Strategie
[Java] Löschen Sie die Elemente von List
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Verschiedene Methoden der Java String Klasse
JCA-Verwendungsprotokoll (Java Encryption Architecture)
Grundursache für Java Framework Bug
Über Biocontainer fastqc und Java
[Java Edition] Geschichte der Serialisierung
Zusammenfassung des Pakets [Java Silver Study]
Über Lambda, Stream, LocalDate von Java8
Die Geschichte von Java Gold SE8
Liste der Java-Objekte sortieren