Zunächst werde ich kurz erklären, wie man die JDBC-Vorlage verwendet.
context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
">
Erforderlich beim Definieren einer Tabelle oder beim Eingeben von Daten zur Laufzeit, z. B. Testdaten. In diesem Beispiel wird das Skript für "H2" geladen, das in "/ database / schema.sql" unter dem Klassenpfad geschrieben ist. Setzen Sie "Datenbankname" auf den in "URL" festgelegten Wert. Wenn nicht angegeben, wird die Zeichenkette in "id" angezeigt.
context.xml
<jdbc:embedded-database id="dataSource" type="H2" database-name="testdb">
<jdbc:script location="classpath:/database/schema.sql" />
</jdbc:embedded-database>
Referenz: Ein Beispiel für Datenbankeinstellungen für "Logback". Ordnen Sie den Wert dieses "url" -Tags dem "Datenbanknamen" zu.
logback.xml
<dataSource class="org.apache.commons.dbcp2.BasicDataSource">
<driverClassName>org.h2.Driver</driverClassName>
<url>jdbc:h2:mem:testdb</url>
<username>sa</username>
<password></password>
</dataSource>
Stellen Sie einfach die in ↑ definierte Datenquelle im Konstruktor ein
context.xml
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
Einfach injizieren
java.test.java
@Inject
JdbcTemplate jdbcTemplate;
Sie können das Ergebnis von "SQL" als "Liste" oder "Karte" mit "queryForXXX" erhalten. Das folgende Beispiel zeigt, wie die Protokollnachricht von "Logback" ausgegeben wird.
test.java
List<String> logginEvents = jdbcTemplate.queryForList(
"SELECT formatted_message FROM logging_event ORDER BY timestmp", String.class);
Sie können auch ?
Verwenden, um ein Platzhalter zu werden und einen Wert zu binden.
Das Folgende ist ein Beispiel für das Abrufen des Werts, der dem in "MDC" oder "Kontext" enthaltenen Schlüssel "Kontext" zugeordnet ist.
test.java
List<String> loggingEventProperties = jdbcTemplate.queryForList(
"SELECT mapped_value FROM logging_event_property WHERE mapped_key=?", String.class,
"context");
SQL
verwenden, scheint dies ein Tippfehler zu sein, daher möchte ich ihn konstant halten: enttäuscht_relieved:test.java
private static final String MESSAGE_COLUM_NAME = "formatted_message";
//Abkürzung
List<String> logginEvents = jdbcTemplate.queryForList(
"SELECT ? FROM logging_event ORDER BY timestmp", String.class, MESSAGE_COLUM_NAME);
Ausführungsergebnis ……
Warum formatierte_message
: denken :?
Die Bindung von "JDBCTemplate" ruft intern "PreparedStatement" auf, und der Platzhalter von "PreparedStatement" unterstützt nur Parameter. Es scheint, dass Spalten- und Tabellennamen nicht gebunden werden können.
Ich habe eine Weile in der Dokumentation gesucht und nach Haltepunkten gesucht, aber ich konnte den Wortlaut nicht finden, dass er nicht in Spaltennamen verwendet werden sollte. Wenn man jedoch bedenkt, dass die Zeichenfolge "formatted_message" im Beispiel von ↑ zurückgegeben wurde und ohne Escapezeichen gebunden ist? In "SQL" scheint der Escape-Prozess des "JDBC" -Treibers verwandt zu sein. Ich werde.
Wenn Sie einen Tabellennamen oder Spaltennamen binden möchten, verwenden Sie "String # format" usw.
Ich habe einen Artikel geschrieben, von dem ich süchtig war, als ich nach langer Zeit "JDBC Template" verwendete.
Recommended Posts