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 lenom-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