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.
MapSqlParameterSource
BeanPropertySqlParameterSource
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