Tout d'abord, j'expliquerai brièvement comment utiliser JDBC Template
.
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
">
Nécessaire lors de la définition d'une table ou de la saisie de données au moment de l'exécution, telles que des données de test.
Dans cet exemple, le script pour H2
écrit dans / database / schema.sql
sous le chemin de classe est chargé. Définissez nom-base de données
sur celui défini dans ʻURL. Si omis, la chaîne de caractères définie dans ʻid
est affichée.
context.xml
<jdbc:embedded-database id="dataSource" type="H2" database-name="testdb">
<jdbc:script location="classpath:/database/schema.sql" />
</jdbc:embedded-database>
Référence: Un exemple de paramètres de base de données pour Logback
. Faites correspondre la valeur de cette balise ʻurlavec le
nom-base de données`.
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>
Définissez simplement la source de données définie dans ↑ dans le constructeur
context.xml
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
Injectez simplement
java.test.java
@Inject
JdbcTemplate jdbcTemplate;
Vous pouvez recevoir le résultat de «SQL» comme «List» ou «Map» avec «queryForXXX».
Voici un exemple d'obtention du message de la sortie du journal par Logback
.
test.java
List<String> logginEvents = jdbcTemplate.queryForList(
"SELECT formatted_message FROM logging_event ORDER BY timestmp", String.class);
Vous pouvez également utiliser ?
Pour devenir un espace réservé et lier une valeur.
Voici un exemple d'obtention de la valeur associée à la clé «context» contenue dans «MDC» ou «Context».
test.java
List<String> loggingEventProperties = jdbcTemplate.queryForList(
"SELECT mapped_value FROM logging_event_property WHERE mapped_key=?", String.class,
"context");
--Si vous codez en dur SQL
, cela semble être une faute de frappe, donc je veux le rendre constant: déçu_relieved:
test.java
private static final String MESSAGE_COLUM_NAME = "formatted_message";
//Abréviation
List<String> logginEvents = jdbcTemplate.queryForList(
"SELECT ? FROM logging_event ORDER BY timestmp", String.class, MESSAGE_COLUM_NAME);
Résultat de l'exécution ……
Pourquoi formaté_message
: penser:?
La liaison de JDBCTemplate
appelle en interne PreparedStatement
, et l'espace réservé de PreparedStatement
ne prend en charge que les paramètres.
Il semble que les noms de colonne et les noms de table ne peuvent pas être liés.
J'ai cherché la documentation et recherché des points d'arrêt pendant un certain temps, mais je n'ai pas trouvé le libellé qui ne devrait pas être utilisé dans les noms de colonnes.
Cependant, étant donné que la chaîne de caractères formatted_message
a été retournée dans l'exemple de ↑ et qu'elle est liée sans échapper? Dans SQL
, il semble que le processus d'échappement du pilote JDBC
soit lié. Je vais.
Si vous souhaitez lier un nom de table ou un nom de colonne, utilisez le Format # chaîne
etc.
J'ai fait un article auquel j'étais accro quand j'ai utilisé le «JDBC Template» après un long moment.
Recommended Posts