[JAVA] [Sprint Boot] Comment utiliser les trois types de SqlParameterSource définis dans org.springframework.jdbc.core.namedparam

C'est SqlParameterSource utilisé lors du passage des paramètres à SimpleJdbcInsert et NamedParameterJdbcTemplate, mais le même package que cette interface (ʻorg.springframework.jdbc.core.namedparam`) a les trois types de classes d'implémentation suivants. Je suis.

  1. MapSqlParameterSource
  2. BeanPropertySqlParameterSource
  3. EmptySqlParameterSource

Dans cet article, j'écrirai comment utiliser ces trois types de SqlParameterSource.

MapSqlParameterSource C'est un SqlParameterSource qui enregistre les paramètres au format carte. C'est le plus polyvalent, mais dans certains cas, il est plus économique d'utiliser BeanPropertySqlParameterSource décrit plus loin.

Je l'utilise principalement pour mapper des arguments.

Chaîne de requête


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

Exécution de requêtes (processus d'acquisition unique HogeDto)


//Initialisation omise
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 C'est un SqlParameterSource qui le traite comme un paramètre lorsque vous y mettez un objet.

Je l'utilise principalement pour remplir des déclarations préparées dans la plupart des champs d'un objet, ou pour utiliser SimpleJdbcInsert.

Chaîne de requête


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

Exécution de requête (hoge_sub_Plusieurs mises à jour de valeur)


//Initialisation omise
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 Le dernier est ʻEmptySqlParameterSource`, qui indique qu'aucun paramètre n'est utilisé.

Bien que différentes interfaces soient définies dans NamedParameterJdbcTemplate avec ou sans SqlParameterSource (par exemple<T> T query (String sql, SqlParameterSource paramSource, ResultSetExtractor <T> rse)et<T> T query ( String sql, ResultSetExtractor <T> rse)), en interne, il est implémenté sous la forme de passage de ʻEmptySqlParameterSource` à l'implémentation avec des paramètres.

Je ne pense pas qu'il existe de nombreuses occasions de l'utiliser.

NamedParameterJdbcTemplate.Implémentation de java (autour des lignes 167 à 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] Comment utiliser les trois types de SqlParameterSource définis dans org.springframework.jdbc.core.namedparam
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment utiliser JQuery dans Rails 6 js.erb
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment utiliser Lombok au printemps
Comment utiliser setDefaultCloseOperation () de JFrame
Comment utiliser InjectorHolder dans OpenAM
Comment utiliser ModelMapper (Spring boot)
Comment utiliser les classes en Java?
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment utiliser le volume nommé dans docker-compose.yml
Comment utiliser Docker dans VSCode DevContainer
Comment utiliser MySQL dans le didacticiel Rails
[Java] [Maven3] Résumé de l'utilisation de Maven3
Comment utiliser les variables d'environnement dans RubyOnRails
Comprendre en 5 minutes !! Comment utiliser Docker
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment utiliser ExpandableListView dans Android Studio
Résumé de la sélection des éléments dans Selenium
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Comment utiliser h2db intégré avec Spring Boot
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
Sortie de la façon d'utiliser la méthode slice
Comment ajouter un chemin de classe dans Spring Boot
Comment se lier avec un fichier de propriétés dans Spring Boot
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
Comment utiliser Map
Comment utiliser rbenv
[Java] Types de commentaires et comment les rédiger
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
Comment utiliser collection_select
Comment créer un projet Spring Boot dans IntelliJ
Comment utiliser UsageStatsManager dans Android Studio (Comment vérifier l'heure de démarrage d'autres applications)
Comprendre comment utiliser le décodeur JSON de Swift en 3 minutes
Comment utiliser Twitter4J
Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
[Comment utiliser l'étiquette]
Comment utiliser l'identité
Comment utiliser le hachage
Résumé de l'API de communication Java (1) Comment utiliser Socket
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection
Comment démarrer par environnement avec Spring Boot de Maven