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