[JAVA] [Sprint Boot] Verwendung der drei in org.springframework.jdbc.core.namedparam definierten Arten von SqlParameterSource

Es wird "SqlParameterSource" verwendet, wenn Parameter an "SimpleJdbcInsert" und "NamedParameterJdbcTemplate" übergeben werden. Das gleiche Paket wie diese Schnittstelle ("org.springframework.jdbc.core.namedparam") weist jedoch die folgenden drei Arten von Implementierungsklassen auf. Ich bin.

  1. MapSqlParameterSource
  2. BeanPropertySqlParameterSource
  3. EmptySqlParameterSource

In diesem Artikel werde ich darüber schreiben, wie diese drei Arten von "SqlParameterSource" verwendet werden.

MapSqlParameterSource Es ist eine SqlParameterSource, die Parameter im Kartenformat registriert. Es ist das universellste, aber in einigen Fällen ist es arbeitssparender, die später beschriebene BeanPropertySqlParameterSource zu verwenden.

Ich benutze es hauptsächlich beim Mapping von Argumenten.

Abfragezeichenfolge


SELECT *
FROM hoge_table
WHERE hoge_id = :hogeId
  AND hoge_status = :hogeStatus;

Abfrageausführung (HogeDto-Einzelerfassungsprozess)


//Initialisierung weggelassen
String queryString;
NamedParameterJdbcTemplate jdbc;
BeanPropertyRowMapper<HogeDto> rowMapper;

public HogeDto selectHoge(Integer hogeId, String hogeStatus) {
  MapSqlParameterSource param = new MapSqlParameterSource("hogeId", hogeId)
      .addValue("hogeStatus", hogeStatus);

  return jdbc.queryForObject(queryString, param, rowMapper);
}

BeanPropertySqlParameterSource Es ist eine SqlParameterSource, die es als Parameter behandelt, wenn Sie ein Objekt darin platzieren.

Ich benutze es hauptsächlich, um vorbereitete Anweisungen in den meisten Feldern eines Objekts zu füllen oder um SimpleJdbcInsert zu verwenden.

Abfragezeichenfolge


UPDATE hoge_sub_value
SET hoge_value = :hogeValue
WHERE hoge_id = :hogeId
  AND hoge_status = :hogeStatus

Abfrageausführung (hoge_sub_Mehrere Wertaktualisierungen)


//Initialisierung weggelassen
String queryString;
NamedParameterJdbcTemplate jdbc;

public void updateHogeSubValues(List<HogeSubValue> subValues) {
  BeanPropertySqlParameterSource[] params = subValues.stream()
      .map(BeanPropertySqlParameterSource::new)
      .toArray(SqlParameterSource[]::new);

  jdbc.batchUpdate(queryString, params);
}

EmptySqlParameterSource Das letzte ist "EmptySqlParameterSource", was angibt, dass keine Parameter verwendet werden.

Obwohl in NamedParameterJdbcTemplate mit oder ohne SqlParameterSource unterschiedliche Schnittstellen definiert sind (z. B.<T> T-Abfrage (String sql, SqlParameterSource paramSource, ResultSetExtractor <T> rse)und<T> T-Abfrage ( String sql, ResultSetExtractor <T> rse)), wie unten gezeigt, wird intern implementiert, indem EmptySqlParameterSource an die Implementierung mit Parametern übergeben wird.

Ich glaube nicht, dass es viele Gelegenheiten gibt, es zu benutzen.

NamedParameterJdbcTemplate.Implementierung von Java (um die Zeilen 167 bis 187)


@Override
@Nullable
public <T> T query(
    String sql, SqlParameterSource paramSource, ResultSetExtractor<T> rse
) throws DataAccessException {
    return getJdbcOperations().query(getPreparedStatementCreator(sql, paramSource), rse);
}

@Override
@Nullable
public <T> T query(
    String sql, ResultSetExtractor<T> rse
) throws DataAccessException {
    return query(sql, EmptySqlParameterSource.INSTANCE, rse);
}

Recommended Posts

[Sprint Boot] Verwendung der drei in org.springframework.jdbc.core.namedparam definierten Arten von SqlParameterSource
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Verwendung von JQuery in Rails 6 js.erb
Aufrufen und Verwenden der API in Java (Spring Boot)
Wie man Lombok im Frühling benutzt
Verwendung von setDefaultCloseOperation () von JFrame
Verwendung von InjectorHolder in OpenAM
Verwendung von ModelMapper (Spring Boot)
Wie verwende ich Klassen in Java?
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Verwendung des benannten Volumes in docker-compose.yml
Verwendung von Docker in VSCode DevContainer
Verwendung von MySQL im Rails-Tutorial
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
Verwendung von Umgebungsvariablen in RubyOnRails
Verstehe in 5 Minuten !! Wie man Docker benutzt
Verwendung von credentials.yml.enc aus Rails 5.2
Verwendung von ExpandableListView in Android Studio
Zusammenfassung der Auswahl von Elementen in Selen
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
[Rails] Verwendung von Auswahlfeldern in Ransack
Verwendung des eingebauten h2db mit Federstiefel
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Ausgabe der Verwendung der Slice-Methode
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So binden Sie mit einer Eigenschaftendatei in Spring Boot
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
Verwendung von Map
Wie benutzt man rbenv?
[Java] Arten von Kommentaren und wie man sie schreibt
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung der Z3-Bibliothek in Scala mit Eclipse
Verwendung von collection_select
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
Verwendung von UsageStatsManager in Android Studio (Überprüfen der Startzeit anderer Apps)
Verstehen Sie, wie Sie den JSON-Decoder von Swift in 3 Minuten verwenden
Wie benutzt man Twitter4J
Verwendung von git mit der Leistung von jgit in einer Umgebung ohne git-Befehle
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
Verwendung der JDD-Bibliothek in Scala mit Eclipse
Zusammenfassung der Java-Kommunikations-API (3) Verwendung von SocketChannel
Zusammenfassung der Java-Kommunikations-API (2) Verwendung von HttpUrlConnection
Booten nach Umgebung mit Spring Boot of Maven